omdev 0.0.0.dev127__tar.gz → 0.0.0.dev129__tar.gz

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.

Files changed (157) hide show
  1. {omdev-0.0.0.dev127/omdev.egg-info → omdev-0.0.0.dev129}/PKG-INFO +2 -2
  2. {omdev-0.0.0.dev127 → omdev-0.0.0.dev129}/omdev/pycharm/cli.py +60 -17
  3. {omdev-0.0.0.dev127 → omdev-0.0.0.dev129}/omdev/scripts/interp.py +24 -0
  4. {omdev-0.0.0.dev127 → omdev-0.0.0.dev129}/omdev/scripts/pyproject.py +24 -0
  5. {omdev-0.0.0.dev127 → omdev-0.0.0.dev129/omdev.egg-info}/PKG-INFO +2 -2
  6. {omdev-0.0.0.dev127 → omdev-0.0.0.dev129}/omdev.egg-info/requires.txt +1 -1
  7. {omdev-0.0.0.dev127 → omdev-0.0.0.dev129}/pyproject.toml +2 -2
  8. {omdev-0.0.0.dev127 → omdev-0.0.0.dev129}/LICENSE +0 -0
  9. {omdev-0.0.0.dev127 → omdev-0.0.0.dev129}/MANIFEST.in +0 -0
  10. {omdev-0.0.0.dev127 → omdev-0.0.0.dev129}/README.rst +0 -0
  11. {omdev-0.0.0.dev127 → omdev-0.0.0.dev129}/omdev/.manifests.json +0 -0
  12. {omdev-0.0.0.dev127 → omdev-0.0.0.dev129}/omdev/__about__.py +0 -0
  13. {omdev-0.0.0.dev127 → omdev-0.0.0.dev129}/omdev/__init__.py +0 -0
  14. {omdev-0.0.0.dev127 → omdev-0.0.0.dev129}/omdev/amalg/__init__.py +0 -0
  15. {omdev-0.0.0.dev127 → omdev-0.0.0.dev129}/omdev/amalg/__main__.py +0 -0
  16. {omdev-0.0.0.dev127 → omdev-0.0.0.dev129}/omdev/amalg/amalg.py +0 -0
  17. {omdev-0.0.0.dev127 → omdev-0.0.0.dev129}/omdev/antlr/__init__.py +0 -0
  18. {omdev-0.0.0.dev127 → omdev-0.0.0.dev129}/omdev/antlr/consts.py +0 -0
  19. {omdev-0.0.0.dev127 → omdev-0.0.0.dev129}/omdev/antlr/gen.py +0 -0
  20. {omdev-0.0.0.dev127 → omdev-0.0.0.dev129}/omdev/bracepy.py +0 -0
  21. {omdev-0.0.0.dev127 → omdev-0.0.0.dev129}/omdev/cache/__init__.py +0 -0
  22. {omdev-0.0.0.dev127 → omdev-0.0.0.dev129}/omdev/cache/compute/__init__.py +0 -0
  23. {omdev-0.0.0.dev127 → omdev-0.0.0.dev129}/omdev/cache/compute/cache.py +0 -0
  24. {omdev-0.0.0.dev127 → omdev-0.0.0.dev129}/omdev/cache/compute/contexts.py +0 -0
  25. {omdev-0.0.0.dev127 → omdev-0.0.0.dev129}/omdev/cache/compute/currents.py +0 -0
  26. {omdev-0.0.0.dev127 → omdev-0.0.0.dev129}/omdev/cache/compute/fns.py +0 -0
  27. {omdev-0.0.0.dev127 → omdev-0.0.0.dev129}/omdev/cache/compute/resolvers.py +0 -0
  28. {omdev-0.0.0.dev127 → omdev-0.0.0.dev129}/omdev/cache/compute/storage.py +0 -0
  29. {omdev-0.0.0.dev127 → omdev-0.0.0.dev129}/omdev/cache/compute/types.py +0 -0
  30. {omdev-0.0.0.dev127 → omdev-0.0.0.dev129}/omdev/cache/data/__init__.py +0 -0
  31. {omdev-0.0.0.dev127 → omdev-0.0.0.dev129}/omdev/cache/data/actions.py +0 -0
  32. {omdev-0.0.0.dev127 → omdev-0.0.0.dev129}/omdev/cache/data/cache.py +0 -0
  33. {omdev-0.0.0.dev127 → omdev-0.0.0.dev129}/omdev/cache/data/consts.py +0 -0
  34. {omdev-0.0.0.dev127 → omdev-0.0.0.dev129}/omdev/cache/data/defaults.py +0 -0
  35. {omdev-0.0.0.dev127 → omdev-0.0.0.dev129}/omdev/cache/data/manifests.py +0 -0
  36. {omdev-0.0.0.dev127 → omdev-0.0.0.dev129}/omdev/cache/data/specs.py +0 -0
  37. {omdev-0.0.0.dev127 → omdev-0.0.0.dev129}/omdev/cexts/__init__.py +0 -0
  38. {omdev-0.0.0.dev127 → omdev-0.0.0.dev129}/omdev/cexts/_boilerplate.cc +0 -0
  39. {omdev-0.0.0.dev127 → omdev-0.0.0.dev129}/omdev/cexts/_distutils/LICENSE +0 -0
  40. {omdev-0.0.0.dev127 → omdev-0.0.0.dev129}/omdev/cexts/_distutils/__init__.py +0 -0
  41. {omdev-0.0.0.dev127 → omdev-0.0.0.dev129}/omdev/cexts/_distutils/build_ext.py +0 -0
  42. {omdev-0.0.0.dev127 → omdev-0.0.0.dev129}/omdev/cexts/_distutils/compilers/__init__.py +0 -0
  43. {omdev-0.0.0.dev127 → omdev-0.0.0.dev129}/omdev/cexts/_distutils/compilers/ccompiler.py +0 -0
  44. {omdev-0.0.0.dev127 → omdev-0.0.0.dev129}/omdev/cexts/_distutils/compilers/options.py +0 -0
  45. {omdev-0.0.0.dev127 → omdev-0.0.0.dev129}/omdev/cexts/_distutils/compilers/unixccompiler.py +0 -0
  46. {omdev-0.0.0.dev127 → omdev-0.0.0.dev129}/omdev/cexts/_distutils/dir_util.py +0 -0
  47. {omdev-0.0.0.dev127 → omdev-0.0.0.dev129}/omdev/cexts/_distutils/errors.py +0 -0
  48. {omdev-0.0.0.dev127 → omdev-0.0.0.dev129}/omdev/cexts/_distutils/extension.py +0 -0
  49. {omdev-0.0.0.dev127 → omdev-0.0.0.dev129}/omdev/cexts/_distutils/file_util.py +0 -0
  50. {omdev-0.0.0.dev127 → omdev-0.0.0.dev129}/omdev/cexts/_distutils/modified.py +0 -0
  51. {omdev-0.0.0.dev127 → omdev-0.0.0.dev129}/omdev/cexts/_distutils/spawn.py +0 -0
  52. {omdev-0.0.0.dev127 → omdev-0.0.0.dev129}/omdev/cexts/_distutils/sysconfig.py +0 -0
  53. {omdev-0.0.0.dev127 → omdev-0.0.0.dev129}/omdev/cexts/_distutils/util.py +0 -0
  54. {omdev-0.0.0.dev127 → omdev-0.0.0.dev129}/omdev/cexts/_distutils/version.py +0 -0
  55. {omdev-0.0.0.dev127 → omdev-0.0.0.dev129}/omdev/cexts/build.py +0 -0
  56. {omdev-0.0.0.dev127 → omdev-0.0.0.dev129}/omdev/cexts/cmake.py +0 -0
  57. {omdev-0.0.0.dev127 → omdev-0.0.0.dev129}/omdev/cexts/importhook.py +0 -0
  58. {omdev-0.0.0.dev127 → omdev-0.0.0.dev129}/omdev/cexts/magic.py +0 -0
  59. {omdev-0.0.0.dev127 → omdev-0.0.0.dev129}/omdev/cexts/scan.py +0 -0
  60. {omdev-0.0.0.dev127 → omdev-0.0.0.dev129}/omdev/classdot.py +0 -0
  61. {omdev-0.0.0.dev127 → omdev-0.0.0.dev129}/omdev/cli/__init__.py +0 -0
  62. {omdev-0.0.0.dev127 → omdev-0.0.0.dev129}/omdev/cli/__main__.py +0 -0
  63. {omdev-0.0.0.dev127 → omdev-0.0.0.dev129}/omdev/cli/_pathhack.py +0 -0
  64. {omdev-0.0.0.dev127 → omdev-0.0.0.dev129}/omdev/cli/clicli.py +0 -0
  65. {omdev-0.0.0.dev127 → omdev-0.0.0.dev129}/omdev/cli/install.py +0 -0
  66. {omdev-0.0.0.dev127 → omdev-0.0.0.dev129}/omdev/cli/main.py +0 -0
  67. {omdev-0.0.0.dev127 → omdev-0.0.0.dev129}/omdev/cli/managers.py +0 -0
  68. {omdev-0.0.0.dev127 → omdev-0.0.0.dev129}/omdev/cli/types.py +0 -0
  69. {omdev-0.0.0.dev127 → omdev-0.0.0.dev129}/omdev/clipboard/__init__.py +0 -0
  70. {omdev-0.0.0.dev127 → omdev-0.0.0.dev129}/omdev/clipboard/clipboard.py +0 -0
  71. {omdev-0.0.0.dev127 → omdev-0.0.0.dev129}/omdev/clipboard/darwin_cf.py +0 -0
  72. {omdev-0.0.0.dev127 → omdev-0.0.0.dev129}/omdev/clipboard/linux_x.py +0 -0
  73. {omdev-0.0.0.dev127 → omdev-0.0.0.dev129}/omdev/cmake.py +0 -0
  74. {omdev-0.0.0.dev127 → omdev-0.0.0.dev129}/omdev/findimports.py +0 -0
  75. {omdev-0.0.0.dev127 → omdev-0.0.0.dev129}/omdev/git.py +0 -0
  76. {omdev-0.0.0.dev127 → omdev-0.0.0.dev129}/omdev/imgur.py +0 -0
  77. {omdev-0.0.0.dev127 → omdev-0.0.0.dev129}/omdev/interp/__init__.py +0 -0
  78. {omdev-0.0.0.dev127 → omdev-0.0.0.dev129}/omdev/interp/__main__.py +0 -0
  79. {omdev-0.0.0.dev127 → omdev-0.0.0.dev129}/omdev/interp/cli.py +0 -0
  80. {omdev-0.0.0.dev127 → omdev-0.0.0.dev129}/omdev/interp/inspect.py +0 -0
  81. {omdev-0.0.0.dev127 → omdev-0.0.0.dev129}/omdev/interp/providers.py +0 -0
  82. {omdev-0.0.0.dev127 → omdev-0.0.0.dev129}/omdev/interp/pyenv.py +0 -0
  83. {omdev-0.0.0.dev127 → omdev-0.0.0.dev129}/omdev/interp/resolvers.py +0 -0
  84. {omdev-0.0.0.dev127 → omdev-0.0.0.dev129}/omdev/interp/standalone.py +0 -0
  85. {omdev-0.0.0.dev127 → omdev-0.0.0.dev129}/omdev/interp/system.py +0 -0
  86. {omdev-0.0.0.dev127 → omdev-0.0.0.dev129}/omdev/interp/types.py +0 -0
  87. {omdev-0.0.0.dev127 → omdev-0.0.0.dev129}/omdev/magic/__init__.py +0 -0
  88. {omdev-0.0.0.dev127 → omdev-0.0.0.dev129}/omdev/magic/find.py +0 -0
  89. {omdev-0.0.0.dev127 → omdev-0.0.0.dev129}/omdev/magic/magic.py +0 -0
  90. {omdev-0.0.0.dev127 → omdev-0.0.0.dev129}/omdev/magic/prepare.py +0 -0
  91. {omdev-0.0.0.dev127 → omdev-0.0.0.dev129}/omdev/magic/styles.py +0 -0
  92. {omdev-0.0.0.dev127 → omdev-0.0.0.dev129}/omdev/manifests/__init__.py +0 -0
  93. {omdev-0.0.0.dev127 → omdev-0.0.0.dev129}/omdev/manifests/build.py +0 -0
  94. {omdev-0.0.0.dev127 → omdev-0.0.0.dev129}/omdev/manifests/load.py +0 -0
  95. {omdev-0.0.0.dev127 → omdev-0.0.0.dev129}/omdev/manifests/types.py +0 -0
  96. {omdev-0.0.0.dev127 → omdev-0.0.0.dev129}/omdev/mypy/__init__.py +0 -0
  97. {omdev-0.0.0.dev127 → omdev-0.0.0.dev129}/omdev/mypy/debug.py +0 -0
  98. {omdev-0.0.0.dev127 → omdev-0.0.0.dev129}/omdev/packaging/__init__.py +0 -0
  99. {omdev-0.0.0.dev127 → omdev-0.0.0.dev129}/omdev/packaging/marshal.py +0 -0
  100. {omdev-0.0.0.dev127 → omdev-0.0.0.dev129}/omdev/packaging/names.py +0 -0
  101. {omdev-0.0.0.dev127 → omdev-0.0.0.dev129}/omdev/packaging/requires.py +0 -0
  102. {omdev-0.0.0.dev127 → omdev-0.0.0.dev129}/omdev/packaging/specifiers.py +0 -0
  103. {omdev-0.0.0.dev127 → omdev-0.0.0.dev129}/omdev/packaging/versions.py +0 -0
  104. {omdev-0.0.0.dev127 → omdev-0.0.0.dev129}/omdev/pip.py +0 -0
  105. {omdev-0.0.0.dev127 → omdev-0.0.0.dev129}/omdev/precheck/__init__.py +0 -0
  106. {omdev-0.0.0.dev127 → omdev-0.0.0.dev129}/omdev/precheck/__main__.py +0 -0
  107. {omdev-0.0.0.dev127 → omdev-0.0.0.dev129}/omdev/precheck/base.py +0 -0
  108. {omdev-0.0.0.dev127 → omdev-0.0.0.dev129}/omdev/precheck/git.py +0 -0
  109. {omdev-0.0.0.dev127 → omdev-0.0.0.dev129}/omdev/precheck/lite.py +0 -0
  110. {omdev-0.0.0.dev127 → omdev-0.0.0.dev129}/omdev/precheck/main.py +0 -0
  111. {omdev-0.0.0.dev127 → omdev-0.0.0.dev129}/omdev/precheck/manifests.py +0 -0
  112. {omdev-0.0.0.dev127 → omdev-0.0.0.dev129}/omdev/precheck/scripts.py +0 -0
  113. {omdev-0.0.0.dev127 → omdev-0.0.0.dev129}/omdev/ptk/__init__.py +0 -0
  114. {omdev-0.0.0.dev127 → omdev-0.0.0.dev129}/omdev/ptk/apps/__init__.py +0 -0
  115. {omdev-0.0.0.dev127 → omdev-0.0.0.dev129}/omdev/ptk/apps/ncdu.py +0 -0
  116. {omdev-0.0.0.dev127 → omdev-0.0.0.dev129}/omdev/pycharm/__init__.py +0 -0
  117. {omdev-0.0.0.dev127 → omdev-0.0.0.dev129}/omdev/pycharm/__main__.py +0 -0
  118. {omdev-0.0.0.dev127 → omdev-0.0.0.dev129}/omdev/pyproject/__init__.py +0 -0
  119. {omdev-0.0.0.dev127 → omdev-0.0.0.dev129}/omdev/pyproject/__main__.py +0 -0
  120. {omdev-0.0.0.dev127 → omdev-0.0.0.dev129}/omdev/pyproject/cexts.py +0 -0
  121. {omdev-0.0.0.dev127 → omdev-0.0.0.dev129}/omdev/pyproject/cli.py +0 -0
  122. {omdev-0.0.0.dev127 → omdev-0.0.0.dev129}/omdev/pyproject/configs.py +0 -0
  123. {omdev-0.0.0.dev127 → omdev-0.0.0.dev129}/omdev/pyproject/pkg.py +0 -0
  124. {omdev-0.0.0.dev127 → omdev-0.0.0.dev129}/omdev/pyproject/reqs.py +0 -0
  125. {omdev-0.0.0.dev127 → omdev-0.0.0.dev129}/omdev/revisions.py +0 -0
  126. {omdev-0.0.0.dev127 → omdev-0.0.0.dev129}/omdev/scripts/__init__.py +0 -0
  127. {omdev-0.0.0.dev127 → omdev-0.0.0.dev129}/omdev/scripts/bumpversion.py +0 -0
  128. {omdev-0.0.0.dev127 → omdev-0.0.0.dev129}/omdev/scripts/execrss.py +0 -0
  129. {omdev-0.0.0.dev127 → omdev-0.0.0.dev129}/omdev/scripts/exectime.py +0 -0
  130. {omdev-0.0.0.dev127 → omdev-0.0.0.dev129}/omdev/scripts/importtrace.py +0 -0
  131. {omdev-0.0.0.dev127 → omdev-0.0.0.dev129}/omdev/scripts/slowcat.py +0 -0
  132. {omdev-0.0.0.dev127 → omdev-0.0.0.dev129}/omdev/scripts/tmpexec.py +0 -0
  133. {omdev-0.0.0.dev127 → omdev-0.0.0.dev129}/omdev/secrets.py +0 -0
  134. {omdev-0.0.0.dev127 → omdev-0.0.0.dev129}/omdev/tokens.py +0 -0
  135. {omdev-0.0.0.dev127 → omdev-0.0.0.dev129}/omdev/toml/__init__.py +0 -0
  136. {omdev-0.0.0.dev127 → omdev-0.0.0.dev129}/omdev/toml/parser.py +0 -0
  137. {omdev-0.0.0.dev127 → omdev-0.0.0.dev129}/omdev/toml/writer.py +0 -0
  138. {omdev-0.0.0.dev127 → omdev-0.0.0.dev129}/omdev/tools/__init__.py +0 -0
  139. {omdev-0.0.0.dev127 → omdev-0.0.0.dev129}/omdev/tools/doc.py +0 -0
  140. {omdev-0.0.0.dev127 → omdev-0.0.0.dev129}/omdev/tools/docker.py +0 -0
  141. {omdev-0.0.0.dev127 → omdev-0.0.0.dev129}/omdev/tools/git.py +0 -0
  142. {omdev-0.0.0.dev127 → omdev-0.0.0.dev129}/omdev/tools/importscan.py +0 -0
  143. {omdev-0.0.0.dev127 → omdev-0.0.0.dev129}/omdev/tools/mkrelimp.py +0 -0
  144. {omdev-0.0.0.dev127 → omdev-0.0.0.dev129}/omdev/tools/notebook.py +0 -0
  145. {omdev-0.0.0.dev127 → omdev-0.0.0.dev129}/omdev/tools/pawk/__init__.py +0 -0
  146. {omdev-0.0.0.dev127 → omdev-0.0.0.dev129}/omdev/tools/pawk/__main__.py +0 -0
  147. {omdev-0.0.0.dev127 → omdev-0.0.0.dev129}/omdev/tools/pawk/pawk.py +0 -0
  148. {omdev-0.0.0.dev127 → omdev-0.0.0.dev129}/omdev/tools/pip.py +0 -0
  149. {omdev-0.0.0.dev127 → omdev-0.0.0.dev129}/omdev/tools/prof.py +0 -0
  150. {omdev-0.0.0.dev127 → omdev-0.0.0.dev129}/omdev/tools/qr.py +0 -0
  151. {omdev-0.0.0.dev127 → omdev-0.0.0.dev129}/omdev/tools/sqlrepl.py +0 -0
  152. {omdev-0.0.0.dev127 → omdev-0.0.0.dev129}/omdev/wheelfile.py +0 -0
  153. {omdev-0.0.0.dev127 → omdev-0.0.0.dev129}/omdev.egg-info/SOURCES.txt +0 -0
  154. {omdev-0.0.0.dev127 → omdev-0.0.0.dev129}/omdev.egg-info/dependency_links.txt +0 -0
  155. {omdev-0.0.0.dev127 → omdev-0.0.0.dev129}/omdev.egg-info/entry_points.txt +0 -0
  156. {omdev-0.0.0.dev127 → omdev-0.0.0.dev129}/omdev.egg-info/top_level.txt +0 -0
  157. {omdev-0.0.0.dev127 → omdev-0.0.0.dev129}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: omdev
3
- Version: 0.0.0.dev127
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.dev127
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"
@@ -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
- _LINUX_OPEN_SCRIPT = """
28
- # sudo apt install xdotool wmctrl
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 -lx
31
- # 0x03000054 0 jetbrains-pycharm.jetbrains-pycharm spinlock-ws omlish - cli.py
32
- # 0x0480004c 0 jetbrains-clion.jetbrains-clion spinlock-ws cpython - ceval.c
33
- # wmctrl -i -a 0x03000054
34
-
35
- if pgrep -x "pycharm.sh" > /dev/null; then
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
- # FIXME:
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:
@@ -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
@@ -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.dev127
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.dev127
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"
@@ -1,4 +1,4 @@
1
- omlish==0.0.0.dev127
1
+ omlish==0.0.0.dev129
2
2
 
3
3
  [all]
4
4
  black~=24.10
@@ -12,7 +12,7 @@ authors = [
12
12
  urls = {source = 'https://github.com/wrmsr/omlish'}
13
13
  license = {text = 'BSD-3-Clause'}
14
14
  requires-python = '>=3.12'
15
- version = '0.0.0.dev127'
15
+ version = '0.0.0.dev129'
16
16
  classifiers = [
17
17
  'License :: OSI Approved :: BSD License',
18
18
  'Development Status :: 2 - Pre-Alpha',
@@ -22,7 +22,7 @@ classifiers = [
22
22
  ]
23
23
  description = 'omdev'
24
24
  dependencies = [
25
- 'omlish == 0.0.0.dev127',
25
+ 'omlish == 0.0.0.dev129',
26
26
  ]
27
27
 
28
28
  [project.optional-dependencies]
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes