diff --git a/src/lib.rs b/src/lib.rs index ae5333c..acdfb7f 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -3,6 +3,7 @@ use shenlong_sys::*; use std::ffi::CStr; use std::ptr; use std::mem::transmute; +use scouter::Scouter; extern "C" fn shenlong_init(plugin: *mut GeanyPlugin, pdata: gpointer) -> gboolean { println!("shenlong init"); @@ -16,6 +17,14 @@ extern "C" fn shenlong_init(plugin: *mut GeanyPlugin, pdata: gpointer) -> gboole Some(transmute(shenlong_document_open as usize)), ptr::null_mut() ); + plugin_signal_connect( + plugin, + ptr::null_mut(), + c_str!("document-activate").to_owned().as_ptr(), + 0, + Some(transmute(shenlong_document_activate as usize)), + ptr::null_mut() + ); plugin_signal_connect( plugin, ptr::null_mut(), @@ -41,8 +50,20 @@ extern "C" fn shenlong_cleanup(plugin: *mut GeanyPlugin, pdata: gpointer) { } extern "C" fn shenlong_document_open(obj: *mut GObject, doc: *mut GeanyDocument, user_data: gpointer) { - unsafe { - println!("shenlong document open: {:?}", CStr::from_ptr((*doc).real_path).to_str()); + let document_path = unsafe { CStr::from_ptr((*doc).real_path).to_str().expect("failed to get document path") }; + println!("shenlong document open: {:?}", document_path); + let mut scouter = Scouter::new(document_path); + if let Some(project) = scouter.next() { + println!("-- shenlong project open: {:?}", project); + } +} + +extern "C" fn shenlong_document_activate(obj: *mut GObject, doc: *mut GeanyDocument, user_data: gpointer) { + let document_path = unsafe { CStr::from_ptr((*doc).real_path).to_str().expect("failed to get document path") }; + println!("shenlong document activate: {:?}", document_path); + let mut scouter = Scouter::new(document_path); + if let Some(project) = scouter.next() { + println!("-- shenlong project open: {:?}", project); } }