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

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

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

Post by John Doe »

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

Связанные темы:
User avatar
zg
zero-gravity
Posts: 6035
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 185 times
Contact:

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

Post by zg »

John Doe wrote:Предложения?
макрос из времён, когда у всех стояло 3 кодировки: 866, 1251 и koi8. тогда он имел смысл. сейчас его нужно просто удалить.
User avatar
John Doe
Бюрократ
Posts: 13851
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 428 times
Contact:

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

Post by John Doe »

zg wrote:
John Doe wrote:Предложения?
макрос из времён, когда у всех стояло 3 кодировки: 866, 1251 и koi8. тогда он имел смысл. сейчас его нужно просто удалить.
Да, времена поменялись.
Но можно предложить макрос, циклически переключающий Избранные кодировки, и пропускающий при этом весь юникод.
  1. local CodePagesMenuId = "78A4A4E3-C2F0-40BD-9AA7-EAAC11836631"
  2.  
  3. Macro {
  4.  
  5.   description="Use F9 to change current table in viewer and editor";
  6.  
  7.   area="Viewer Editor"; key="F9";
  8.  
  9.   action=function()
  10.  
  11.     local AreaEditor = Area.Editor
  12.  
  13.     Keys"ShiftF8"
  14.  
  15.     if Menu.Id==CodePagesMenuId then
  16.  
  17.       if Far.Cfg_Get("Codepages","CPMenuMode")=="false" then Keys"CtrlH" end
  18.  
  19.       repeat
  20.  
  21.         Keys("Down")
  22.  
  23.         local CP = Menu.Value
  24.  
  25.       until not AreaEditor or not (CP:find("UTF%-") or Object.Bof)
  26.  
  27.       Keys"Enter"
  28.  
  29.     end
  30.  
  31.   end;
  32.  
  33. }
fps
Posts: 267
Joined: Wed 20 Apr, 2005 06:39
Has thanked: 27 times
Been thanked: 14 times

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

Post by fps »

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

А еще лучше бы изменить поведение F8 в редакторе/вьювере - оно рудимент "доЮникодных" времен
User avatar
John Doe
Бюрократ
Posts: 13851
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 428 times
Contact:

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

Post by John Doe »

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

С недавнего времени в юникодном редакторе тоже работает Shift-F8, этого макрос пока не учитывает.
Исправлю, будет эквивалентно нажатию ShiftF8
fps wrote:А еще лучше бы изменить поведение F8 в редакторе/вьювере - оно рудимент "доЮникодных" времен
Как именно?
fps
Posts: 267
Joined: Wed 20 Apr, 2005 06:39
Has thanked: 27 times
Been thanked: 14 times

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

Post by fps »

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

Сейчас поведение то же, но ограничено лишь двумя кодировками, что на сегодня явный рудимент.
При редактировании юникодного файла (коих теперь большинство), нажатие F8 переключает кодировку в ANSI,
но дальнейшие нажатия F8 обратно в юникод ее не вернут. Нелогично.
User avatar
John Doe
Бюрократ
Posts: 13851
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 428 times
Contact:

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

Post by John Doe »

fps wrote:При редактировании юникодного файла (коих теперь большинство), нажатие F8 переключает кодировку в ANSI,
но дальнейшие нажатия F8 обратно в юникод ее не вернут. Нелогично.
и так не только для юникода.
Кнопка F8 рудимент, но и как вы сами видите по поводу циклического переключения всё недостаточно однозначно, чтобы заменить действие F8.
fps
Posts: 267
Joined: Wed 20 Apr, 2005 06:39
Has thanked: 27 times
Been thanked: 14 times

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

Post by fps »

А из макроса возможно менять подпись кнопки в KeyBar?
User avatar
John Doe
Бюрократ
Posts: 13851
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 428 times
Contact:

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

Post by John Doe »

В документации есть.
На форуме есть пример: http://forum.farmanager.com/viewtopic.p ... 94#p115594, но он специфический, возможно у вас всё проще.
User avatar
John Doe
Бюрократ
Posts: 13851
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 428 times
Contact:

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

Post by John Doe »

  1. Macro {
  2.  
  3.   description="Cycle through all codepages";
  4.  
  5.   area="Viewer"; key="F9";
  6.  
  7.   action=function()
  8.  
  9.     Keys("ShiftF8","Down")
  10.  
  11.     Keys(Object.Bof and "Down","Enter") -- skip Automatic detection
  12.  
  13.   end;
  14.  
  15. }
  16.  
  17.  
  18.  
  19. local multibyte = {[1200]=true;[1201]=true}
  20.  
  21. Macro {
  22.  
  23.   description="Cycle through System and Favorites codepages";
  24.  
  25.   area="Editor"; key="F9";
  26.  
  27.   action=function()
  28.  
  29.     Keys"ShiftF8"
  30.  
  31.     local CP = editor.GetInfo().CodePage
  32.  
  33.     if multibyte[CP] then return end -- exclude 1200/1201
  34.  
  35.     if not Far.GetConfig"Codepages.CPMenuMode" then Keys"CtrlH"; end
  36.  
  37.     repeat
  38.  
  39.       Keys"Down"
  40.  
  41.     until not (Menu.Value:find"UTF%-" or Object.Bof) -- skip Unicode and Automatic detection
  42.  
  43.     Keys"Enter"
  44.  
  45.   end;
  46.  
  47. }
User avatar
John Doe
Бюрократ
Posts: 13851
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 428 times
Contact:

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

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

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