-
Notifications
You must be signed in to change notification settings - Fork 0
/
awful.py
84 lines (63 loc) · 2.18 KB
/
awful.py
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
# monkey patches for npyscreen to work around bugs/lack of flexibility
import curses
import npyscreen
def patch_all():
bodge_menu_defaults()
bodge_mouse_event(npyscreen.FormWithMenus.OKBUTTON_TYPE)
bodge_wrap()
bodge_notify_confirm()
def bodge_menu_defaults():
from npyscreen.wgNMenuDisplay import HasMenus
HasMenus.MENU_KEY = "M"
def bodge_notify_confirm():
"""
Adds escape handling to notify_confirm
"""
def notify_confirm(message, title="Message", form_color="STANDOUT", wrap=True, wide=False, editw=0):
message = npyscreen.utilNotify._prepare_message(message)
if wide:
F = npyscreen.PopupWide(name=title, color=form_color)
else:
F = npyscreen.Popup(name=title, color=form_color)
import forms
forms.add_standard_handlers(F)
F.preserve_selected_widget = True
mlw = F.add(npyscreen.Pager)
mlw_width = mlw.width - 1
if wrap:
message = npyscreen.utilNotify._wrap_message_lines(message, mlw_width)
else:
message = message.split("\n")
mlw.values = message
F.editw = editw
F.edit()
npyscreen.notify_confirm = notify_confirm
pass
def bodge_mouse_event(cls):
"""
Makes double clicks trigger selection for given button-like class
"""
old_event_handler = cls.handle_mouse_event
def bodged(self, *args, **kwargs):
if self.editing:
self.h_select_exit(curses.ascii.NL)
return old_event_handler(self, *args, **kwargs)
cls.handle_mouse_event = bodged
def bodge_wrap():
"""
Fixes wrap removing blank lines by adding them back in
"""
import textwrap
def _wrap_message_lines(message, line_length):
lines = []
for line in message.split("\n"):
wrapped = textwrap.wrap(line.rstrip(), line_length)
if len(wrapped) == 0:
wrapped.append("\n")
lines.extend(wrapped)
return lines
npyscreen.utilNotify._wrap_message_lines = _wrap_message_lines
def set_cwd_for_pyinstaller():
import sys
import os
os.chdir(getattr(sys, "_MEIPASS", os.path.dirname(os.path.abspath(__file__))))