-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathvscode.py
226 lines (177 loc) · 5.54 KB
/
vscode.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
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
from talon import Context, actions, ui, Module, app, clip
from typing import List, Union
is_mac = app.platform == "mac"
ctx = Context()
mod = Module()
mod.apps.vscode = "app.name: Code.exe"
mod.apps.vscode = "app.name: Visual Studio Code"
mod.apps.vscode = "app.name: Code"
mod.apps.vscode = "app.name: Code - OSS"
ctx.matches = r"""
app: vscode
"""
@ctx.action_class("win")
class win_actions:
def filename():
title = actions.win.title()
# this doesn't seem to be necessary on VSCode for Mac
# if title == "":
# title = ui.active_window().doc
if is_mac:
result = title.split(" — ")[0]
else:
result = title.split(" - ")[0]
if "." in result:
return result
return ""
def file_ext():
return actions.win.filename().split(".")[-1]
@ctx.action_class("edit")
class edit_actions:
def find(text: str):
if is_mac:
actions.key("cmd-f")
else:
actions.key("ctrl-f")
actions.insert(text)
def line_swap_up():
actions.key("alt-up")
def line_swap_down():
actions.key("alt-down")
def line_clone():
actions.key("shift-alt-down")
def jump_line(n: int):
actions.user.vscode("workbench.action.gotoLine")
actions.insert(str(n))
actions.key("enter")
@mod.action_class
class Actions:
def vscode(command: str):
"""Execute command via command palette. Preserves the clipboard."""
# Clip is noticeably faster than insert
if not is_mac:
actions.key("ctrl-shift-p")
else:
actions.key("cmd-shift-p")
actions.user.paste(f"{command}")
actions.key("enter")
def vscode_ignore_clipboard(command: str):
"""Execute command via command palette. Does NOT preserve the clipboard for commands like copyFilePath"""
clip.set_text(f"{command}")
if not is_mac:
actions.key("ctrl-shift-p")
else:
actions.key("cmd-shift-p")
actions.edit.paste()
actions.key("enter")
@ctx.action_class("user")
class user_actions:
# snippet.py support beginHelp close
def snippet_search(text: str):
actions.user.vscode("Insert Snippet")
actions.insert(text)
def snippet_insert(text: str):
"""Inserts a snippet"""
actions.user.vscode("Insert Snippet")
actions.insert(text)
actions.key("enter")
def snippet_create():
"""Triggers snippet creation"""
actions.user.vscode("Preferences: Configure User Snippets")
# snippet.py support end
def tab_jump(number: int):
if number < 10:
if is_mac:
actions.key("ctrl-{}".format(number))
else:
actions.key("alt-{}".format(number))
def tab_final():
if is_mac:
actions.key("ctrl-0")
else:
actions.key("alt-0")
# splits.py support begin
def split_number(index: int):
"""Navigates to a the specified split"""
if index < 9:
if is_mac:
actions.key("cmd-{}".format(index))
else:
actions.key("ctrl-{}".format(index))
# splits.py support end
# find_and_replace.py support begin
def find(text: str):
"""Triggers find in current editor"""
if is_mac:
actions.key("cmd-f")
else:
actions.key("ctrl-f")
if text:
actions.insert(text)
def find_next():
actions.key("enter")
def find_previous():
actions.key("shift-enter")
def find_everywhere(text: str):
"""Triggers find across project"""
if is_mac:
actions.key("cmd-shift-f")
else:
actions.key("ctrl-shift-f")
if text:
actions.insert(text)
def find_toggle_match_by_case():
"""Toggles find match by case sensitivity"""
if is_mac:
actions.key("alt-cmd-c")
else:
actions.key("alt-c")
def find_toggle_match_by_word():
"""Toggles find match by whole words"""
if is_mac:
actions.key("cmd-alt-w")
else:
actions.key("alt-w")
def find_toggle_match_by_regex():
"""Toggles find match by regex"""
if is_mac:
actions.key("cmd-alt-r")
else:
actions.key("alt-r")
def replace(text: str):
"""Search and replaces in the active editor"""
if is_mac:
actions.key("alt-cmd-f")
else:
actions.key("ctrl-h")
if text:
actions.insert(text)
def replace_everywhere(text: str):
"""Search and replaces in the entire project"""
if is_mac:
actions.key("cmd-shift-h")
else:
actions.key("ctrl-shift-h")
if text:
actions.insert(text)
def replace_confirm():
"""Confirm replace at current position"""
if is_mac:
actions.key("shift-cmd-1")
else:
actions.key("ctrl-shift-1")
def replace_confirm_all():
"""Confirm replace all"""
if is_mac:
actions.key("cmd-enter")
else:
actions.key("ctrl-alt-enter")
def select_previous_occurrence(text: str):
actions.edit.find(text)
actions.sleep("100ms")
actions.key("shift-enter esc")
def select_next_occurrence(text: str):
actions.edit.find(text)
actions.sleep("100ms")
actions.key("esc")
# find_and_replace.py support end