Page 1 of 1

F9Table.lua — циклическое переключение кодировок

Posted: Tue 10 Jun, 2014 14:15
by John Doe
Обсуждаем штатный макрос F9Table.lua

Связанные темы:

Re: Улучшение макросов из поставки фара

Posted: Tue 10 Jun, 2014 22:43
by zg
John Doe wrote:Предложения?
макрос из времён, когда у всех стояло 3 кодировки: 866, 1251 и koi8. тогда он имел смысл. сейчас его нужно просто удалить.

Re: Улучшение макросов из поставки фара

Posted: Wed 11 Jun, 2014 14:11
by John Doe
zg wrote:
John Doe wrote:Предложения?
макрос из времён, когда у всех стояло 3 кодировки: 866, 1251 и koi8. тогда он имел смысл. сейчас его нужно просто удалить.
Да, времена поменялись.
Но можно предложить макрос, циклически переключающий Избранные кодировки, и пропускающий при этом весь юникод.
  1. local CodePagesMenuId = "78A4A4E3-C2F0-40BD-9AA7-EAAC11836631"
  2. Macro {
  3.   description="Use F9 to change current table in viewer and editor";
  4.   area="Viewer Editor"; key="F9";
  5.   action=function()
  6.     local AreaEditor = Area.Editor
  7.     Keys"ShiftF8"
  8.     if Menu.Id==CodePagesMenuId then
  9.       if Far.Cfg_Get("Codepages","CPMenuMode")=="false" then Keys"CtrlH" end
  10.       repeat
  11.         Keys("Down")
  12.         local CP = Menu.Value
  13.       until not AreaEditor or not (CP:find("UTF%-") or Object.Bof)
  14.       Keys"Enter"
  15.     end
  16.   end;
  17. }

Re: Улучшение макросов из поставки фара

Posted: Wed 25 Jun, 2014 11:29
by fps
Да, времена поменялись.
Но можно предложить макрос, циклически переключающий Избранные кодировки, и пропускающий при этом весь юникод.
Во вьювере переключение в юникод и обратно - совершенно рядовая ситуация.
Да и в редакторе теперь переключается.
Может было бы достаточно пропустить автоопределение?

А еще лучше бы изменить поведение F8 в редакторе/вьювере - оно рудимент "доЮникодных" времен

Re: Улучшение макросов из поставки фара

Posted: Wed 25 Jun, 2014 11:39
by John Doe
fps wrote:
Да, времена поменялись.
Но можно предложить макрос, циклически переключающий Избранные кодировки, и пропускающий при этом весь юникод.
Во вьювере переключение в юникод и обратно - совершенно рядовая ситуация.
Да и в редакторе теперь переключается.
Может было бы достаточно пропустить автоопределение?
Сомневаюсь, что это рядовая ситуация.
И при таких переключениях появляются вопросы
- о невозможности преобразования без потерь
- о необходимости перегрузить файл

С недавнего времени в юникодном редакторе тоже работает Shift-F8, этого макрос пока не учитывает.
Исправлю, будет эквивалентно нажатию ShiftF8
fps wrote:А еще лучше бы изменить поведение F8 в редакторе/вьювере - оно рудимент "доЮникодных" времен
Как именно?

Re: Улучшение макросов из поставки фара

Posted: Wed 25 Jun, 2014 11:46
by fps
Циклически переключать избранные кодировки, выводя в кейбар подпись кнопке F8 id кодировки, на которую произойдет переключение.

Сейчас поведение то же, но ограничено лишь двумя кодировками, что на сегодня явный рудимент.
При редактировании юникодного файла (коих теперь большинство), нажатие F8 переключает кодировку в ANSI,
но дальнейшие нажатия F8 обратно в юникод ее не вернут. Нелогично.

Re: Улучшение макросов из поставки фара

Posted: Wed 25 Jun, 2014 12:05
by John Doe
fps wrote:При редактировании юникодного файла (коих теперь большинство), нажатие F8 переключает кодировку в ANSI,
но дальнейшие нажатия F8 обратно в юникод ее не вернут. Нелогично.
и так не только для юникода.
Кнопка F8 рудимент, но и как вы сами видите по поводу циклического переключения всё недостаточно однозначно, чтобы заменить действие F8.

Re: Улучшение макросов из поставки фара

Posted: Wed 25 Jun, 2014 13:10
by fps
А из макроса возможно менять подпись кнопки в KeyBar?

Re: Улучшение макросов из поставки фара

Posted: Wed 25 Jun, 2014 13:33
by John Doe
В документации есть.
На форуме есть пример: http://forum.farmanager.com/viewtopic.p ... 94#p115594, но он специфический, возможно у вас всё проще.

Re: F9Table.lua — циклическое переключение кодировок

Posted: Wed 25 Jun, 2014 14:43
by John Doe
  1. Macro {
  2.   description="Cycle through all codepages";
  3.   area="Viewer"; key="F9";
  4.   action=function()
  5.     Keys("ShiftF8","Down")
  6.     Keys(Object.Bof and "Down","Enter") -- skip Automatic detection
  7.   end;
  8. }
  9.  
  10. local multibyte = {[1200]=true;[1201]=true}
  11. Macro {
  12.   description="Cycle through System and Favorites codepages";
  13.   area="Editor"; key="F9";
  14.   action=function()
  15.     Keys"ShiftF8"
  16.     local CP = editor.GetInfo().CodePage
  17.     if multibyte[CP] then return end -- exclude 1200/1201
  18.     if not Far.GetConfig"Codepages.CPMenuMode" then Keys"CtrlH"; end
  19.     repeat
  20.       Keys"Down"
  21.     until not (Menu.Value:find"UTF%-" or Object.Bof) -- skip Unicode and Automatic detection
  22.     Keys"Enter"
  23.   end;
  24. }

F9Table.lua — циклическое переключение кодировок

Posted: Tue 04 Sep, 2018 10:33
by John Doe
fps wrote:
Wed 25 Jun, 2014 11:29
Во вьювере переключение в юникод и обратно - совершенно рядовая ситуация.
Да и в редакторе теперь переключается.
Может было бы достаточно пропустить автоопределение?
Универсальный макрос получился монструозным:

А штатный из Addons/Macros предлагаю заменить таким набором:

Code: Select all

Macro { description="Autodetect code page";
  area="Editor Viewer"; key="ShiftF9";
  flags="NoSendKeysToPlugins";
  action=function()
    Keys"ShiftF8 Home Enter"
  end;
}

Macro {
  description="Cycle through all codepages";
  area="Viewer"; key="F9";
  flags="NoSendKeysToPlugins";
  action=function()
    Keys"ShiftF8 Down"
    if Object.Bof then Keys"Down" end -- skip Automatic detection
    Keys"Enter"
  end;
}

Macro {
  description="Cycle through codepages (excl. Unicode)";
  area="Editor"; key="F9";
  flags="NoSendKeysToPlugins";
  action=function()
    Keys"ShiftF8"
    repeat
      Keys"Down"
      -- skip "Automatic detection" and Unicode CPs
      if not (Object.Bof or Menu.Value:find"UTF%-") then
        Keys"Enter"
      end
    until Menu.Id~=far.Guids.CodePagesMenuId
  end;
}
  • F9 во вьювере переключается циклично, исключая только Automatic detection.
  • F9 в редакторе исключает также все UTF-кодировки, чтобы избежать ряда запросов о перекодировании.
    (Кому это кажется лишним - из кода очень просто убрать, и удостовериться)
  • Shift+F9 новый макрос для попытки автоопределения кодировки