From fce0f7652152f24fd3bb03e366c3b9e09a9ed217 Mon Sep 17 00:00:00 2001 From: akruphi <92621645+akruphi@users.noreply.github.com> Date: Sun, 11 Jun 2023 12:39:13 +0300 Subject: [PATCH] Viewer & Editor F8: ANSI/OEM/UTF8 Add UTF8 to F8 in Viewer & Editor Add in Help about ANSI/OEM from ~/.config/far2l/cp or LC_CTYPE --- far2l/bootstrap/scripts/FarEng.hlf.m4 | 12 ++- far2l/bootstrap/scripts/FarHun.hlf.m4 | 10 +- far2l/bootstrap/scripts/FarRus.hlf.m4 | 12 ++- far2l/bootstrap/scripts/FarUkr.hlf.m4 | 44 ++++---- far2l/bootstrap/scripts/farlang.templ.m4 | 131 ++++++++++++++--------- far2l/src/fileedit.cpp | 15 ++- far2l/src/viewer.cpp | 15 ++- 7 files changed, 158 insertions(+), 81 deletions(-) diff --git a/far2l/bootstrap/scripts/FarEng.hlf.m4 b/far2l/bootstrap/scripts/FarEng.hlf.m4 index 6d9a7e496..46aac9f1a 100644 --- a/far2l/bootstrap/scripts/FarEng.hlf.m4 +++ b/far2l/bootstrap/scripts/FarEng.hlf.m4 @@ -2567,7 +2567,7 @@ $ #Viewer: control keys# #F7# ~Search~@ViewerSearch@ #Shift-F7, Space# Continue search #Alt-F7# Continue search in "reverse" mode - #F8# Toggle OEM/ANSI code page + #F8# Toggle ~ANSI/OEM~@CodePagesSet@/UTF8 code page #Shift-F8# Select code page #Alt-F8# ~Change current position~@ViewerGotoPos@ #Alt-F9# Toggles the size of the FAR2L console window @@ -2763,7 +2763,7 @@ behavior can be changed in the ~Editor settings~@EditorSettings@ dialog. #Ctrl-F7# ~Replace~@EditorSearch@ #Shift-F7# Continue search/replace #Alt-F7# Continue search/replace in "reverse" mode - #F8# Toggle OEM/ANSI code page + #F8# Toggle ~ANSI/OEM~@CodePagesSet@/UTF8 code page #Shift-F8# Select code page #Alt-F8# ~Go to~@EditorGotoPos@ specified line and column #Alt-F9# Toggles the size of the FAR2L console window @@ -2932,7 +2932,7 @@ $ #Code pages menu# #Automatic detection# - Far tries to autodetect the codepage of the text; - #System# - main 8-bit system codepages - ANSI and OEM; + #System# - main 8-bit system codepages - ~ANSI and OEM~@CodePagesSet@; #Unicode# - Unicode codepages; @@ -2950,6 +2950,12 @@ codepage back. Клавиша #F4# позволяет изменять отоб Диалог ~Изменение имени кодовой страницы~@EditCodePageNameDlg@ +@CodePagesSet +$ #ANSI and OEM codepage setting + Switchable by #F8# and #Shift-F8# OEM and ANSI code pages are defined based on the file + #~~/.config/far2l/cp# (firts line is #OEM#, second is #ANSI#) + or, if its absence, by environment variable #LC_CTYPE# + @EditCodePageNameDlg $ #Изменение имени кодовой страницы# Диалог #Изменение имени кодовой страницы# позволяет изменить отображаемое имя для diff --git a/far2l/bootstrap/scripts/FarHun.hlf.m4 b/far2l/bootstrap/scripts/FarHun.hlf.m4 index f04b1c0d9..171f0c036 100644 --- a/far2l/bootstrap/scripts/FarHun.hlf.m4 +++ b/far2l/bootstrap/scripts/FarHun.hlf.m4 @@ -2277,7 +2277,7 @@ segítségével) #F7# ~Keresés~@ViewerSearch@ #Shift-F7, Szóköz# Tovább keres #Alt-F7# Tovább keres, de visszafelé - #F8# OEM/ANSI kódlap váltó + #F8# ~ANSI/OEM~@CodePagesSet@/UTF8 kódlap váltó #Shift-F8# Kódlap kiválasztása #Alt-F8# ~Ugrás~@ViewerGotoPos@ a jelenlegi szövegpozícióból másik pozícióba @@ -2489,7 +2489,7 @@ kurzorpozícióba (csak maradó blokk módban) #Ctrl-F7# ~Keresés és csere~@EditorSearch@ #Shift-F7# Keresés és csere folytatása #Alt-F7# Keresés és csere folytatása, visszafelé - #F8# OEM/ANSI kódlap váltó + #F8# ~ANSI/OEM~@CodePagesSet@/UTF8 kódlap váltó #Shift-F8# Kódlap kiválasztása #Alt-F8# ~Ugrás~@EditorGotoPos@ megadott sorra és oszlopra #Alt-F9# A FAR konzolablak méretének átváltása @@ -2653,6 +2653,12 @@ megnyitott példány aktuális állapota írja felül és a külső program ált végrehajtott összes módosítás elvész. +@CodePagesSet +$ #ANSI and OEM codepage setting + Switchable by #F8# and #Shift-F8# OEM and ANSI code pages are defined based on the file + #~~/.config/far2l/cp# (firts line is #OEM#, second is #ANSI#) + or, if its absence, by environment variable #LC_CTYPE# + @DriveDlg $ #Meghajtóváltás (Meghajtók menü)# A Meghajtók menüben másik meghajtót választhatunk a panelhez, diff --git a/far2l/bootstrap/scripts/FarRus.hlf.m4 b/far2l/bootstrap/scripts/FarRus.hlf.m4 index 4b3e4b246..3c841957d 100644 --- a/far2l/bootstrap/scripts/FarRus.hlf.m4 +++ b/far2l/bootstrap/scripts/FarRus.hlf.m4 @@ -2601,7 +2601,7 @@ $ #Программа просмотра: клавиши управления# #F7# ~Поиск~@ViewerSearch@ #Shift-F7, Space# Продолжить поиск #Alt-F7# Продолжить поиск в обратном направлении - #F8# Переключение OEM/ANSI кодовой страницы + #F8# Переключение ~ANSI/OEM~@CodePagesSet@/UTF8 кодовой страницы #Shift-F8# Выбор кодовой страницы #Alt-F8# ~Изменить текущую позицию~@ViewerGotoPos@ #Alt-F9# Изменение размеров окна FAR2L @@ -2803,7 +2803,7 @@ $ #Редактор# #Ctrl-F7# ~Замена~@EditorSearch@ #Shift-F7# Продолжить поиск/замену #Alt-F7# Продолжить поиск/замену в обратном направлении - #F8# Переключение OEM/ANSI кодовой страницы + #F8# Переключение ~ANSI/OEM~@CodePagesSet@/UTF8 кодовой страницы #Shift-F8# Выбор кодовой страницы #Alt-F8# ~Перейти~@EditorGotoPos@ на указанную строку и позицию #Alt-F9# Изменение размеров окна FAR2L @@ -2976,7 +2976,7 @@ $ #Меню выбора кодовой страницы# #Автоматическое определение# - определение правильной кодовой страницы; - #Системные# - основные однобайтные системные кодовые страницы - ANSI и OEM; + #Системные# - основные однобайтные системные кодовые страницы - ~ANSI и OEM~@CodePagesSet@; #Юникод# - юникодные кодовые страницы; @@ -2995,6 +2995,12 @@ $ #Меню выбора кодовой страницы# Диалог ~Изменение имени кодовой страницы~@EditCodePageNameDlg@ +@CodePagesSet +$ #Определение кодировок ANSI и OEM + Переключаемые по #F8# и #Shift-F8# OEM и ANSI кодовые страницы определяются на основе файла + #~~/.config/far2l/cp# (первая строка - #OEM#, вторая - #ANSI#) + или, при его отсутствии, по переменной среды #LC_CTYPE# + @EditCodePageNameDlg $ #Изменение имени кодовой страницы# Диалог #Изменение имени кодовой страницы# позволяет изменить отображаемое имя для diff --git a/far2l/bootstrap/scripts/FarUkr.hlf.m4 b/far2l/bootstrap/scripts/FarUkr.hlf.m4 index 3ea43b391..9d5525fa9 100644 --- a/far2l/bootstrap/scripts/FarUkr.hlf.m4 +++ b/far2l/bootstrap/scripts/FarUkr.hlf.m4 @@ -2596,19 +2596,19 @@ $ #Програма перегляду: клавіші керування# #F5# Переключити сирий/оброблений режим #Alt-F5# Друк файлу (використовується плагін "Print Manager". -#F6# Перейти в ~редактор~@Editor@ -#F7# ~Пошук~@ViewerSearch@ + #F6# Перейти в ~редактор~@Editor@ + #F7# ~Пошук~@ViewerSearch@ #Shift-F7, Space# Продовжити пошук #Alt-F7# Продовжити пошук у зворотному напрямку - #F8# Перемикання OEM/ANSI кодової сторінки + #F8# Перемикання ~ANSI/OEM~@CodePagesSet@/UTF8 кодової сторінки #Shift-F8# Вибір кодової сторінки -#Alt-F8# ~Змінити поточну позицію~@ViewerGotoPos@ + #Alt-F8# ~Змінити поточну позицію~@ViewerGotoPos@ #Alt-F9# Зміна розмірів вікна FAR2L -#F9,Alt-Shift-F9# Виклик діалогу ~налаштування програми перегляду~@ViewerSettings@ + #F9,Alt-Shift-F9# Виклик діалогу ~налаштування програми перегляду~@ViewerSettings@ #NumPad5,F3,F10,Esc# Вихід #Ctrl-F10# Позиціонувати на поточний файл без виходу. -#F11# Викликати меню "~Команди зовнішніх модулів~@Plugins@" -#Alt-F11# Показати ~історію перегляду~@HistoryViews@ + #F11# Викликати меню "~Команди зовнішніх модулів~@Plugins@" + #Alt-F11# Показати ~історію перегляду~@HistoryViews@ #+# Перейти до наступного файлу #-# Перейти до попереднього файлу #Ctrl-O# Показати екран користувача @@ -2637,7 +2637,7 @@ $ #Програма перегляду: клавіші керування# почати вводити призначений для пошуку текст. 2. Файл відкривається у програмі перегляду з дозволом на -видалення його стороннім процесом. Якщо станеться таке + видалення його стороннім процесом. Якщо станеться таке видалення, то реально файл буде видалений з каталогу тільки після закриття програми перегляду, при цьому він не буде доступний для обробки з будь-якого процесу - ця властивість @@ -2791,27 +2791,27 @@ $ #Редактор# #F1# Допомога #F2# Зберегти файл -#Shift-F2# ~Зберегти файл як ...~@FileSaveAs@ -#Shift-F4# Редагувати ~новий файл~@FileOpenCreate@ + #Shift-F2# ~Зберегти файл як ...~@FileSaveAs@ + #Shift-F4# Редагувати ~новий файл~@FileOpenCreate@ #F5# Toggle whitespace characters displaying #Shift-F5# Change Tab character width #Ctrl-F5# Toggle Tab-to-spaces expansion #Alt-F5# ^Друк файлу/виділеного блоку (використовується плагін "Print Manager"). -#F6# Перейти до ~програми перегляду~@Viewer@ -#F7# ~Пошук~@EditorSearch@ -#Ctrl-F7# ~Заміна~@EditorSearch@ + #F6# Перейти до ~програми перегляду~@Viewer@ + #F7# ~Пошук~@EditorSearch@ + #Ctrl-F7# ~Заміна~@EditorSearch@ #Shift-F7# Продовжити пошук/заміну #Alt-F7# Продовжити пошук/заміну у зворотному напрямку - #F8# Перемикання OEM/ANSI кодової сторінки + #F8# Перемикання ~ANSI/OEM~@CodePagesSet@/UTF8 кодової сторінки #Shift-F8# Вибір кодової сторінки -#Alt-F8# ~Перейти~@EditorGotoPos@ на вказаний рядок та позицію + #Alt-F8# ~Перейти~@EditorGotoPos@ на вказаний рядок та позицію #Alt-F9# Зміна розмірів вікна FAR2L -#F9,Alt-Shift-F9# Виклик діалогу ~налаштувань редактора~@EditorSettings@ + #F9,Alt-Shift-F9# Виклик діалогу ~налаштувань редактора~@EditorSettings@ #F10, F4, Esc# Вихід #Shift-F10# Збереження та вихід #Ctrl-F10# ^Позиціонувати на поточний файл без виходу. -#F11# Викликати меню "~Команди зовнішніх модулів~@Plugins@" -#Alt-F11# Показати ~історію редагування~@HistoryViews@ + #F11# Викликати меню "~Команди зовнішніх модулів~@Plugins@" + #Alt-F11# Показати ~історію редагування~@HistoryViews@ #Alt-BS, Ctrl-Z# Скасування дії (Undo) #Ctrl-Shift-Z# Повторення дії (Redo) #Ctrl-L# ^Заборонити модифікацію тексту, що редагується @@ -2975,7 +2975,7 @@ $ #Меню вибору кодової сторінки# # Автоматичне визначення - визначення правильної кодової сторінки; - #Системні# - основні однобайтні системні кодові сторінки - ANSI та OEM; + #Системні# - основні однобайтні системні кодові сторінки - ~ANSI та OEM~@CodePagesSet@; # Юнікод # - Юнікодні кодові сторінки; @@ -2994,6 +2994,12 @@ $ #Меню вибору кодової сторінки# Діалог ~Зміна імені кодової сторінки~@EditCodePageNameDlg@ +@CodePagesSet +$ #ANSI and OEM codepage setting + Switchable by #F8# and #Shift-F8# OEM and ANSI code pages are defined based on the file + #~~/.config/far2l/cp# (firts line is #OEM#, second is #ANSI#) + or, if its absence, by environment variable #LC_CTYPE# + @EditCodePageNameDlg $ #Зміна імені кодової сторінки# Діалог #Зміна імені кодової сторінки# дозволяє змінити ім'я, що відображається для diff --git a/far2l/bootstrap/scripts/farlang.templ.m4 b/far2l/bootstrap/scripts/farlang.templ.m4 index 7a98b19d5..c63db49e3 100644 --- a/far2l/bootstrap/scripts/farlang.templ.m4 +++ b/far2l/bootstrap/scripts/farlang.templ.m4 @@ -6120,15 +6120,15 @@ EditF7 "Пошук" EditF8 -"ANSI" -"ANSI" -"ANSI" -"ANSI" -"ANSI" +"->ANSI" +"->ANSI" +"->ANSI" +"->ANSI" +"->ANSI" "Latin 2" -"ANSI" -"ANSI" -"ANSI" +"->ANSI" +"->ANSI" +"->ANSI" EditF9 "Конфиг" @@ -6199,15 +6199,27 @@ upd:"Spaces" EditF8DOS le:// don't count this - it's a F8 another text -"OEM" -"OEM" -"OEM" -"OEM" -"OEM" +"->OEM" +"->OEM" +"->OEM" +"->OEM" +"->OEM" "CP-1250" -"OEM" -"OEM" -"OEM" +"->OEM" +"->OEM" +"->OEM" + +EditF8UTF8 +le:// don't count this - it's a F8 another text +"->UTF8" +"->UTF8" +"->UTF8" +"->UTF8" +"->UTF8" +"->UTF8" +"->UTF8" +"->UTF8" +"->UTF8" ViewF5Processed le:// don't count this - it's a F5 another text @@ -7252,15 +7264,15 @@ SingleEditF7 "Пошук" SingleEditF8 -"ANSI" -"ANSI" -"ANSI" -"ANSI" -"ANSI" +"->ANSI" +"->ANSI" +"->ANSI" +"->ANSI" +"->ANSI" "Latin 2" -"ANSI" -"ANSI" -"ANSI" +"->ANSI" +"->ANSI" +"->ANSI" SingleEditF9 "" @@ -7308,15 +7320,27 @@ SingleEditF12 SingleEditF8DOS le:// don't count this - it's a F8 another text -"OEM" -"OEM" -"OEM" -"OEM" -"OEM" +"->OEM" +"->OEM" +"->OEM" +"->OEM" +"->OEM" "CP 1250" -"OEM" -"OEM" -"OEM" +"->OEM" +"->OEM" +"->OEM" + +SingleEditF8UTF8 +le:// don't count this - it's a F8 another text +"->UTF8" +"->UTF8" +"->UTF8" +"->UTF8" +"->UTF8" +"->UTF8" +"->UTF8" +"->UTF8" +"->UTF8" SingleEditShiftF1 l: @@ -9217,15 +9241,15 @@ ViewF7 "Пошук" ViewF8 -"ANSI" -"ANSI" -"ANSI" -"ANSI" -"ANSI" +"->ANSI" +"->ANSI" +"->ANSI" +"->ANSI" +"->ANSI" "Latin 2" -"ANSI" -"ANSI" -"ANSI" +"->ANSI" +"->ANSI" +"->ANSI" ViewF9 "Конфиг" @@ -9295,15 +9319,26 @@ l:// this is another text for F4 "Тэкст" ViewF8DOS -"OEM" -"OEM" -"OEM" -"OEM" -"OEM" +"->OEM" +"->OEM" +"->OEM" +"->OEM" +"->OEM" "CP 1250" -"OEM" -"OEM" -"OEM" +"->OEM" +"->OEM" +"->OEM" + +ViewF8UTF8 +"->UTF8" +"->UTF8" +"->UTF8" +"->UTF8" +"->UTF8" +"->UTF8" +"->UTF8" +"->UTF8" +"->UTF8" ViewShiftF1 l: diff --git a/far2l/src/fileedit.cpp b/far2l/src/fileedit.cpp index 47a6d3fca..9ab3cf430 100644 --- a/far2l/src/fileedit.cpp +++ b/far2l/src/fileedit.cpp @@ -1170,7 +1170,13 @@ int FileEditor::ReProcessKey(int Key, int CalledFromControl) case KEY_SHIFTF8: { UINT codepage; if (Key == KEY_F8) { - codepage = (m_codepage == WINPORT(GetACP)() ? WINPORT(GetOEMCP)() : WINPORT(GetACP)()); + //codepage = (m_codepage == WINPORT(GetACP)() ? WINPORT(GetOEMCP)() : WINPORT(GetACP)()); + if (m_codepage == CP_UTF8) + codepage = WINPORT(GetACP)(); + else if (m_codepage == WINPORT(GetACP)() ) + codepage = WINPORT(GetOEMCP)(); + else // if (m_codepage == WINPORT(GetOEMCP)() ) + codepage = CP_UTF8; } else { codepage = SelectCodePage(m_codepage, false, true, false, true); if (codepage == CP_AUTODETECT) { @@ -1196,6 +1202,7 @@ int FileEditor::ReProcessKey(int Key, int CalledFromControl) } else { SetCodePage(codepage); } + Show(); // need to force redraw after F8 UTF8<->ANSI/OEM ChangeEditKeyBar(); } else Message(0, 1, Msg::EditTitle, L"Save file before changing this codepage", Msg::HOk, @@ -2078,10 +2085,12 @@ void FileEditor::SetTitle(const wchar_t *Title) void FileEditor::SetEditKeyBarStatefulLabels() { - if (m_codepage != WINPORT(GetOEMCP)()) + if (m_codepage == CP_UTF8) + EditKeyBar.Change(KBL_MAIN, (Opt.OnlyEditorViewerUsed ? Msg::SingleEditF8 : Msg::EditF8), 7); + else if (m_codepage == WINPORT(GetACP)()) EditKeyBar.Change(KBL_MAIN, (Opt.OnlyEditorViewerUsed ? Msg::SingleEditF8DOS : Msg::EditF8DOS), 7); else - EditKeyBar.Change(KBL_MAIN, (Opt.OnlyEditorViewerUsed ? Msg::SingleEditF8 : Msg::EditF8), 7); + EditKeyBar.Change(KBL_MAIN, (Opt.OnlyEditorViewerUsed ? Msg::SingleEditF8UTF8 : Msg::EditF8UTF8), 7); EditKeyBar.Change(KBL_MAIN, m_editor->GetShowWhiteSpace() ? Msg::EditF5Hide : Msg::EditF5, 4); diff --git a/far2l/src/viewer.cpp b/far2l/src/viewer.cpp index bca00648f..2dc100392 100644 --- a/far2l/src/viewer.cpp +++ b/far2l/src/viewer.cpp @@ -1402,7 +1402,14 @@ int Viewer::ProcessKey(int Key) break; } - VM.CodePage = VM.CodePage == WINPORT(GetOEMCP)() ? WINPORT(GetACP)() : WINPORT(GetOEMCP)(); + //VM.CodePage = VM.CodePage == WINPORT(GetOEMCP)() ? WINPORT(GetACP)() : WINPORT(GetOEMCP)(); + if (VM.CodePage == CP_UTF8) + VM.CodePage = WINPORT(GetACP)(); + else if (VM.CodePage == WINPORT(GetACP)() ) + VM.CodePage = WINPORT(GetOEMCP)(); + else // if (VM.CodePage == WINPORT(GetOEMCP)() ) + VM.CodePage = VM.Hex ? WINPORT(GetACP)() : CP_UTF8; // STUB - для hex UTF8/UTF32 сейчас не работает + ChangeViewKeyBar(); Show(); // LastSelPos=FilePos; @@ -2176,10 +2183,12 @@ void Viewer::ChangeViewKeyBar() else ViewKeyBar->Change(Msg::ViewF4, 3); - if (VM.CodePage != WINPORT(GetOEMCP)()) + if (VM.CodePage == CP_UTF8) + ViewKeyBar->Change(Msg::ViewF8, 7); + else if (VM.CodePage == WINPORT(GetACP)()) ViewKeyBar->Change(Msg::ViewF8DOS, 7); else - ViewKeyBar->Change(Msg::ViewF8, 7); + ViewKeyBar->Change(VM.Hex ? Msg::ViewF8 : Msg::ViewF8UTF8, 7); // STUB - для hex UTF8/UTF32 сейчас не работает if (VM.Processed) ViewKeyBar->Change(Msg::ViewF5Raw, 4);