diff options
| author | Ron Yorston <rmy@pobox.com> | 2023-02-19 10:05:18 +0000 |
|---|---|---|
| committer | Ron Yorston <rmy@pobox.com> | 2023-02-19 10:05:18 +0000 |
| commit | eefae06bd0dc1e10c166155afab4b115439bc802 (patch) | |
| tree | 49cc27d9b0f3b73d0b6a4626a81d661752f4bdd5 | |
| parent | 11ad814fa34287f297671297bd89bf93bcb2ee7b (diff) | |
| download | busybox-w32-eefae06bd0dc1e10c166155afab4b115439bc802.tar.gz busybox-w32-eefae06bd0dc1e10c166155afab4b115439bc802.tar.bz2 busybox-w32-eefae06bd0dc1e10c166155afab4b115439bc802.zip | |
win32: work around problem with ConEmu
When running the busybox-w32 shell in ConEmu, if:
- ANSI emulation is disabled (which it will be, by default)
- a non-builtin command is run
there is a window of a few seconds after the command completes during
which ConEmu is in XTerm mode. During this time any attempt to use
the arrows keys will result in [A[B[C[D appearing. This appears to
be a common problem:
https://github.com/Maximus5/ConEmu/issues/2316
Try to detect if we're running under ConEmu and alter the default
behaviour to prefer ANSI emulation. The user can override this
preference by setting BB_SKIP_ANSI_EMULATION if desired.
By a quirk of fate, old MSYS2 programs (from 2021) which required
a workaround in busybox-w32 (commit 54d2ea4b4) are immune to the
problem with ConEmu.
(GitHib issue #287)
| -rw-r--r-- | win32/winansi.c | 4 |
1 files changed, 3 insertions, 1 deletions
diff --git a/win32/winansi.c b/win32/winansi.c index 27559e3f5..1400ea3bb 100644 --- a/win32/winansi.c +++ b/win32/winansi.c | |||
| @@ -77,7 +77,9 @@ int skip_ansi_emulation(int reset) | |||
| 77 | 77 | ||
| 78 | if (skip < 0 || reset) { | 78 | if (skip < 0 || reset) { |
| 79 | const char *var = getenv(BB_SKIP_ANSI_EMULATION); | 79 | const char *var = getenv(BB_SKIP_ANSI_EMULATION); |
| 80 | int dflt = is_wine() ? 0 : CONFIG_SKIP_ANSI_EMULATION_DEFAULT; | 80 | int dflt = CONFIG_SKIP_ANSI_EMULATION_DEFAULT; |
| 81 | if (is_wine() || getenv("CONEMUPID") != NULL) | ||
| 82 | dflt = 0; | ||
| 81 | skip = var == NULL ? dflt : atoi(var); | 83 | skip = var == NULL ? dflt : atoi(var); |
| 82 | if (skip < 0 || skip > 2) | 84 | if (skip < 0 || skip > 2) |
| 83 | skip = 0; | 85 | skip = 0; |
