bar_items: Add a typing notice bar item.
This commit is contained in:
parent
6e27082c1a
commit
64bea928ef
4 changed files with 62 additions and 1 deletions
3
main.py
3
main.py
|
@ -40,7 +40,8 @@ from matrix.bar_items import (
|
||||||
matrix_bar_item_lag,
|
matrix_bar_item_lag,
|
||||||
matrix_bar_item_name,
|
matrix_bar_item_name,
|
||||||
matrix_bar_item_plugin,
|
matrix_bar_item_plugin,
|
||||||
matrix_bar_nicklist_count
|
matrix_bar_nicklist_count,
|
||||||
|
matrix_bar_typing_notices_cb
|
||||||
)
|
)
|
||||||
from matrix.buffer import room_buffer_close_cb, room_buffer_input_cb
|
from matrix.buffer import room_buffer_close_cb, room_buffer_input_cb
|
||||||
# Weechat searches for the registered callbacks in the scope of the main script
|
# Weechat searches for the registered callbacks in the scope of the main script
|
||||||
|
|
|
@ -16,6 +16,7 @@
|
||||||
|
|
||||||
from __future__ import unicode_literals
|
from __future__ import unicode_literals
|
||||||
|
|
||||||
|
from . import globals as G
|
||||||
from .globals import SERVERS, W
|
from .globals import SERVERS, W
|
||||||
from .utf import utf8_decode
|
from .utf import utf8_decode
|
||||||
|
|
||||||
|
@ -129,6 +130,41 @@ def matrix_bar_nicklist_count(data, item, window, buffer, extra_info):
|
||||||
return ""
|
return ""
|
||||||
|
|
||||||
|
|
||||||
|
@utf8_decode
|
||||||
|
def matrix_bar_typing_notices_cb(data, item, window, buffer, extra_info):
|
||||||
|
"""Update a status bar item showing users currently typing.
|
||||||
|
This function is called by weechat every time a buffer is switched or
|
||||||
|
W.bar_item_update(<item>) is explicitly called. The bar item shows
|
||||||
|
currently typing users for the current buffer."""
|
||||||
|
# pylint: disable=unused-argument
|
||||||
|
for server in SERVERS.values():
|
||||||
|
if buffer in server.buffers.values():
|
||||||
|
room_buffer = server.find_room_from_ptr(buffer)
|
||||||
|
room = room_buffer.room
|
||||||
|
|
||||||
|
if room.typing_users:
|
||||||
|
nicks = []
|
||||||
|
|
||||||
|
for user_id in room.typing_users:
|
||||||
|
nick = room_buffer.displayed_nicks.get(user_id, user_id)
|
||||||
|
nicks.append(nick)
|
||||||
|
|
||||||
|
msg = "{}{}".format(
|
||||||
|
G.CONFIG.look.bar_item_typing_notice_prefix,
|
||||||
|
", ".join(sorted(nicks))
|
||||||
|
)
|
||||||
|
|
||||||
|
max_len = G.CONFIG.look.max_typing_notice_item_length
|
||||||
|
if len(msg) > max_len:
|
||||||
|
msg[:max_len - 3] + "..."
|
||||||
|
|
||||||
|
return msg
|
||||||
|
|
||||||
|
return ""
|
||||||
|
|
||||||
|
return ""
|
||||||
|
|
||||||
|
|
||||||
def init_bar_items():
|
def init_bar_items():
|
||||||
W.bar_item_new("(extra)buffer_plugin", "matrix_bar_item_plugin", "")
|
W.bar_item_new("(extra)buffer_plugin", "matrix_bar_item_plugin", "")
|
||||||
W.bar_item_new("(extra)buffer_name", "matrix_bar_item_name", "")
|
W.bar_item_new("(extra)buffer_name", "matrix_bar_item_name", "")
|
||||||
|
@ -138,5 +174,10 @@ def init_bar_items():
|
||||||
"matrix_bar_nicklist_count",
|
"matrix_bar_nicklist_count",
|
||||||
""
|
""
|
||||||
)
|
)
|
||||||
|
W.bar_item_new(
|
||||||
|
"(extra)matrix_typing_notice",
|
||||||
|
"matrix_bar_typing_notices_cb",
|
||||||
|
""
|
||||||
|
)
|
||||||
W.bar_item_new("(extra)buffer_modes", "matrix_bar_item_buffer_modes", "")
|
W.bar_item_new("(extra)buffer_modes", "matrix_bar_item_buffer_modes", "")
|
||||||
W.bar_item_new("(extra)matrix_modes", "matrix_bar_item_buffer_modes", "")
|
W.bar_item_new("(extra)matrix_modes", "matrix_bar_item_buffer_modes", "")
|
||||||
|
|
|
@ -322,6 +322,24 @@ class MatrixConfig(WeechatConfig):
|
||||||
ServerBufferType,
|
ServerBufferType,
|
||||||
config_server_buffer_cb,
|
config_server_buffer_cb,
|
||||||
),
|
),
|
||||||
|
Option(
|
||||||
|
"max_typing_notice_item_length",
|
||||||
|
"integer",
|
||||||
|
"",
|
||||||
|
10,
|
||||||
|
1000,
|
||||||
|
"50",
|
||||||
|
("Limit the length of the typing notice bar item."),
|
||||||
|
),
|
||||||
|
Option(
|
||||||
|
"bar_item_typing_notice_prefix",
|
||||||
|
"string",
|
||||||
|
"",
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
"Typing: ",
|
||||||
|
("Prefix for the typing notice bar item."),
|
||||||
|
),
|
||||||
]
|
]
|
||||||
|
|
||||||
network_options = [
|
network_options = [
|
||||||
|
|
|
@ -949,6 +949,7 @@ class MatrixServer(object):
|
||||||
|
|
||||||
self.next_batch = response.next_batch
|
self.next_batch = response.next_batch
|
||||||
self.schedule_sync()
|
self.schedule_sync()
|
||||||
|
W.bar_item_update("matrix_typing_notice")
|
||||||
|
|
||||||
if self.rooms_with_missing_members:
|
if self.rooms_with_missing_members:
|
||||||
self.get_joined_members(self.rooms_with_missing_members.pop())
|
self.get_joined_members(self.rooms_with_missing_members.pop())
|
||||||
|
|
Loading…
Reference in a new issue