summary refs log tree commit diff stats
path: root/README.md
diff options
context:
space:
mode:
authorSoniEx2 <endermoneymod@gmail.com>2021-05-14 22:06:23 -0300
committerSoniEx2 <endermoneymod@gmail.com>2021-05-14 22:06:23 -0300
commitb0dcbe6e3ee505009278826d0a9e651497c7182f (patch)
tree49f9090df843a6cd60cce3beb60018390efa83b4 /README.md
parenta2a311bc91a76027a7efb6ade4ec29c018b33f1b (diff)
Make print take ToString, so it's nicer to use
Diffstat (limited to 'README.md')
-rw-r--r--README.md84
1 files changed, 27 insertions, 57 deletions
diff --git a/README.md b/README.md
index 78bd3cd..9effee2 100644
--- a/README.md
+++ b/README.md
@@ -1,70 +1,40 @@
 Rust hexchat-plugin
 ===================
 
-`hexchat-plugin` provides safe and rusty API bindings for developing native HexChat plugins.
+`hexchat-plugin` provides safe and rusty API bindings for developing native
+HexChat plugins.
 
-Example plugin:
+To get started, implement `hexchat_plugin::Plugin` on a struct and use the
+`hexchat_plugin!(impl Plugin)` macro in your `lib.rs`. Do not provide a `main`,
+as it will not work. Make sure to use the `cdylib` crate-type, or it will also
+not work.
 
-```rust
-#[macro_use]
-extern crate hexchat_plugin;
+Also note that plugins may be loaded multiple times. It's recommended to avoid
+using global state (statics, thread locals) so as to not cause issues with it.
 
-use hexchat_plugin::{Plugin, PluginHandle, InfoId};
+Examples
+--------
 
-use std::sync::Mutex;
-use std::sync::Arc;
+For a production-grade plugin using this crate, take a look at
+<https://github.com/SoniEx2/cw2-hexchat>.
 
-#[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>>>,
-}
+License
+-------
 
+```text
+Hexchat Plugin API Bindings for Rust
+Copyright (C) 2018, 2021 Soni L.
 
-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");
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU Affero General Public License as
+published by the Free Software Foundation, either version 3 of the
+License, or (at your option) any later version.
 
-        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));
-        }
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU Affero General Public License for more details.
 
-        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);
+You should have received a copy of the GNU Affero General Public License
+along with this program.  If not, see <https://www.gnu.org/licenses/>.
 ```