about summary refs log tree commit diff
path: root/weechat/.weechat/python/weestats.py
diff options
context:
space:
mode:
authorBen Harris <ben@tilde.team>2022-05-12 14:12:46 -0400
committerBen Harris <ben@tilde.team>2022-05-12 14:12:46 -0400
commitf5d04cb608bdf8ac5dd03e2c562d1d009c7a1220 (patch)
tree9674b12d8e19c5f422b5200196e86a031c37101b /weechat/.weechat/python/weestats.py
parent96eb5a5cc27317edec343401f04793f0416bb99f (diff)
a bunch of random stuff
Diffstat (limited to 'weechat/.weechat/python/weestats.py')
-rw-r--r--weechat/.weechat/python/weestats.py156
1 files changed, 156 insertions, 0 deletions
diff --git a/weechat/.weechat/python/weestats.py b/weechat/.weechat/python/weestats.py
new file mode 100644
index 0000000..ab21135
--- /dev/null
+++ b/weechat/.weechat/python/weestats.py
@@ -0,0 +1,156 @@
+# -*- coding: utf-8 -*-
+#
+# weestats.py, version 0.2 for WeeChat version 0.3
+# Latest development version: https://github.com/FiXato/weechat_scripts
+#
+# Inserts some statistics into your input field about the buffers/windows
+#  you have open.
+# Example: 151 buffers (46 merged): 135 channels, 9 servers, 3 queries,
+#  1 script, 1 python, 1 perl, 1 core; 3 windows
+#
+## History:
+#
+### 2012-03-29: FiXato:
+# * version 0.1: initial release.
+#     * Display a count of all the different buffers you have open.
+#     * Display a count of all the open windows.
+# * version 0.2: Getting the splits.
+#     * Displays the how many vertical and horizontal windows.
+#       (not quite sure if my approximation is correct though..)
+#     * Fixed possible memleak (forgot to free an infolist)
+### 2015-05-02: arza:
+# * version 0.3:
+#     * handle non-#-channels
+#     * numerical sort for buffer info
+#     * moved window split info to option -split
+#     * simplified the output
+### 2019-07-05: Sébastien Helleu:
+# * version 0.4:
+#     * make script compatible with Python 3
+#
+## Acknowledgements:
+# * Sebastien "Flashcode" Helleu, for developing the kick-ass chat/IRC
+#    client WeeChat
+#
+## TODO:
+#   - Add more statistics, such as:
+#     - average and total history lines.
+#     - average and total topic/title lengths
+#     - how many are displayed in a window
+#
+## Copyright (c) 2012 Filip H.F. "FiXato" Slagter,
+#   <FiXato+WeeChat [at] Gmail [dot] com>
+#   https://google.com/profiles/FiXato
+#
+# Permission is hereby granted, free of charge, to any person obtaining
+# a copy of this software and associated documentation files (the
+# "Software"), to deal in the Software without restriction, including
+# without limitation the rights to use, copy, modify, merge, publish,
+# distribute, sublicense, and/or sell copies of the Software, and to
+# permit persons to whom the Software is furnished to do so, subject to
+# the following conditions:
+#
+# The above copyright notice and this permission notice shall be
+# included in all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+# NON-INFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+#
+
+from __future__ import print_function
+
+SCRIPT_NAME     = "weestats"
+SCRIPT_AUTHOR   = "Filip H.F. 'FiXato' Slagter <fixato [at] gmail [dot] com>"
+SCRIPT_VERSION  = "0.4"
+SCRIPT_LICENSE  = "MIT"
+SCRIPT_DESC     = "Useless statistics about your open buffers and windows"
+SCRIPT_COMMAND  = "weestats"
+SCRIPT_CLOSE_CB = "close_cb"
+
+import_ok = True
+
+try:
+  import weechat as w
+except ImportError:
+  print("This script must be run under WeeChat.")
+  import_ok = False
+
+def close_cb(*kwargs):
+  return w.WEECHAT_RC_OK
+
+def command_main(data, buffer, args):
+  infolist = w.infolist_get("buffer", "", "")
+  buffer_groups = {}
+  results = []
+  buffer_count = 0
+  merge_count = 0
+  numbers = set()
+  while w.infolist_next(infolist):
+    bplugin = w.infolist_string(infolist, "plugin_name")
+    bname = w.infolist_string(infolist, "name")
+    bpointer = w.infolist_pointer(infolist, "pointer")
+    bnumber = w.infolist_integer(infolist, "number")
+    btype = w.buffer_get_string(bpointer, 'localvar_type')
+    if not bnumber in numbers:
+      numbers.add(bnumber)
+    else:
+      merge_count += 1
+
+    if btype == 'server':
+      bdesc = 'servers'
+    elif btype == 'channel':
+      bdesc = 'channels'
+    elif btype == 'private':
+      bdesc = 'queries'
+    else:
+      bdesc = bplugin
+
+    buffer_groups.setdefault(bdesc,[]).append({'name': bname, 'pointer': bpointer})
+
+  w.infolist_free(infolist)
+
+  infolist = w.infolist_get("window", "", "")
+  windows_v = set()
+  windows_h = set()
+  windows = set()
+  while w.infolist_next(infolist):
+    window = w.infolist_pointer(infolist, "pointer")
+    window_w = w.infolist_integer(infolist, "width_pct")
+    window_h = w.infolist_integer(infolist, "height_pct")
+    windows.add(window)
+    if window_h == 100 and window_w != 100:
+      windows_v.add(window)
+    elif window_w == 100 and window_h != 100:
+      windows_h.add(window)
+    #else: #both 100%, thus no splits
+  w.infolist_free(infolist)
+
+  window_count = len(windows)
+
+  for desc, buffers in buffer_groups.items():
+    buffer_count += len(buffers)
+    results.append('%i %s' % (len(buffers), desc))
+
+  buffer_stats = ', '.join(sorted(results, key = lambda item: (int(item.partition(' ')[0]) if item[0].isdigit() else float('inf'), item),reverse=True)) # descending numerical sort of strings
+  stats_string = '%i buffers (%i merged): %s; %i windows' % (buffer_count, merge_count, buffer_stats, window_count)
+  if '-split' in args:
+    stats_string += ": %i vertically / %i horizontally split" % (len(windows_v), len(windows_h))
+  w.command("", "/input insert %s" % stats_string)
+  return w.WEECHAT_RC_OK
+
+if __name__ == "__main__" and import_ok:
+  if w.register(SCRIPT_NAME, SCRIPT_AUTHOR, SCRIPT_VERSION,
+                      SCRIPT_LICENSE, SCRIPT_DESC, SCRIPT_CLOSE_CB, ""):
+
+    w.hook_command(SCRIPT_COMMAND,
+                          SCRIPT_DESC,
+                          "-split",
+                          "Inserts useless statistics about your open buffers and windows into your input line.\n"
+                          "-split: Include information about window splits.",
+                          "-split",
+                          "command_main", "")