|
4 | 4 | import os |
5 | 5 | import os.path |
6 | 6 | import shlex |
| 7 | +import shutil |
7 | 8 | import signal |
8 | 9 | import stat |
9 | 10 | import subprocess |
|
24 | 25 | from mitmproxy.addons import eventstore |
25 | 26 | from mitmproxy.addons import readfile |
26 | 27 | from mitmproxy.addons import view |
27 | | -from mitmproxy.tools.console import common |
28 | 28 | from mitmproxy.tools.console import consoleaddons |
29 | 29 | from mitmproxy.tools.console import defaultkeys |
30 | 30 | from mitmproxy.tools.console import keymap |
@@ -116,13 +116,26 @@ def uistopped(self): |
116 | 116 | self.loop.screen_size = None |
117 | 117 | self.loop.draw_screen() |
118 | 118 |
|
| 119 | + def get_editor(self) -> str: |
| 120 | + # based upon https://github.com/pallets/click/blob/main/src/click/_termui_impl.py |
| 121 | + if m := os.environ.get("MITMPROXY_EDITOR"): |
| 122 | + return m |
| 123 | + if m := os.environ.get("EDITOR"): |
| 124 | + return m |
| 125 | + for editor in "sensible-editor", "nano", "vim": |
| 126 | + if shutil.which(editor): |
| 127 | + return editor |
| 128 | + if os.name == "nt": |
| 129 | + return "notepad" |
| 130 | + else: |
| 131 | + return "vi" |
| 132 | + |
119 | 133 | def spawn_editor(self, data): |
120 | 134 | text = not isinstance(data, bytes) |
121 | | - fd, name = tempfile.mkstemp('', "mproxy", text=text) |
| 135 | + fd, name = tempfile.mkstemp('', "mitmproxy", text=text) |
122 | 136 | with open(fd, "w" if text else "wb") as f: |
123 | 137 | f.write(data) |
124 | | - # if no EDITOR is set, assume 'vi' |
125 | | - c = os.environ.get("MITMPROXY_EDITOR") or os.environ.get("EDITOR") or "vi" |
| 138 | + c = self.get_editor() |
126 | 139 | cmd = shlex.split(c) |
127 | 140 | cmd.append(name) |
128 | 141 | with self.uistopped(): |
@@ -203,7 +216,7 @@ def run(self): |
203 | 216 | ["console_palette", "console_palette_transparent"] |
204 | 217 | ) |
205 | 218 | loop = asyncio.get_event_loop() |
206 | | - if common.IS_WINDOWS: |
| 219 | + if isinstance(loop, getattr(asyncio, "ProactorEventLoop", tuple())): |
207 | 220 | # fix for https://bugs.python.org/issue37373 |
208 | 221 | loop = AddThreadSelectorEventLoop(loop) |
209 | 222 | self.loop = urwid.MainLoop( |
|
0 commit comments