summaryrefslogtreecommitdiff
path: root/profanity/prof-micmot.py
blob: c844f8316670fe15cf40bc6fe96b7eed1f4ad85c (plain)
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
"""
Profanity plugin to display buffer activity in tmux pane name.

Requires something like:
`F=~/.local/share/profanity/micmot-fifo; mkfifo $F; tail -f $F &`

Also requires ":set-option allow-rename on" in the tmux buffer.
"""

import os
import re
from sys import platform
from typing import List

# https://profanity-im.github.io/plugins/0.5.1/python/html/index.html
import prof # type: ignore

TMUX_FIFO = os.environ.get('PROFANITY_TMUX_FIFO',
    os.environ['HOME'] + '/.local/share/profanity/micmot-fifo')

PANE_NAME = os.environ.get('PROFANITY_TMUX_PANE', 'profanity')
PANE_MAXLEN = 30

unread: List[str] = []


def set_pane_name(name):
    with open(TMUX_FIFO,'a') as f:
        f.write("\x1bk%s\x1b\\" % name)


def highlight_pane():
    with open(TMUX_FIFO,'a') as f:
        f.write("\x07")


def set_pane_title(name):
    with open(TMUX_FIFO, 'a') as f:
        f.write("\x1b]2;%s\x1b\\" % name)


def update_pane_name():
    global unread
    if len(unread) == 0:
        set_pane_name(PANE_NAME)
    else:
        tmux = ""
        for part in unread:
            if tmux == "":
                tmux = part
            else:
                tmux += "," + part
        set_pane_name("[{}]".format(
            re.sub(r'[^.,@#0-9A-Za-z-]+', '', tmux[:PANE_MAXLEN])))

def post_message_display(barejid, resource, message):
    global unread
    if barejid != prof.get_current_recipient():
        if not barejid in unread:
            unread.append(barejid)
        update_pane_name()
        highlight_pane()


def prof_on_chat_win_focus(barejid):
    global unread
    if barejid in unread:
        unread.remove(barejid)
    update_pane_name()


def prof_post_chat_message_display(barejid, resource, message):
    post_message_display(barejid, resource, message)
    return message


def prof_post_room_message_display(barejid, nick, message):
    post_message_display(barejid, resource, message)
    return message


def prof_post_priv_message_display(barejid, nick, message):
    post_message_display(barejid, resource, message)
    return message


def prof_init(version, status, account_name, fulljid):
    prof.cons_show("Started micmot." + PANE_NAME + TMUX_FIFO)
    set_pane_name(PANE_NAME)
    set_pane_title(PANE_NAME)

# vim: ft=python