aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJesse Luehrs <doy@tozt.net>2016-04-27 03:31:44 -0400
committerJesse Luehrs <doy@tozt.net>2016-04-27 03:31:44 -0400
commit94dd516e13898d6a193acf5cce34a751187fe28b (patch)
tree7bfae58f155154977b3f7428250651daedcbf4f1
parentbec239655c3d23db8a19b55cf08b232c5026a5f2 (diff)
downloadvt100-rust-94dd516e13898d6a193acf5cce34a751187fe28b.tar.gz
vt100-rust-94dd516e13898d6a193acf5cce34a751187fe28b.zip
cursor_position, title, icon_name
-rw-r--r--src/screen.rs54
1 files changed, 54 insertions, 0 deletions
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 {