-
Notifications
You must be signed in to change notification settings - Fork 100
/
Copy pathstyles.py
117 lines (91 loc) · 2.74 KB
/
styles.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
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
from pathlib import Path
from time import sleep
import os
from Xlib import X
from clipboard import copy, get
from constants import TARGET
from config import config, CONFIG_PATH
from rofi import rofi
import normal
pressed = []
def create_if_not_exists(directory):
if not directory.exists():
directory.mkdir(parents=True)
return directory
data_dirs = {
'style': create_if_not_exists(CONFIG_PATH / 'styles'),
'object': create_if_not_exists(CONFIG_PATH / 'objects'),
}
rofi_theme_params = ['-theme', config['rofi_theme']] if ('rofi_theme' in config and config['rofi_theme'] is not None) else []
print(data_dirs)
def check(type_, self, name):
files = list(data_dirs[type_].iterdir())
names = [f.stem for f in files]
filtered = list(i for i, n in enumerate(names) if n.startswith(name))
if len(filtered) == 0:
pressed.clear()
return back_to_normal(self)
if len(filtered) == 1:
index = filtered[0]
copy(files[index].read_text(), target=TARGET)
if type_ == 'style':
self.press('v', X.ShiftMask | X.ControlMask)
else:
self.press('v', X.ControlMask)
sleep(0.5) # Give the user some time when an object is added.
return back_to_normal(self)
def back_to_normal(self):
self.mode = normal.normal_mode
pressed.clear()
def paste_mode(type_, self, event, char):
print('paste mode')
if event.state & X.ControlMask:
# there are modifiers
# eg. X.ControlMask
# ~or X.ShiftMask~
return
if not char:
return
if event.type != X.KeyRelease:
return
if char == 'Escape':
if len(pressed) == 0:
return back_to_normal(self)
else:
pressed.clear()
else:
pressed.append(char)
return check(type_, self, ''.join(pressed))
def save_mode(type_, self):
self.press('c', X.ControlMask)
svg = get(TARGET)
if not 'svg' in svg:
return
directory = data_dirs[type_]
files = list(directory.iterdir())
names = [f.stem for f in files]
_, index, name = rofi(
'Save as',
names,
rofi_theme_params,
fuzzy=False
)
if index != -1:
# File exists
_, index, yn = rofi(
f'Overwrite {name}?',
['y', 'n'],
rofi_theme_params + ['-auto-select'],
fuzzy=False
)
if yn == 'n':
return
(directory / f'{name}.svg').write_text(get(TARGET))
def style_mode(self, event, char):
paste_mode('style', self, event, char)
def object_mode(self, event, char):
paste_mode('object', self, event, char)
def save_style_mode(self):
save_mode('style', self)
def save_object_mode(self):
save_mode('object', self)