From 94dd516e13898d6a193acf5cce34a751187fe28b Mon Sep 17 00:00:00 2001 From: Jesse Luehrs Date: Wed, 27 Apr 2016 03:31:44 -0400 Subject: cursor_position, title, icon_name --- src/screen.rs | 54 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 54 insertions(+) (limited to 'src/screen.rs') diff --git a/src/screen.rs b/src/screen.rs index 074feff..417fbc5 100644 --- a/src/screen.rs +++ b/src/screen.rs @@ -16,6 +16,12 @@ struct ScreenGridPrefix { #[repr(C)] struct ScreenImplPrefix { grid: *mut ScreenGridPrefix, + alternate: *mut ScreenGridPrefix, + + title: *mut libc::c_char, + title_len: libc::size_t, + icon_name: *mut libc::c_char, + icon_name_len: libc::size_t, } impl Screen { @@ -120,6 +126,54 @@ impl Screen { }; Some(cell::Cell::new(cell_impl)) } + + pub fn cursor_position(&self) -> (i32, i32) { + let Screen(screen_impl) = *self; + let prefix: *mut ScreenImplPrefix = unsafe { + std::mem::transmute(screen_impl) + }; + unsafe { + ((*(*prefix).grid).cur.col, (*(*prefix).grid).cur.col) + } + } + + pub fn title(&self) -> Option<&str> { + let Screen(screen_impl) = *self; + let prefix: *mut ScreenImplPrefix = unsafe { + std::mem::transmute(screen_impl) + }; + if unsafe { (*prefix).title }.is_null() { + None + } + else { + let slice: &mut [u8] = unsafe { + std::slice::from_raw_parts_mut( + (*prefix).title as *mut u8, + (*prefix).title_len + ) + }; + Some(std::str::from_utf8(slice).unwrap()) + } + } + + pub fn icon_name(&self) -> Option<&str> { + let Screen(screen_impl) = *self; + let prefix: *mut ScreenImplPrefix = unsafe { + std::mem::transmute(screen_impl) + }; + if unsafe { (*prefix).icon_name }.is_null() { + None + } + else { + let slice: &mut [u8] = unsafe { + std::slice::from_raw_parts_mut( + (*prefix).icon_name as *mut u8, + (*prefix).icon_name_len + ) + }; + Some(std::str::from_utf8(slice).unwrap()) + } + } } impl Drop for Screen { -- cgit v1.2.3-54-g00ecf