diff --git a/WinPort/src/Backend/Backend.h b/WinPort/src/Backend/Backend.h index bd1357a4e..706af0652 100644 --- a/WinPort/src/Backend/Backend.h +++ b/WinPort/src/Backend/Backend.h @@ -8,13 +8,15 @@ /// Something changed in code below. /// "WinCompat.h" changed in a way affecting code below. /// Behavior of backend's code changed in incompatible way. -#define FAR2L_BACKEND_ABI_VERSION 0x09 +#define FAR2L_BACKEND_ABI_VERSION 0x0A #define NODETECT_NONE 0x0000 #define NODETECT_XI 0x0001 #define NODETECT_X 0x0002 #define NODETECT_F 0x0004 - +#define NODETECT_W 0x0008 +#define NODETECT_A 0x0010 +#define NODETECT_K 0x0020 class IConsoleOutputBackend { diff --git a/WinPort/src/Backend/TTY/TTYBackend.cpp b/WinPort/src/Backend/TTY/TTYBackend.cpp index bd8dacc7a..5c6bdd055 100644 --- a/WinPort/src/Backend/TTY/TTYBackend.cpp +++ b/WinPort/src/Backend/TTY/TTYBackend.cpp @@ -398,7 +398,7 @@ void TTYBackend::WriterThread() { bool gone_background = false; try { - TTYOutput tty_out(_stdout, _far2l_tty, _norgb); + TTYOutput tty_out(_stdout, _far2l_tty, _norgb, _nodetect); DispatchPalette(tty_out); // DispatchTermResized(tty_out); while (!_exiting && !_deadio) { diff --git a/WinPort/src/Backend/TTY/TTYOutput.cpp b/WinPort/src/Backend/TTY/TTYOutput.cpp index 2537ca487..4ea0b0e7b 100644 --- a/WinPort/src/Backend/TTY/TTYOutput.cpp +++ b/WinPort/src/Backend/TTY/TTYOutput.cpp @@ -19,6 +19,7 @@ #include "FarTTY.h" #include "WideMB.h" #include "WinPort.h" +#include "Backend.h" #include "../WinPortRGB.h" #define ESC "\x1b" @@ -153,9 +154,9 @@ void TTYOutput::WriteUpdatedAttributes(DWORD64 attr, bool is_space) /////////////////////// -TTYOutput::TTYOutput(int out, bool far2l_tty, bool norgb) +TTYOutput::TTYOutput(int out, bool far2l_tty, bool norgb, DWORD nodetect) : - _out(out), _far2l_tty(far2l_tty), _norgb(norgb), _kernel_tty(false) + _out(out), _far2l_tty(far2l_tty), _norgb(norgb), _kernel_tty(false), _nodetect(nodetect) { const char *env = getenv("TERM"); _screen_tty = (env && strncmp(env, "screen", 6) == 0); // TERM=screen.xterm-256color @@ -174,9 +175,16 @@ TTYOutput::TTYOutput(int out, bool far2l_tty, bool norgb) #endif Format(ESC "7" ESC "[?47h" ESC "[?1049h" ESC "[?2004h"); - Format(ESC "[?9001h"); // win32-input-mode on - Format(ESC "[?1337h"); // iTerm2 input mode on - Format(ESC "[=15;1u"); // kovidgoyal's kitty mode on + + if ((_nodetect & NODETECT_W) == 0) { + Format(ESC "[?9001h"); // win32-input-mode on + } + if ((_nodetect & NODETECT_A) == 0) { + Format(ESC "[?1337h"); // iTerm2 input mode on + } + if ((_nodetect & NODETECT_K) == 0) { + Format(ESC "[=15;1u"); // kovidgoyal's kitty mode on + } ChangeKeypad(true); ChangeMouse(true); @@ -204,10 +212,16 @@ TTYOutput::~TTYOutput() if (!_kernel_tty) { Format(ESC "[0 q"); } - Format(ESC "[=0;1u" "\r"); // kovidgoyal's kitty mode off + if ((_nodetect & NODETECT_K) == 0) { + Format(ESC "[=0;1u" "\r"); // kovidgoyal's kitty mode off + } Format(ESC "[0m" ESC "[?1049l" ESC "[?47l" ESC "8" ESC "[?2004l" "\r\n"); - Format(ESC "[?9001l"); // win32-input-mode off - Format(ESC "[?1337l"); // iTerm2 input mode off + if ((_nodetect & NODETECT_W) == 0) { + Format(ESC "[?9001l"); // win32-input-mode off + } + if ((_nodetect & NODETECT_A) == 0) { + Format(ESC "[?1337l"); // iTerm2 input mode off + } TTYBasePalette def_palette; ChangePalette(def_palette); Flush(); diff --git a/WinPort/src/Backend/TTY/TTYOutput.h b/WinPort/src/Backend/TTY/TTYOutput.h index 31329dd53..60473bbd7 100644 --- a/WinPort/src/Backend/TTY/TTYOutput.h +++ b/WinPort/src/Backend/TTY/TTYOutput.h @@ -39,6 +39,7 @@ class TTYOutput int _out; bool _far2l_tty, _norgb, _kernel_tty, _screen_tty, _wezterm; + DWORD _nodetect; TTYBasePalette _palette; bool _prev_attr_valid{false}; DWORD64 _prev_attr{}; @@ -54,7 +55,7 @@ class TTYOutput void WriteUpdatedAttributes(DWORD64 new_attr, bool is_space); public: - TTYOutput(int out, bool far2l_tty, bool norgb); + TTYOutput(int out, bool far2l_tty, bool norgb, DWORD nodetect); ~TTYOutput(); void Flush(); diff --git a/WinPort/src/Backend/WinPortMain.cpp b/WinPort/src/Backend/WinPortMain.cpp index fb16cda1d..860a89660 100644 --- a/WinPort/src/Backend/WinPortMain.cpp +++ b/WinPort/src/Backend/WinPortMain.cpp @@ -238,7 +238,7 @@ extern "C" void WinPortHelp() printf("FAR2L backend-specific options:\n"); printf("\t--tty - force using TTY backend only (disable GUI/TTY autodetection)\n"); printf("\t--notty - don't fallback to TTY backend if GUI backend failed\n"); - printf("\t--nodetect or --nodetect=[f|][x|xi] - don't detect if TTY backend supports FAR2L or X11/Xi extensions\n"); + printf("\t--nodetect or --nodetect=[x|xi][f][w][a][k] - don't detect if TTY backend supports X11/Xi input and clipboard interaction extensions and/or disable detect f=FAR2l terminal extensions, w=win32, a=apple iTerm2, k=kovidgoyal's kitty input modes\n"); printf("\t--norgb - don't use true (24-bit) colors\n"); printf("\t--mortal - terminate instead of going to background on getting SIGHUP (default if in Linux TTY)\n"); printf("\t--immortal - go to background instead of terminating on getting SIGHUP (default if not in Linux TTY)\n"); @@ -290,7 +290,7 @@ struct ArgOptions norgb = true; } else if (strcmp(a, "--nodetect") == 0) { - nodetect = NODETECT_F | NODETECT_X; + nodetect = NODETECT_F | NODETECT_X | NODETECT_A | NODETECT_K | NODETECT_W; } else if (strstr(a, "--nodetect=") == a) { if(strstr(a+11,"xi")) { @@ -301,6 +301,15 @@ struct ArgOptions if(strchr(a+11,'f')) { nodetect |= NODETECT_F; } + if(strchr(a+11,'a')) { + nodetect |= NODETECT_A; + } + if(strchr(a+11,'k')) { + nodetect |= NODETECT_K; + } + if(strchr(a+11,'w')) { + nodetect |= NODETECT_W; + } } else if (strstr(a, "--clipboard=") == a) { ext_clipboard = a + 12; diff --git a/man/far2l.1 b/man/far2l.1 index 14617759d..1208e1e23 100644 --- a/man/far2l.1 +++ b/man/far2l.1 @@ -1,6 +1,6 @@ .\" -*- mode: troff; coding: UTF-8 -*- .\"TOPICS "Topics:" -.TH FAR2L 1 "28-04-24" "FAR2L Version 2.6.1" "Linux fork of FAR Manager v2" +.TH FAR2L 1 "31-07-24" "FAR2L Version 2.6.3" "Linux fork of FAR Manager v2" .\"SKIP_SECTION" .SH "NAME" far2l \- Oldschool file manager, with built\-in terminal and other usefulness\'es. @@ -78,8 +78,8 @@ don't fallback to TTY backend if GUI backend failed \fB\-\-norgb\fP don't use true (24-bit) colors .TP -\fB\-\-nodetect\fP, \fB\-\-nodetect\fP=[f|][x|xi] -don't detect if TTY backend supports FAR2L or X11/Xi extensions +\fB\-\-nodetect\fP, \fB\-\-nodetect\fP=[x|xi][f][w][a][k] +don't detect if TTY backend supports X11/Xi input and clipboard interaction extensions and/or disable detect f=FAR2l terminal extensions, w=win32, a=apple iTerm2, k=kovidgoyal's kitty input modes .TP \fB\-\-mortal\fP terminate instead of going to background on getting SIGHUP (default if in Linux TTY) diff --git a/man/ru/far2l.1 b/man/ru/far2l.1 index 4a5df32bc..bdf1728c7 100644 --- a/man/ru/far2l.1 +++ b/man/ru/far2l.1 @@ -1,6 +1,6 @@ .\" -*- mode: troff; coding: UTF-8 -*- .\"TOPICS "Topics:" -.TH FAR2L 1 "28-04-24" "FAR2L Version 2.6.1" "Linux fork of FAR Manager v2" +.TH FAR2L 1 "31-07-24" "FAR2L Version 2.6.3" "Linux fork of FAR Manager v2" .\"SKIP_SECTION" .SH "НАИМЕНОВАНИЕ" far2l \- Файловый менеджер, работающая в текстовом режиме программа, со встроенным терминалом и другими полезными функциями. @@ -77,9 +77,10 @@ \fB\-\-norgb\fP Не использовать полноцветную (24-битную) палитру цветов .TP -\fB\-\-nodetect\fP, \fB\-\-nodetect\fP=[f|][x|xi] -По умолчанию far2l пытается на запуске определить, не работает ли он в терминале другого far2l. В этом случае far2l автоматически использует режим TTY с расширениями терминала far2l. В случае отсутствия таких расширений терминала, far2l проверяет наличие доступа к X11 сессии или Xi расширении и использует их для улучшения возможностей интерфейса, если был собрать с опцией TTYX. -Данный ключ выключает всю перечисленную функциональность, предотвращая авто определение наличия расширений и разрешает к использованию лишь базовые возможности обычного терминала в TTY режиме. +\fB\-\-nodetect\fP, \fB\-\-nodetect\fP=[x|xi][f][w][a][k] +По умолчанию far2l пытается на запуске определить, не работает ли он в терминале другого far2l. В этом случае far2l автоматически использует режим TTY с расширениями терминала far2l (f). В случае отсутствия таких расширений терминала, far2l проверяет наличие доступа к X11 сессии или Xi расширению и использует их для улучшения возможностей интерфейса, если был собран с опцией TTYX. +Кроме того, по умолчанию используются и доступны для отключения w=win32, a=apple iTerm2, k=kovidgoyal's kitty input modes. +Данный ключ выключает всю или перечисленную функциональность, предотвращая авто определение наличия расширений и разрешает к использованию лишь базовые возможности обычного терминала в TTY режиме. .TP \fB\-\-mortal\fP Завершить работу вместо перехода в фоновый режим при получении сигнала SIGHUP (по умолчанию, если в Linux TTY).