1
0
Fork 0

Enable Autohide

This commit is contained in:
Malte Brandy 2018-06-07 01:28:22 +02:00
parent 126a054051
commit ec2f52acc6
3 changed files with 203 additions and 4 deletions

View file

@ -27,14 +27,25 @@ config = mkIf config.m-0.weechat.enable {
target = ".weechat/perl";
source = ./plugins/perl;
};
plugins = {
target = ".weechat/plugins.conf";
text = ''
[var]
python.buffer_autohide.hide_inactive = on
python.buffer_autohide.hide_private = on
'';
};
weechat = {
target = ".weechat/weechat.conf";
text = ''
[color]
chat_nick_colors = "cyan,magenta,green,brown,lightblue,default,lightcyan,lightmagenta,lightgreen,blue,31,35,38,40,49,63,70,80,92,99,112,126,130,138,142,148,160,162,167,169,174,176,178,184,186,210,212,215,228"
[look]
buffer_notify_default = "highlight"
[network]
gnutls_ca_file = "/etc/nixos/home-manager/modules/weechat/rootca.crt"
[color]
chat_nick_colors = "cyan,magenta,green,brown,lightblue,default,lightcyan,lightmagenta,lightgreen,blue,31,35,38,40,49,63,70,80,92,99,112,126,130,138,142,148,160,162,167,169,174,176,178,184,186,210,212,215,228"
[network]
gnutls_ca_file = "/etc/nixos/home-manager/modules/weechat/rootca.crt"
'';
};
logger = {

View file

@ -0,0 +1 @@
../buffer_autohide.py

View file

@ -0,0 +1,187 @@
# -*- coding: utf-8 -*-
# MIT License
#
# Copyright (c) 2017 Matthias Adamczyk
#
# 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 NONINFRINGEMENT. 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.
"""
Automatically hide read IRC buffers and unhide them on new activity.
Requires WeeChat version 1.0 or higher.
Configuration:
plugins.var.python.buffer_autohide.hide_inactive: Hide inactive buffers (default: "off")
plugins.var.python.buffer_autohide.hide_private: Hide private buffers (default: "off")
plugins.var.python.buffer_autohide.unhide_low: Unhide a buffer when a low message (like JOIN,
PART, etc.) has been received (default: "off")
History:
2017-03-19: Matthias Adamczyk <mail@notmatti.me>
version 0.1: Initial release
https://github.com/notmatti/buffer_autohide
"""
import_ok = True
try:
import weechat
from weechat import WEECHAT_RC_OK
except ImportError:
print("Script must be run under weechat. https://weechat.org")
import_ok = False
SCRIPT_NAME = "buffer_autohide"
SCRIPT_AUTHOR = "Matthias Adamczyk <mail@notmatti.me>"
SCRIPT_VERSION = "0.1"
SCRIPT_LICENSE = "MIT"
SCRIPT_DESC = "Automatically hide read IRC buffers and unhide them on new activity"
SCRIPT_COMMAND = SCRIPT_NAME
CURRENT_BUFFER = "0x0" # pointer string representation
def config_init():
"""Add configuration options to weechat."""
config = {
"hide_inactive": ("off", "Hide inactive buffers"),
"hide_private": ("off", "Hide private buffers"),
"unhide_low": ("off",
"Unhide a buffer when a low message (like JOIN, PART, etc.) has been received"),
}
for option, default_value in config.items():
if weechat.config_get_plugin(option) == "":
weechat.config_set_plugin(option, default_value[0])
weechat.config_set_desc_plugin(
option, '{} (default: "{}")'.format(default_value[1], default_value[0]))
def hotlist_dict():
"""Return the contents of the hotlist as a dictionary.
The returned dictionary has the following structure:
>>> hotlist = {
... "0x0": { # string representation of the buffer pointer
... "count_low": 0,
... "count_message": 0,
... "count_private": 0,
... "count_highlight": 0,
... }
... }
"""
hotlist = {}
infolist = weechat.infolist_get("hotlist", "", "")
while weechat.infolist_next(infolist):
buffer_pointer = weechat.infolist_pointer(infolist, "buffer_pointer")
hotlist[buffer_pointer] = {}
hotlist[buffer_pointer]["count_low"] = weechat.infolist_integer(
infolist, "count_00")
hotlist[buffer_pointer]["count_message"] = weechat.infolist_integer(
infolist, "count_01")
hotlist[buffer_pointer]["count_private"] = weechat.infolist_integer(
infolist, "count_02")
hotlist[buffer_pointer]["count_highlight"] = weechat.infolist_integer(
infolist, "count_03")
weechat.infolist_free(infolist)
return hotlist
def hide_buffer_cb(signal, data, signal_data):
"""Hide the previous IRC buffer when switching buffers.
If configuration option ``hide_private`` is enabled,
private buffers will be hidden as well.
"""
global CURRENT_BUFFER
previous_buffer = CURRENT_BUFFER
CURRENT_BUFFER = weechat.current_buffer()
plugin = weechat.buffer_get_string(previous_buffer, "plugin")
full_name = weechat.buffer_get_string(previous_buffer, "full_name")
server = weechat.buffer_get_string(previous_buffer, "localvar_server")
channel = weechat.buffer_get_string(previous_buffer, "localvar_channel")
if plugin != "irc" or full_name.startswith("irc.server"):
return WEECHAT_RC_OK
buffer_type = weechat.buffer_get_string(
weechat.info_get("irc_buffer", "{},{}".format(server, channel)),
"localvar_type")
if (buffer_type == "private"
and weechat.config_get_plugin("hide_private") == "off"):
return WEECHAT_RC_OK
if weechat.config_get_plugin("hide_inactive") == "off":
nicks_count = 0
infolist = weechat.infolist_get(
"irc_channel", "", "{},{}".format(server, channel))
if infolist:
weechat.infolist_next(infolist)
nicks_count = weechat.infolist_integer(infolist, "nicks_count")
weechat.infolist_free(infolist)
if nicks_count == 0:
return WEECHAT_RC_OK
weechat.buffer_set(previous_buffer, "hidden", "1")
return WEECHAT_RC_OK
def unhide_buffer_cb(data, signal, signal_data):
"""Unhide a buffer on new activity.
This callback unhides the buffer in which a new message has been received.
If configuration option ``unhide_low`` is enabled,
buffers with only low messages (like JOIN, PART, etc.) will be unhidden as well.
"""
server = signal.split(",")[0]
message = weechat.info_get_hashtable(
"irc_message_parse",
{"message": signal_data})
channel = message["channel"]
hotlist = hotlist_dict()
buffer = weechat.info_get("irc_buffer", "{},{}".format(server, channel))
if not buffer in hotlist.keys():
# just some background noise
return WEECHAT_RC_OK
if (weechat.config_get_plugin("unhide_low") == "on"
and hotlist[buffer]["count_low"] > 0
or hotlist[buffer]["count_message"] > 0
or hotlist[buffer]["count_private"] > 0
or hotlist[buffer]["count_highlight"] > 0):
weechat.buffer_set(buffer, "hidden", "0")
return WEECHAT_RC_OK
if (__name__ == '__main__'
and import_ok
and weechat.register(SCRIPT_NAME, SCRIPT_AUTHOR, SCRIPT_VERSION, SCRIPT_LICENSE,
SCRIPT_DESC, '', '')):
weechat_version = weechat.info_get("version_number", "") or 0
if int(weechat_version) >= 0x01000000:
config_init()
CURRENT_BUFFER = weechat.current_buffer()
weechat.hook_signal("buffer_switch", "hide_buffer_cb", "")
weechat.hook_signal("*,irc_in2_*", "unhide_buffer_cb", "")
else:
weechat.prnt("", "{}{} requires WeeChat version 1.0 or higher".format(
weechat.prefix('error'), SCRIPT_NAME))