summaryrefslogtreecommitdiff
path: root/src/fe-text
diff options
context:
space:
mode:
authorEmanuele Giaquinta <exg@irssi.org>2007-02-18 14:59:54 +0000
committerexg <exg@dbcabf3a-b0e7-0310-adc4-f8d773084564>2007-02-18 14:59:54 +0000
commitd446ee2f6f8a5c87a8dd04ef182e1b73be96873b (patch)
treecbb1eaa7b58dcc674199b271ecaaf940f9e4da63 /src/fe-text
parent541fa72f46a95ea506064a868f95d15f1a7cb8f4 (diff)
downloadirssi-d446ee2f6f8a5c87a8dd04ef182e1b73be96873b.zip
Add crapbuster-like "scrollback levelclear" command.
git-svn-id: http://svn.irssi.org/repos/irssi/trunk@4420 dbcabf3a-b0e7-0310-adc4-f8d773084564
Diffstat (limited to 'src/fe-text')
-rw-r--r--src/fe-text/textbuffer-commands.c44
1 files changed, 44 insertions, 0 deletions
diff --git a/src/fe-text/textbuffer-commands.c b/src/fe-text/textbuffer-commands.c
index 3636510b..01cf0688 100644
--- a/src/fe-text/textbuffer-commands.c
+++ b/src/fe-text/textbuffer-commands.c
@@ -132,6 +132,46 @@ static void cmd_scrollback_clear(const char *data)
cmd_params_free(free_arg);
}
+/* SYNTAX: SCROLLBACK LEVELCLEAR [-all] [<refnum>] */
+static void cmd_scrollback_levelclear(const char *data)
+{
+ WINDOW_REC *window;
+ GHashTable *optlist;
+ char *refnum;
+ void *free_arg;
+ GSList *tmp;
+ int level;
+
+ g_return_if_fail(data != NULL);
+
+ if (!cmd_get_params(data, &free_arg, 1 | PARAM_FLAG_OPTIONS,
+ "scrollback levelclear", &optlist, &refnum)) return;
+
+ level = settings_get_level("scrollback_levelclear_levels");
+ if (level == 0) {
+ cmd_params_free(free_arg);
+ return;
+ }
+
+ if (g_hash_table_lookup(optlist, "all") != NULL) {
+ /* clear all windows */
+ for (tmp = windows; tmp != NULL; tmp = tmp->next) {
+ window = tmp->data;
+ textbuffer_view_remove_lines_by_level(WINDOW_GUI(window)->view, level);
+ }
+ } else if (*refnum != '\0') {
+ /* clear specified window */
+ window = window_find_refnum(atoi(refnum));
+ if (window != NULL)
+ textbuffer_view_remove_lines_by_level(WINDOW_GUI(window)->view, level);
+ } else {
+ /* clear active window */
+ textbuffer_view_remove_lines_by_level(WINDOW_GUI(active_win)->view, level);
+ }
+
+ cmd_params_free(free_arg);
+}
+
static void scrollback_goto_line(int linenum)
{
TEXT_BUFFER_VIEW_REC *view;
@@ -351,10 +391,12 @@ static void cmd_cuix(void)
void textbuffer_commands_init(void)
{
+ settings_add_level("misc", "scrollback_levelclear_levels", "crap clientcrap");
command_bind("clear", NULL, (SIGNAL_FUNC) cmd_clear);
command_bind("window scroll", NULL, (SIGNAL_FUNC) cmd_window_scroll);
command_bind("scrollback", NULL, (SIGNAL_FUNC) cmd_scrollback);
command_bind("scrollback clear", NULL, (SIGNAL_FUNC) cmd_scrollback_clear);
+ command_bind("scrollback levelclear", NULL, (SIGNAL_FUNC) cmd_scrollback_levelclear);
command_bind("scrollback goto", NULL, (SIGNAL_FUNC) cmd_scrollback_goto);
command_bind("scrollback home", NULL, (SIGNAL_FUNC) cmd_scrollback_home);
command_bind("scrollback end", NULL, (SIGNAL_FUNC) cmd_scrollback_end);
@@ -366,6 +408,7 @@ void textbuffer_commands_init(void)
command_set_options("clear", "all");
command_set_options("scrollback clear", "all");
+ command_set_options("scrollback levelclear", "all");
signal_add("away mode changed", (SIGNAL_FUNC) sig_away_changed);
}
@@ -376,6 +419,7 @@ void textbuffer_commands_deinit(void)
command_unbind("window scroll", (SIGNAL_FUNC) cmd_window_scroll);
command_unbind("scrollback", (SIGNAL_FUNC) cmd_scrollback);
command_unbind("scrollback clear", (SIGNAL_FUNC) cmd_scrollback_clear);
+ command_unbind("scrollback levelclear", (SIGNAL_FUNC) cmd_scrollback_levelclear);
command_unbind("scrollback goto", (SIGNAL_FUNC) cmd_scrollback_goto);
command_unbind("scrollback home", (SIGNAL_FUNC) cmd_scrollback_home);
command_unbind("scrollback end", (SIGNAL_FUNC) cmd_scrollback_end);