/usr/share/weechat/python/automarkbuffer.py is in weechat-scripts 20180330-1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 | # -*- coding: utf-8 -*-
#
# Copyright (c) 2015 by nils_2 <weechatter@arcor.de>
#
# mark buffers as read if there is no new message in a specific time range
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
# idea by bascht
#
# 2015-01-25: nils_2, (freenode.#weechat)
# 1.0 : initial release
try:
import weechat
import time
except Exception:
print("This script must be run under WeeChat.")
print("Get WeeChat now at: http://www.weechat.org/")
quit()
SCRIPT_NAME = "automarkbuffer"
SCRIPT_AUTHOR = "nils_2 <weechatter@arcor.de>"
SCRIPT_VERSION = "1.0"
SCRIPT_LICENSE = "GPL"
SCRIPT_DESC = "mark buffers as read if there is no new message in a specific time range"
TIMER = None
WEECHAT_VERSION = ""
whitelist = []
OPTIONS = { 'whitelist' : ('','comma separated list of buffer to ignore, e.g. freenode.#weechat,freenode.#weechat-de (check name of buffer with : /buffer localvar)'),
'time' : ('3600','time in seconds to mark buffer as read, if there are no new messages'),
'interval' : ('60','how often in seconds to check for messages'),
'clear' : ('all','hotlist = remove buffer from hotlist, unread = set unread marker, all = hotlist & unread'),
'ignore_hidden' : ('on','hidden messages will be ignored (for example "irc_smart_filter" ones)'),
'ignore_query' : ('on','query buffer(s) will be ignored'),
}
def check_buffer_timer_cb(data, remaining_calls):
global WEECHAT_VERSION,whitelist
# search for buffers in hotlist
ptr_infolist = weechat.infolist_get("hotlist", "", "")
while weechat.infolist_next(ptr_infolist):
ptr_buffer = weechat.infolist_pointer(ptr_infolist, "buffer_pointer")
localvar_name = weechat.buffer_get_string(ptr_buffer, 'localvar_name')
# buffer in whitelist? go to next buffer
buf_type = weechat.buffer_get_string(ptr_buffer,'localvar_type')
# buffer is a query buffer?
if OPTIONS['ignore_query'].lower() == 'on' and buf_type == 'private':
continue
# buffer in whitelist?
if localvar_name in whitelist:
continue
if ptr_buffer:
if get_time_from_line(ptr_buffer):
if OPTIONS['clear'].lower() == 'hotlist' or OPTIONS['clear'].lower() == 'all':
weechat.buffer_set(ptr_buffer, "hotlist", '-1')
if OPTIONS['clear'].lower() == 'unread' or OPTIONS['clear'].lower() == 'all':
weechat.command(ptr_buffer,"/input set_unread_current_buffer")
weechat.infolist_free(ptr_infolist)
return weechat.WEECHAT_RC_OK
def get_time_from_line(ptr_buffer):
lines = weechat.hdata_pointer(weechat.hdata_get('buffer'), ptr_buffer, 'own_lines')
if lines:
line = weechat.hdata_pointer(weechat.hdata_get('lines'), lines, 'last_line')
last_read_line = weechat.hdata_pointer(weechat.hdata_get('lines'), lines, 'last_read_line')
# last line already read?
while line != last_read_line:
hdata_line = weechat.hdata_get('line')
hdata_line_data = weechat.hdata_get('line_data')
data = weechat.hdata_pointer(hdata_line, line, 'data')
date_last_line = weechat.hdata_time(hdata_line_data, data, 'date')
displayed = weechat.hdata_char(hdata_line_data, data, 'displayed')
# message hidden?
if not displayed and OPTIONS['ignore_hidden'].lower() == 'on':
prev_line = weechat.hdata_pointer(hdata_line, line, 'prev_line')
line = prev_line
continue
# buffer empty?
if not date_last_line:
return 0
get_current_ticks = time.time()
time_gone = get_current_ticks - date_last_line
if int(OPTIONS['time']) < time_gone:
return 1
else:
return 0
return 0
# ================================[ weechat options and description ]===============================
def set_timer():
global TIMER
if TIMER:
weechat.unhook(TIMER)
if int(OPTIONS['interval']) == 0:
return
TIMER = weechat.hook_timer(int(OPTIONS['interval']) * 1000,
0, 0, 'check_buffer_timer_cb', '')
def init_options():
for option,value in OPTIONS.items():
if not weechat.config_is_set_plugin(option):
weechat.config_set_plugin(option, value[0])
OPTIONS[option] = value[0]
else:
OPTIONS[option] = weechat.config_get_plugin(option)
weechat.config_set_desc_plugin(option, "%s (default: '%s')" % (value[1], value[0]))
def toggle_refresh(pointer, name, value):
global OPTIONS,whitelist
option = name[len('plugins.var.python.' + SCRIPT_NAME + '.'):] # get optionname
OPTIONS[option] = value # save new value
if name.endswith('.interval'): # timer value changed?
set_timer()
if name.endswith('.whitelist'): # whitelist changed?
whitelist = OPTIONS['whitelist'].split(',')
return weechat.WEECHAT_RC_OK
# ================================[ main ]===============================
if __name__ == "__main__":
if 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:
weechat.hook_config( 'plugins.var.python.' + SCRIPT_NAME + '.*', 'toggle_refresh', '' )
init_options()
set_timer()
whitelist = OPTIONS['whitelist'].split(',')
else:
weechat.prnt('','%s%s %s' % (weechat.prefix('error'),SCRIPT_NAME,': needs version 1.0 or higher'))
|