From 7d20d29f3742115c2228f2d1a3b6c7b2f6da20c0 Mon Sep 17 00:00:00 2001 From: Joe Wilm Date: Sun, 30 Apr 2017 21:11:47 -0700 Subject: Implement tab stop manipulation Adds implementations for TBC (tabulation clear) and HTS (set horizontal tabstop). --- src/term/mod.rs | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) (limited to 'src') diff --git a/src/term/mod.rs b/src/term/mod.rs index 8f80a18d..191a1e04 100644 --- a/src/term/mod.rs +++ b/src/term/mod.rs @@ -1307,7 +1307,9 @@ impl ansi::Handler for Term { #[inline] fn set_horizontal_tabstop(&mut self) { - trace!("[unimplemented] set_horizontal_tabstop"); + trace!("set_horizontal_tabstop"); + let column = self.cursor.point.col; + self.tabs[column.0] = true; } #[inline] @@ -1502,7 +1504,21 @@ impl ansi::Handler for Term { #[inline] fn clear_tabs(&mut self, mode: ansi::TabulationClearMode) { - trace!("[unimplemented] clear_tabs: {:?}", mode); + trace!("clear_tabs: {:?}", mode); + match mode { + ansi::TabulationClearMode::Current => { + let column = self.cursor.point.col; + self.tabs[column.0] = false; + }, + ansi::TabulationClearMode::All => { + let len = self.tabs.len(); + // Safe since false boolean is null, each item occupies only 1 + // byte, and called on the length of the vec. + unsafe { + ::std::ptr::write_bytes(self.tabs.as_mut_ptr(), 0, len); + } + } + } } #[inline] -- cgit