omdev 0.0.0.dev128__py3-none-any.whl → 0.0.0.dev129__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of omdev might be problematic. Click here for more details.
- omdev/pycharm/cli.py +60 -17
- omdev/scripts/interp.py +24 -0
- omdev/scripts/pyproject.py +24 -0
- {omdev-0.0.0.dev128.dist-info → omdev-0.0.0.dev129.dist-info}/METADATA +2 -2
- {omdev-0.0.0.dev128.dist-info → omdev-0.0.0.dev129.dist-info}/RECORD +9 -9
- {omdev-0.0.0.dev128.dist-info → omdev-0.0.0.dev129.dist-info}/LICENSE +0 -0
- {omdev-0.0.0.dev128.dist-info → omdev-0.0.0.dev129.dist-info}/WHEEL +0 -0
- {omdev-0.0.0.dev128.dist-info → omdev-0.0.0.dev129.dist-info}/entry_points.txt +0 -0
- {omdev-0.0.0.dev128.dist-info → omdev-0.0.0.dev129.dist-info}/top_level.txt +0 -0
omdev/pycharm/cli.py
CHANGED
|
@@ -5,8 +5,10 @@ TODO:
|
|
|
5
5
|
- https://unix.stackexchange.com/questions/17255/is-there-a-command-to-list-all-open-displays-on-a-machine
|
|
6
6
|
- w -oush
|
|
7
7
|
"""
|
|
8
|
+
import dataclasses as dc
|
|
8
9
|
import inspect
|
|
9
10
|
import os.path
|
|
11
|
+
import shlex
|
|
10
12
|
import subprocess
|
|
11
13
|
import sys
|
|
12
14
|
import tempfile
|
|
@@ -15,6 +17,9 @@ from omlish import argparse as ap
|
|
|
15
17
|
from omlish.diag.pycharm import get_pycharm_version
|
|
16
18
|
|
|
17
19
|
|
|
20
|
+
##
|
|
21
|
+
|
|
22
|
+
|
|
18
23
|
_DARWIN_OPEN_SCRIPT = """
|
|
19
24
|
tell application "{app}"
|
|
20
25
|
activate
|
|
@@ -24,26 +29,53 @@ return
|
|
|
24
29
|
"""
|
|
25
30
|
|
|
26
31
|
|
|
27
|
-
|
|
28
|
-
|
|
32
|
+
##
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
_LINUX_PYCHARM_WM_CLASS = 'jetbrains-pycharm.jetbrains-pycharm'
|
|
36
|
+
_LINUX_CLION_WM_CLASS = 'jetbrains-clion.jetbrains-pycharm'
|
|
37
|
+
|
|
29
38
|
|
|
30
|
-
# wmctrl
|
|
31
|
-
#
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
# export DISPLAY=":1"
|
|
37
|
-
wmctrl -x -a jetbrains-pycharm.jetbrains-pycharm
|
|
38
|
-
xdotool key --delay 20 alt+f alt+o
|
|
39
|
-
xdotool type --delay 10 "$(pwd)"
|
|
40
|
-
xdotool key Return
|
|
41
|
-
else
|
|
42
|
-
nohup pycharm.sh "$PROJECT_PATH" > /dev/null 2>&1 &
|
|
43
|
-
fi
|
|
39
|
+
# sudo apt install xdotool wmctrl
|
|
40
|
+
# TODO: nohup pycharm.sh "$PROJECT_PATH" > /dev/null 2>&1 & ?
|
|
41
|
+
_LINUX_OPEN_SCRIPT = """
|
|
42
|
+
xdotool key --delay 1000 alt+f alt+o
|
|
43
|
+
xdotool type --delay 1000 {dir}
|
|
44
|
+
xdotool key Return
|
|
44
45
|
"""
|
|
45
46
|
|
|
46
47
|
|
|
48
|
+
@dc.dataclass(frozen=True)
|
|
49
|
+
class WmctrlLine:
|
|
50
|
+
window_id: str
|
|
51
|
+
desktop_id: str
|
|
52
|
+
pid: str
|
|
53
|
+
wm_class: str
|
|
54
|
+
user: str
|
|
55
|
+
title: str
|
|
56
|
+
|
|
57
|
+
|
|
58
|
+
# TODO: https://stackoverflow.com/a/79016360
|
|
59
|
+
def parse_wmctrl_lxp_line(l: str) -> WmctrlLine:
|
|
60
|
+
window_id, _, l = l.lstrip().partition(' ')
|
|
61
|
+
desktop_id, _, l = l.lstrip().partition(' ')
|
|
62
|
+
pid, _, l = l.lstrip().partition(' ')
|
|
63
|
+
wm_class, _, l = l.lstrip().partition(' ')
|
|
64
|
+
user, _, l = l.lstrip().partition(' ')
|
|
65
|
+
title = l.strip()
|
|
66
|
+
return WmctrlLine(
|
|
67
|
+
window_id,
|
|
68
|
+
desktop_id,
|
|
69
|
+
pid,
|
|
70
|
+
wm_class,
|
|
71
|
+
user,
|
|
72
|
+
title,
|
|
73
|
+
)
|
|
74
|
+
|
|
75
|
+
|
|
76
|
+
##
|
|
77
|
+
|
|
78
|
+
|
|
47
79
|
class Cli(ap.Cli):
|
|
48
80
|
@ap.command()
|
|
49
81
|
def version(self) -> None:
|
|
@@ -90,7 +122,18 @@ class Cli(ap.Cli):
|
|
|
90
122
|
subprocess.check_call(['osascript', scpt_file])
|
|
91
123
|
|
|
92
124
|
elif plat == 'linux':
|
|
93
|
-
|
|
125
|
+
env = os.environ
|
|
126
|
+
env.setdefault('DISPLAY', ':1')
|
|
127
|
+
|
|
128
|
+
wmc_out = subprocess.check_output(['wmctrl', '-lxp'], env=env).decode()
|
|
129
|
+
wls = [parse_wmctrl_lxp_line(l) for l in wmc_out.splitlines()]
|
|
130
|
+
tgt_wmc = _LINUX_CLION_WM_CLASS if self.args.clion else _LINUX_PYCHARM_WM_CLASS
|
|
131
|
+
tgt_wl = next(wl for wl in wls if wl.wm_class == tgt_wmc)
|
|
132
|
+
subprocess.check_call(['wmctrl', '-ia', tgt_wl.window_id], env=env)
|
|
133
|
+
|
|
134
|
+
scpt = _LINUX_OPEN_SCRIPT.format(dir=shlex.quote(os.path.expanduser(dir)))
|
|
135
|
+
print(scpt)
|
|
136
|
+
# subprocess.check_call(scpt, shell=True, env=env) # noqa
|
|
94
137
|
raise NotImplementedError
|
|
95
138
|
|
|
96
139
|
else:
|
omdev/scripts/interp.py
CHANGED
|
@@ -548,6 +548,30 @@ def check_not_equal(l: T, r: T) -> T:
|
|
|
548
548
|
return l
|
|
549
549
|
|
|
550
550
|
|
|
551
|
+
def check_is(l: T, r: T) -> T:
|
|
552
|
+
if l is not r:
|
|
553
|
+
raise ValueError(l, r)
|
|
554
|
+
return l
|
|
555
|
+
|
|
556
|
+
|
|
557
|
+
def check_is_not(l: T, r: ta.Any) -> T:
|
|
558
|
+
if l is r:
|
|
559
|
+
raise ValueError(l, r)
|
|
560
|
+
return l
|
|
561
|
+
|
|
562
|
+
|
|
563
|
+
def check_in(v: T, c: ta.Container[T]) -> T:
|
|
564
|
+
if v not in c:
|
|
565
|
+
raise ValueError(v, c)
|
|
566
|
+
return v
|
|
567
|
+
|
|
568
|
+
|
|
569
|
+
def check_not_in(v: T, c: ta.Container[T]) -> T:
|
|
570
|
+
if v in c:
|
|
571
|
+
raise ValueError(v, c)
|
|
572
|
+
return v
|
|
573
|
+
|
|
574
|
+
|
|
551
575
|
def check_single(vs: ta.Iterable[T]) -> T:
|
|
552
576
|
[v] = vs
|
|
553
577
|
return v
|
omdev/scripts/pyproject.py
CHANGED
|
@@ -1838,6 +1838,30 @@ def check_not_equal(l: T, r: T) -> T:
|
|
|
1838
1838
|
return l
|
|
1839
1839
|
|
|
1840
1840
|
|
|
1841
|
+
def check_is(l: T, r: T) -> T:
|
|
1842
|
+
if l is not r:
|
|
1843
|
+
raise ValueError(l, r)
|
|
1844
|
+
return l
|
|
1845
|
+
|
|
1846
|
+
|
|
1847
|
+
def check_is_not(l: T, r: ta.Any) -> T:
|
|
1848
|
+
if l is r:
|
|
1849
|
+
raise ValueError(l, r)
|
|
1850
|
+
return l
|
|
1851
|
+
|
|
1852
|
+
|
|
1853
|
+
def check_in(v: T, c: ta.Container[T]) -> T:
|
|
1854
|
+
if v not in c:
|
|
1855
|
+
raise ValueError(v, c)
|
|
1856
|
+
return v
|
|
1857
|
+
|
|
1858
|
+
|
|
1859
|
+
def check_not_in(v: T, c: ta.Container[T]) -> T:
|
|
1860
|
+
if v in c:
|
|
1861
|
+
raise ValueError(v, c)
|
|
1862
|
+
return v
|
|
1863
|
+
|
|
1864
|
+
|
|
1841
1865
|
def check_single(vs: ta.Iterable[T]) -> T:
|
|
1842
1866
|
[v] = vs
|
|
1843
1867
|
return v
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: omdev
|
|
3
|
-
Version: 0.0.0.
|
|
3
|
+
Version: 0.0.0.dev129
|
|
4
4
|
Summary: omdev
|
|
5
5
|
Author: wrmsr
|
|
6
6
|
License: BSD-3-Clause
|
|
@@ -12,7 +12,7 @@ Classifier: Operating System :: OS Independent
|
|
|
12
12
|
Classifier: Operating System :: POSIX
|
|
13
13
|
Requires-Python: >=3.12
|
|
14
14
|
License-File: LICENSE
|
|
15
|
-
Requires-Dist: omlish==0.0.0.
|
|
15
|
+
Requires-Dist: omlish==0.0.0.dev129
|
|
16
16
|
Provides-Extra: all
|
|
17
17
|
Requires-Dist: black~=24.10; extra == "all"
|
|
18
18
|
Requires-Dist: pycparser~=2.22; extra == "all"
|
|
@@ -109,7 +109,7 @@ omdev/ptk/apps/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
|
109
109
|
omdev/ptk/apps/ncdu.py,sha256=dOkEJoc2Wjv1u_Uge7Vpei_LvXldoPP5833Eia355tc,4548
|
|
110
110
|
omdev/pycharm/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
111
111
|
omdev/pycharm/__main__.py,sha256=hUPp11D024eMdT86BxXiRVtF7AGBk5W6Zn8_mEHSksY,163
|
|
112
|
-
omdev/pycharm/cli.py,sha256=
|
|
112
|
+
omdev/pycharm/cli.py,sha256=C853Ioh6h2TAiTF5D_cuEu8PfIviuQAawzlXJIphysk,3798
|
|
113
113
|
omdev/pyproject/__init__.py,sha256=Y3l4WY4JRi2uLG6kgbGp93fuGfkxkKwZDvhsa0Rwgtk,15
|
|
114
114
|
omdev/pyproject/__main__.py,sha256=gn3Rl1aYPYdiTtEqa9ifi0t-e4ZwPY0vhJ4UXvYdJDY,165
|
|
115
115
|
omdev/pyproject/cexts.py,sha256=x13piOOnNrYbA17qZLDVuR0p1sqhgEwpk4FtImX-klM,4281
|
|
@@ -122,8 +122,8 @@ omdev/scripts/bumpversion.py,sha256=Kn7fo73Hs8uJh3Hi3EIyLOlzLPWAC6dwuD_lZ3cIzuY,
|
|
|
122
122
|
omdev/scripts/execrss.py,sha256=mR0G0wERBYtQmVIn63lCIIFb5zkCM6X_XOENDFYDBKc,651
|
|
123
123
|
omdev/scripts/exectime.py,sha256=sFb376GflU6s9gNX-2-we8hgH6w5MuQNS9g6i4SqJIo,610
|
|
124
124
|
omdev/scripts/importtrace.py,sha256=oa7CtcWJVMNDbyIEiRHej6ICfABfErMeo4_haIqe18Q,14041
|
|
125
|
-
omdev/scripts/interp.py,sha256=
|
|
126
|
-
omdev/scripts/pyproject.py,sha256=
|
|
125
|
+
omdev/scripts/interp.py,sha256=gaU6ovs3UWX6LxBFKGwca8L2eILzsUwJSpRe5gyHuxc,73533
|
|
126
|
+
omdev/scripts/pyproject.py,sha256=Op7SM0GT4ghfHRG9OxpLlR7nV6ewNyBrW5wuG_F5at0,174849
|
|
127
127
|
omdev/scripts/slowcat.py,sha256=lssv4yrgJHiWfOiHkUut2p8E8Tq32zB-ujXESQxFFHY,2728
|
|
128
128
|
omdev/scripts/tmpexec.py,sha256=WTYcf56Tj2qjYV14AWmV8SfT0u6Y8eIU6cKgQRvEK3c,1442
|
|
129
129
|
omdev/toml/__init__.py,sha256=Y3l4WY4JRi2uLG6kgbGp93fuGfkxkKwZDvhsa0Rwgtk,15
|
|
@@ -143,9 +143,9 @@ omdev/tools/sqlrepl.py,sha256=tmFZh80-xsGM62dyQ7_UGLebChrj7IHbIPYBWDJMgVk,5741
|
|
|
143
143
|
omdev/tools/pawk/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
144
144
|
omdev/tools/pawk/__main__.py,sha256=VCqeRVnqT1RPEoIrqHFSu4PXVMg4YEgF4qCQm90-eRI,66
|
|
145
145
|
omdev/tools/pawk/pawk.py,sha256=Eckymn22GfychCQcQi96BFqRo_LmiJ-EPhC8TTUJdB4,11446
|
|
146
|
-
omdev-0.0.0.
|
|
147
|
-
omdev-0.0.0.
|
|
148
|
-
omdev-0.0.0.
|
|
149
|
-
omdev-0.0.0.
|
|
150
|
-
omdev-0.0.0.
|
|
151
|
-
omdev-0.0.0.
|
|
146
|
+
omdev-0.0.0.dev129.dist-info/LICENSE,sha256=B_hVtavaA8zCYDW99DYdcpDLKz1n3BBRjZrcbv8uG8c,1451
|
|
147
|
+
omdev-0.0.0.dev129.dist-info/METADATA,sha256=xyl0qG_qZmsBgfxhFiLdazBTSG1ry7MWzkCg6cHtKYw,1760
|
|
148
|
+
omdev-0.0.0.dev129.dist-info/WHEEL,sha256=PZUExdf71Ui_so67QXpySuHtCi3-J3wvF4ORK6k_S8U,91
|
|
149
|
+
omdev-0.0.0.dev129.dist-info/entry_points.txt,sha256=dHLXFmq5D9B8qUyhRtFqTGWGxlbx3t5ejedjrnXNYLU,33
|
|
150
|
+
omdev-0.0.0.dev129.dist-info/top_level.txt,sha256=1nr7j30fEWgLYHW3lGR9pkdHkb7knv1U1ES1XRNVQ6k,6
|
|
151
|
+
omdev-0.0.0.dev129.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|