# HG changeset patch # User Mikael Berthe # Date 1270390095 -7200 # Node ID 337add12c39988f4ad222e44a3d99d9b2ca287d7 # Parent 105fdf20c1c117d9e021b049ed678819b71c8f64 Rename the extsayng module to extsay diff -r 105fdf20c1c1 -r 337add12c399 extsay-ng/extsay.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/extsay-ng/extsay.c Sun Apr 04 16:08:15 2010 +0200 @@ -0,0 +1,155 @@ +/* + Copyright 2010 Mikael Berthe + + Module "extsay" -- adds a /extsay command + Spawns an external editor, using screen + See the README file + +This module is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 2 of the License, or +(at your option) any later version. + +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 General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . +*/ + +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include + +static void extsay_init(void); +static void extsay_uninit(void); + +/* Module description */ +module_info_t info_extsay = { + .branch = MCABBER_BRANCH, + .api = MCABBER_API_VERSION, + .version = "0.02", + .description = "Use external editor to send a message", + .requires = NULL, + .init = extsay_init, + .uninit = extsay_uninit, + .next = NULL, +}; + + +// Run the external helper script with parameters +static void screen_run_script(const gchar *args) +{ + GError *err = NULL; + gchar *argv[] = { "screen", "-r", "-X", "screen", NULL, + NULL, NULL, NULL, NULL }; + gchar strwinheight[32]; + gchar *fpath; + gboolean winsplit, ret; + + // screen -r -X screen $path/extsay.sh [jid [winsplit [height]]] + fpath = (gchar*)settings_opt_get("extsay_script_path"); + + // Helper script path + if (!fpath || !fpath[0]) { + scr_log_print(LPRINT_NORMAL, "Please set option 'extsay_script_path'."); + return; + } + fpath = expand_filename(fpath); + argv[4] = fpath; + + // Helper script parameter #1 + if (args && *args) + argv[5] = (gchar*)args; + else + argv[5] = "."; + + // Update parameters for the helper script + winsplit = settings_opt_get_int("extsay_split_win"); + if (winsplit) { + gint winheight = settings_opt_get_int("extsay_win_height"); + argv[6] = "winsplit"; // Helper script parameter #2 + if (winheight > 0 && winheight < 256) { + snprintf(strwinheight, sizeof strwinheight, "%d", winheight); + argv[7] = strwinheight; // Helper script parameter #3 + } + } + + ret = g_spawn_async(NULL, argv, NULL, + G_SPAWN_SEARCH_PATH | + G_SPAWN_STDOUT_TO_DEV_NULL|G_SPAWN_STDERR_TO_DEV_NULL, + NULL, NULL, NULL, &err); + + if (!ret) + scr_LogPrint(LPRINT_NORMAL, err->message); + + g_free(fpath); +} + +static void do_extsay(gchar *args) +{ + gboolean expandfjid = FALSE; + gchar *fjid; + + if (args && !strncmp(args, "." JID_RESOURCE_SEPARATORSTR, 2)) + expandfjid = TRUE; + + if (!args || !*args || expandfjid || !g_strcmp0(args, ".")) { + const gchar *res = args+2; + gpointer bud; + + if (!current_buddy) { + scr_LogPrint(LPRINT_NORMAL, "Please select a buddy."); + return; + } + + bud = BUDDATA(current_buddy); + if (!(buddy_gettype(bud) & + (ROSTER_TYPE_USER|ROSTER_TYPE_AGENT|ROSTER_TYPE_ROOM))) { + scr_LogPrint(LPRINT_NORMAL, "This is not a user."); + return; + } + + args = (gchar*)buddy_getjid(bud); + if (expandfjid && *res) { + char *res_utf8 = to_utf8(res); + fjid = g_strdup_printf("%s%c%s", args, JID_RESOURCE_SEPARATOR, res_utf8); + g_free(res_utf8); + } else { + fjid = g_strdup(args); + } + } else { + fjid = to_utf8(args); + } + + if (check_jid_syntax(fjid)) + scr_LogPrint(LPRINT_NORMAL, "Please specify a valid Jabber ID."); + else + screen_run_script(fjid); // Launch helper script with resulting JID + + g_free(fjid); +} + +static void extsay_init(void) +{ + cmd_add("extsay", "Use external editor to write a message", + COMPL_JID, 0, do_extsay, NULL); +} + +static void extsay_uninit(void) +{ + cmd_del("extsay"); +} + +/* vim: set expandtab cindent cinoptions=>2\:2(0: For Vim users... */ diff -r 105fdf20c1c1 -r 337add12c399 extsay-ng/extsayng.c --- a/extsay-ng/extsayng.c Sun Apr 04 16:00:35 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,154 +0,0 @@ -/* - Copyright 2010 Mikael Berthe - - Module "extsayng" -- adds a /extsay command - Spawns an external editor, using screen - -This module is free software: you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation, either version 2 of the License, or -(at your option) any later version. - -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 General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program. If not, see . -*/ - -#include -#include -#include -#include -#include - -#include -#include -#include -#include -#include -#include - -static void extsayng_init(void); -static void extsayng_uninit(void); - -/* Module description */ -module_info_t info_extsayng = { - .branch = MCABBER_BRANCH, - .api = MCABBER_API_VERSION, - .version = "0.01", - .description = "Use external editor to send a message", - .requires = NULL, - .init = extsayng_init, - .uninit = extsayng_uninit, - .next = NULL, -}; - - -// Run the external helper script with parameters -static void screen_run_script(const gchar *args) -{ - GError *err = NULL; - gchar *argv[] = { "screen", "-r", "-X", "screen", NULL, - NULL, NULL, NULL, NULL }; - gchar strwinheight[32]; - gchar *fpath; - gboolean winsplit, ret; - - // screen -r -X screen $path/extsay.sh [jid [winsplit [height]]] - fpath = (gchar*)settings_opt_get("extsay_script_path"); - - // Helper script path - if (!fpath || !fpath[0]) { - scr_log_print(LPRINT_NORMAL, "Please set option 'extsay_script_path'."); - return; - } - fpath = expand_filename(fpath); - argv[4] = fpath; - - // Helper script parameter #1 - if (args && *args) - argv[5] = (gchar*)args; - else - argv[5] = "."; - - // Update parameters for the helper script - winsplit = settings_opt_get_int("extsay_split_win"); - if (winsplit) { - gint winheight = settings_opt_get_int("extsay_win_height"); - argv[6] = "winsplit"; // Helper script parameter #2 - if (winheight > 0 && winheight < 256) { - snprintf(strwinheight, sizeof strwinheight, "%d", winheight); - argv[7] = strwinheight; // Helper script parameter #3 - } - } - - ret = g_spawn_async(NULL, argv, NULL, - G_SPAWN_SEARCH_PATH | - G_SPAWN_STDOUT_TO_DEV_NULL|G_SPAWN_STDERR_TO_DEV_NULL, - NULL, NULL, NULL, &err); - - if (!ret) - scr_LogPrint(LPRINT_NORMAL, err->message); - - g_free(fpath); -} - -static void do_extsayng(gchar *args) -{ - gboolean expandfjid = FALSE; - gchar *fjid; - - if (args && !strncmp(args, "." JID_RESOURCE_SEPARATORSTR, 2)) - expandfjid = TRUE; - - if (!args || !*args || expandfjid || !g_strcmp0(args, ".")) { - const gchar *res = args+2; - gpointer bud; - - if (!current_buddy) { - scr_LogPrint(LPRINT_NORMAL, "Please select a buddy."); - return; - } - - bud = BUDDATA(current_buddy); - if (!(buddy_gettype(bud) & - (ROSTER_TYPE_USER|ROSTER_TYPE_AGENT|ROSTER_TYPE_ROOM))) { - scr_LogPrint(LPRINT_NORMAL, "This is not a user."); - return; - } - - args = (gchar*)buddy_getjid(bud); - if (expandfjid && *res) { - char *res_utf8 = to_utf8(res); - fjid = g_strdup_printf("%s%c%s", args, JID_RESOURCE_SEPARATOR, res_utf8); - g_free(res_utf8); - } else { - fjid = g_strdup(args); - } - } else { - fjid = to_utf8(args); - } - - if (check_jid_syntax(fjid)) - scr_LogPrint(LPRINT_NORMAL, "Please specify a valid Jabber ID."); - else - screen_run_script(fjid); // Launch helper script with resulting JID - - g_free(fjid); -} - -static void extsayng_init(void) -{ - cmd_add("extsay", "Use external editor to write a message", - COMPL_JID, 0, do_extsayng, NULL); -} - -static void extsayng_uninit(void) -{ - cmd_del("extsay"); -} - -/* vim: set expandtab cindent cinoptions=>2\:2(0: For Vim users... */