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

Здесь обсуждается всё, что касается макросов.
Post Reply
User avatar
John Doe
Бюрократ
Posts: 12192
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 31 times
Been thanked: 159 times

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

Post by John Doe » Tue 10 Jun, 2014 14:15

Обсуждаем штатный макрос F9Table.lua

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

User avatar
zg
zero-gravity
Posts: 5540
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 85 times
Contact:

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

Post by zg » Tue 10 Jun, 2014 22:43

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

User avatar
John Doe
Бюрократ
Posts: 12192
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 31 times
Been thanked: 159 times

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

Post by John Doe » Wed 11 Jun, 2014 14:11

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. }

fps
Posts: 204
Joined: Wed 20 Apr, 2005 06:39
Has thanked: 15 times
Been thanked: 4 times

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

Post by fps » Wed 25 Jun, 2014 11:29

Да, времена поменялись.
Но можно предложить макрос, циклически переключающий Избранные кодировки, и пропускающий при этом весь юникод.
Во вьювере переключение в юникод и обратно - совершенно рядовая ситуация.
Да и в редакторе теперь переключается.
Может было бы достаточно пропустить автоопределение?

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

User avatar
John Doe
Бюрократ
Posts: 12192
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 31 times
Been thanked: 159 times

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

Post by John Doe » Wed 25 Jun, 2014 11:39

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

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

fps
Posts: 204
Joined: Wed 20 Apr, 2005 06:39
Has thanked: 15 times
Been thanked: 4 times

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

Post by fps » Wed 25 Jun, 2014 11:46

Циклически переключать избранные кодировки, выводя в кейбар подпись кнопке F8 id кодировки, на которую произойдет переключение.

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

User avatar
John Doe
Бюрократ
Posts: 12192
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 31 times
Been thanked: 159 times

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

Post by John Doe » Wed 25 Jun, 2014 12:05

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

fps
Posts: 204
Joined: Wed 20 Apr, 2005 06:39
Has thanked: 15 times
Been thanked: 4 times

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

Post by fps » Wed 25 Jun, 2014 13:10

А из макроса возможно менять подпись кнопки в KeyBar?

User avatar
John Doe
Бюрократ
Posts: 12192
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 31 times
Been thanked: 159 times

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

Post by John Doe » Wed 25 Jun, 2014 13:33

В документации есть.
На форуме есть пример: http://forum.farmanager.com/viewtopic.p ... 94#p115594, но он специфический, возможно у вас всё проще.

User avatar
John Doe
Бюрократ
Posts: 12192
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 31 times
Been thanked: 159 times

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

Post by John Doe » Wed 25 Jun, 2014 14:43

  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. }

User avatar
John Doe
Бюрократ
Posts: 12192
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 31 times
Been thanked: 159 times

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

Post by John Doe » Tue 04 Sep, 2018 10:33

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 новый макрос для попытки автоопределения кодировки

Post Reply

Return to “Обсуждение макросов”