diff options
author | SoniEx2 <endermoneymod@gmail.com> | 2019-04-21 20:03:35 -0300 |
---|---|---|
committer | SoniEx2 <endermoneymod@gmail.com> | 2019-04-21 20:03:35 -0300 |
commit | b320a12af2419086665f6686a336c1ad4334f043 (patch) | |
tree | 2eb784e5ed0d76175c3c9703219886dcba961a21 /README.md | |
parent | 8f4f74845e9b5b1a5cdc71872b2df87926c3ca32 (diff) |
Update metadata
Diffstat (limited to 'README.md')
-rw-r--r-- | README.md | 70 |
1 files changed, 70 insertions, 0 deletions
diff --git a/README.md b/README.md new file mode 100644 index 0000000..78bd3cd --- /dev/null +++ b/README.md @@ -0,0 +1,70 @@ +Rust hexchat-plugin +=================== + +`hexchat-plugin` provides safe and rusty API bindings for developing native HexChat plugins. + +Example plugin: + +```rust +#[macro_use] +extern crate hexchat_plugin; + +use hexchat_plugin::{Plugin, PluginHandle, InfoId}; + +use std::sync::Mutex; +use std::sync::Arc; + +#[derive(Default)] +struct MyPlug { + // be careful with these: we don't want to move them into the hooks, as that would cause memory leaks! + // we can safely use Arc::downgrade on them, however! + cmutex: Arc<Mutex<Vec<hexchat_plugin::CommandHookHandle>>>, + smutex: Arc<Mutex<Vec<hexchat_plugin::ServerHookHandle>>>, + pmutex: Arc<Mutex<Vec<hexchat_plugin::PrintHookHandle>>>, + tmutex: Arc<Mutex<Vec<hexchat_plugin::TimerHookHandle>>>, +} + + +impl Plugin for MyPlug { + fn init(&self, ph: &mut PluginHandle, _arg: Option<&str>) -> bool { + ph.register("MyPlug", "Prints the old topic on topic change", "0.1.0"); + ph.print("Loaded MyPlug 0.1.0"); + + let enabled = Arc::new(Mutex::new(false)); + { + let flag = enabled.clone(); + self.pmutex.lock().unwrap().push(ph.hook_print("Topic Change", move |ph, _word| { + if *flag.lock().unwrap() { + if let Some(topic) = ph.get_info(&InfoId::Topic) { + ph.print(&format!("\x0322*\t\x0329Previous topic:\x03 {}", topic)); + } + } + hexchat_plugin::EAT_NONE + }, hexchat_plugin::PRI_NORM)); + } + + self.cmutex.lock().unwrap().push(ph.hook_command("PrintOldTopic", move |ph, _word, word_eol| { + match word_eol.get(1) { + Option::Some(&s) if s == "true" => { + ph.print("Set PrintOldTopic to true"); + *enabled.lock().unwrap() = true; + } + Option::Some(&s) if s == "false" => { + ph.print("Set PrintOldTopic to false"); + *enabled.lock().unwrap() = false; + } + Option::Some(_) => { + ph.print("Usage: /PrintOldTopic [true|false]"); + } + Option::None => { + ph.print(&format!("PrintOldTopic: {}", *enabled.lock().unwrap())); + } + } + hexchat_plugin::EAT_ALL + }, hexchat_plugin::PRI_NORM, Some("Usage: /PrintOldTopic [true|false]"))); + true // tells hexchat we have successfully initialized + } +} + +hexchat_plugin!(MyPlug); +``` |