Skip to content

Commit f7faf04

Browse files
weechatterflashcode
authored andcommitted
collapse_channel.py 1.2: ignore exclude channels on non-irc buffers, internal changes
1 parent 8f0d7be commit f7faf04

File tree

1 file changed

+44
-42
lines changed

1 file changed

+44
-42
lines changed

python/collapse_channel.py

Lines changed: 44 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,8 @@
5555
# 2023-09-02: nils_2, (libera.#weechat)
5656
# 1.1 : one more check for buffer_ptr
5757

58+
# 2023-09-08: nils_2, (libera.#weechat)
59+
# 1.2 : ignore exclude channels on non-irc buffers, internal changes
5860

5961
# idea and testing by DJ-ArcAngel
6062

@@ -68,7 +70,7 @@
6870

6971
SCRIPT_NAME = "collapse_channel"
7072
SCRIPT_AUTHOR = "nils_2 <weechatter@arcor.de>"
71-
SCRIPT_VERSION = "1.1"
73+
SCRIPT_VERSION = "1.2"
7274
SCRIPT_LICENSE = "GPL"
7375
SCRIPT_DESC = "collapse channel buffers from servers without focus"
7476

@@ -79,10 +81,9 @@
7981
'activity' : ('off','show channels with activity only (see option hotlist). all exclude options will be ignored'),
8082
}
8183

82-
# ================================[ buffer ]===============================
84+
# ================================[ buffer open/closed ]===============================
8385
def buffer_opened_closed_cb(data, signal, signal_data):
8486
global OPTIONS
85-
8687
# sadly localvar not set in this moment, when buffer opens! :-(
8788
# server = weechat.buffer_get_string(signal_data, 'localvar_server') # get internal servername
8889
infolist = weechat.infolist_get('buffer', signal_data, '')
@@ -107,13 +108,13 @@ def buffer_opened_closed_cb(data, signal, signal_data):
107108
buffer_ptr = weechat.buffer_search('irc', 'server.%s' % server)
108109
if buffer_ptr:
109110
weechat.command(buffer_ptr,'/allchan -current /buffer unhide')
111+
weechat.command('','/allchan -exclude=%s /buffer hide' % OPTIONS['channel_exclude'])
110112
exclude_server()
111113
single_channel_exclude()
112114
else:
113115
weechat.command('','/allchan /buffer hide')
114116
exclude_hotlist()
115117
return weechat.WEECHAT_RC_OK
116-
117118
# ============================[ buffer_switch ]===========================
118119
def buffer_switch_cb(data, signal, signal_data):
119120
global OPTIONS, version
@@ -123,9 +124,10 @@ def buffer_switch_cb(data, signal, signal_data):
123124
return weechat.WEECHAT_RC_OK
124125

125126
# when you /join a buffer and irc.look.buffer_switch_join is ON, the new buffer pointer is not useable at this time
127+
weechat.command("","/wait 1ms /mute")
126128
server = weechat.buffer_get_string(signal_data, 'localvar_server') # get internal servername
127-
buffer_ptr = weechat.buffer_search('irc', 'server.%s' % server)
128-
if not buffer_ptr: # buffer pointer exists?
129+
buffer_ptr = weechat.buffer_search('irc', 'server.%s' % server) # looks for server. (This does not effect eg server raw buffer)
130+
if not buffer_ptr and server != 'irc_raw': # buffer pointer exists?
129131
return weechat.WEECHAT_RC_OK # no!
130132

131133
if OPTIONS['activity'].lower() == 'no' or OPTIONS['activity'].lower() == 'off' or OPTIONS['activity'].lower() == '0':
@@ -146,11 +148,44 @@ def buffer_switch_cb(data, signal, signal_data):
146148
weechat.command(bufpointer,'/buffer unhide') # unhide current channel
147149
exclude_hotlist()
148150
return weechat.WEECHAT_RC_OK
149-
151+
# ================================[ hotlist changed ]==============================
152+
def hotlist_changed_cb(data, signal, signal_data):
153+
if not signal_data:
154+
plugin_name = weechat.buffer_get_string(weechat.current_buffer(), 'localvar_plugin')
155+
# TODO how about matrix script or other non-irc channel buffer? no idea! help is welcome
156+
if plugin_name != 'irc': # script only support irc plugin!
157+
return weechat.WEECHAT_RC_OK
158+
# weechat.command('', '/allchan /buffer hide')
159+
if OPTIONS['activity'].lower() == 'no' or OPTIONS['activity'].lower() == 'off' or OPTIONS['activity'].lower() == '0':
160+
exclude_server()
161+
single_channel_exclude()
162+
exclude_hotlist()
163+
return weechat.WEECHAT_RC_OK
164+
# ================================[ window switch ]===============================
150165
def window_switch_cb(data, signal, signal_data):
151166
bufpointer = weechat.window_get_pointer(signal_data,'buffer')
152167
buffer_switch_cb(data,signal,bufpointer)
153168
return weechat.WEECHAT_RC_OK
169+
# ================================[ server signals ]===============================
170+
def irc_server_disconnected_cb(data, signal, signal_data):
171+
buffer_switch_cb(data,signal,signal_data)
172+
return weechat.WEECHAT_RC_OK
173+
174+
def irc_server_connected_cb(data, signal, signal_data):
175+
buffer_switch_cb(data,signal,signal_data)
176+
return weechat.WEECHAT_RC_OK
177+
178+
def exclude_hotlist():
179+
if OPTIONS['hotlist'] == '0' or OPTIONS['hotlist'] =='':
180+
return weechat.WEECHAT_RC_OK
181+
infolist = weechat.infolist_get('hotlist', '', '')
182+
while weechat.infolist_next(infolist):
183+
buffer_number = weechat.infolist_integer(infolist, 'buffer_number')
184+
priority = weechat.infolist_integer(infolist, 'priority')
185+
if int(OPTIONS['hotlist']) == priority or OPTIONS['hotlist'] == '4':
186+
weechat.command('','/buffer unhide %s' % buffer_number)
187+
weechat.infolist_free(infolist)
188+
return weechat.WEECHAT_RC_OK
154189

155190
def exclude_server():
156191
global OPTIONS
@@ -192,40 +227,6 @@ def single_channel_exclude():
192227
# space separated list for /buffer unhide
193228
weechat.command('','/buffer unhide %s' % OPTIONS['single_channel_exclude'])
194229
return
195-
# ================================[ server ]===============================
196-
def irc_server_disconnected_cb(data, signal, signal_data):
197-
buffer_switch_cb(data,signal,signal_data)
198-
return weechat.WEECHAT_RC_OK
199-
200-
def irc_server_connected_cb(data, signal, signal_data):
201-
buffer_switch_cb(data,signal,signal_data)
202-
return weechat.WEECHAT_RC_OK
203-
204-
# ================================[ hotlist ]==============================
205-
def hotlist_changed_cb(data, signal, signal_data):
206-
if not signal_data:
207-
plugin_name = weechat.buffer_get_string(weechat.current_buffer(), 'localvar_plugin')
208-
# TODO how about matrix script or other non-irc channel buffer? no idea! help is welcome
209-
if plugin_name != 'irc': # for example /fset, /color etc.pp buffer
210-
weechat.command('', '/allchan /buffer hide')
211-
if OPTIONS['activity'].lower() == 'no' or OPTIONS['activity'].lower() == 'off' or OPTIONS['activity'].lower() == '0':
212-
exclude_server()
213-
single_channel_exclude()
214-
215-
exclude_hotlist()
216-
return weechat.WEECHAT_RC_OK
217-
218-
def exclude_hotlist():
219-
if OPTIONS['hotlist'] == '0' or OPTIONS['hotlist'] =='':
220-
return weechat.WEECHAT_RC_OK
221-
infolist = weechat.infolist_get('hotlist', '', '')
222-
while weechat.infolist_next(infolist):
223-
buffer_number = weechat.infolist_integer(infolist, 'buffer_number')
224-
priority = weechat.infolist_integer(infolist, 'priority')
225-
if int(OPTIONS['hotlist']) == priority or OPTIONS['hotlist'] == '4':
226-
weechat.command('','/buffer unhide %s' % buffer_number)
227-
weechat.infolist_free(infolist)
228-
return weechat.WEECHAT_RC_OK
229230
# ================================[ weechat options & description ]===============================
230231
def init_options():
231232
for option,value in list(OPTIONS.items()):
@@ -258,7 +259,8 @@ def shutdown_cb():
258259
weechat.hook_command(SCRIPT_NAME,SCRIPT_DESC,
259260
'',
260261
"Note: channels from disconnected server will be displayed and won't hidden automatically.\n"
261-
'Use the /fset plugin to configure script: /fset collapse_channel',
262+
'- This script only affects channels from irc plugin.\n'
263+
'- Use the /fset plugin to configure script: /fset collapse_channel',
262264
'',
263265
'',
264266
'')

0 commit comments

Comments
 (0)