Enable Autohide
This commit is contained in:
parent
126a054051
commit
ec2f52acc6
3 changed files with 203 additions and 4 deletions
|
@ -27,14 +27,25 @@ config = mkIf config.m-0.weechat.enable {
|
||||||
target = ".weechat/perl";
|
target = ".weechat/perl";
|
||||||
source = ./plugins/perl;
|
source = ./plugins/perl;
|
||||||
};
|
};
|
||||||
|
plugins = {
|
||||||
|
target = ".weechat/plugins.conf";
|
||||||
|
text = ''
|
||||||
|
[var]
|
||||||
|
python.buffer_autohide.hide_inactive = on
|
||||||
|
python.buffer_autohide.hide_private = on
|
||||||
|
'';
|
||||||
|
};
|
||||||
weechat = {
|
weechat = {
|
||||||
target = ".weechat/weechat.conf";
|
target = ".weechat/weechat.conf";
|
||||||
text = ''
|
text = ''
|
||||||
[color]
|
[look]
|
||||||
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"
|
buffer_notify_default = "highlight"
|
||||||
|
|
||||||
[network]
|
[color]
|
||||||
gnutls_ca_file = "/etc/nixos/home-manager/modules/weechat/rootca.crt"
|
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 = {
|
logger = {
|
||||||
|
|
|
@ -0,0 +1 @@
|
||||||
|
../buffer_autohide.py
|
187
home-manager/modules/weechat/plugins/python/buffer_autohide.py
Normal file
187
home-manager/modules/weechat/plugins/python/buffer_autohide.py
Normal 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))
|
Loading…
Reference in a new issue