summaryrefslogtreecommitdiff
path: root/plugins
diff options
context:
space:
mode:
Diffstat (limited to 'plugins')
-rw-r--r--plugins/close_all.py45
1 files changed, 45 insertions, 0 deletions
diff --git a/plugins/close_all.py b/plugins/close_all.py
new file mode 100644
index 00000000..1b98213e
--- /dev/null
+++ b/plugins/close_all.py
@@ -0,0 +1,45 @@
+"""
+``close_all`` plugin: close all tabs except MUCs and the roster.
+
+Commands
+--------
+
+.. glossary::
+
+ /closeall
+ **Usage:** ``/closeall``
+
+ Close all tabs except the roster and MUC tabs.
+"""
+from plugin import BasePlugin
+import tabs
+from decorators import command_args_parser
+
+
+class Plugin(BasePlugin):
+ def init(self):
+ self.api.add_command('closeall', self.command_closeall,
+ help='Close all non-muc tabs.')
+
+ @command_args_parser.ignored
+ def command_closeall(self):
+ """
+ /closeall
+ """
+ current = self.core.current_tab()
+ if not isinstance(current, (tabs.RosterInfoTab, tabs.MucTab)):
+ self.core.go_to_roster()
+ current = self.core.current_tab()
+
+ def filter_func(x):
+ return not isinstance(x, (tabs.RosterInfoTab, tabs.MucTab))
+
+ matching_tabs = list(filter(filter_func, self.core.tabs))
+ length = len(matching_tabs)
+ for tab in matching_tabs:
+ self.core.close_tab(tab)
+ self.core.current_tab_nb = current.nb
+ self.api.information('%s tabs closed.' % length, 'Info')
+ self.core.refresh_window()
+
+