Работающий макрос XLat-трансформации выделения/ слова перед/под курсором

Здесь обсуждается всё, что касается макросов.
Post Reply
User avatar
LanKing
Posts: 180
Joined: Thu 31 Aug, 2006 20:39
Been thanked: 2 times

Работающий макрос XLat-трансформации выделения/ слова перед/под курсором

Post by LanKing »

Конвертирует выделение или слово перед курсором используя XLAT
В отличии от стандартного макроса, идущего в поставке FAR, корректно работает с позицией строки, если макрос выполняется посреди слова
Макрос для FAR3, запускается по Shift + BackSpace
  1. --------------------------------------------------------------------------------------
  2.  
  3. -- Конвертирует выделение или слово перед курсором используя XLAT
  4.  
  5. -- В отличии от стандартного макроса, идущего в поставке FAR,
  6.  
  7. -- корректно работает с позицией строки, если макрос выполняется посреди слова
  8.  
  9. -- (c) 2014, LanKing
  10.  
  11. --------------------------------------------------------------------------------------
  12.  
  13. Macro {
  14.  
  15.   area="Shell Info QView Tree Dialog Editor"; key="ShiftBS"; description="Converts selected area or word before cursor using XLat function";
  16.  
  17.   condition = function()
  18.  
  19.     if (Area.Current == 'Shell' or Area.Current == 'Info' or Area.Current == 'QView' or Area.Current == 'Tree') and (panel.GetCmdLine():len()==0) then
  20.  
  21.         return false;  
  22.  
  23.     end;
  24.  
  25.  
  26.  
  27.     return true;
  28.  
  29.   end;
  30.  
  31.  
  32.  
  33.   action = function()
  34.  
  35.  
  36.  
  37.     if (Object.Selected) then
  38.  
  39.       Keys('XLat')
  40.  
  41.     else
  42.  
  43.       if (Area.Current == 'Editor') then
  44.  
  45.         local pos = Editor.Pos(0,2);
  46.  
  47.         Keys('CtrlShiftLeft XLat CtrlRight');
  48.  
  49.         Editor.Pos(1,2,pos);
  50.  
  51.       elseif (Area.Current == 'Shell' or Area.Current == 'Info' or Area.Current == 'QView' or Area.Current == 'Tree') then
  52.  
  53.         local pos=panel.GetCmdLinePos()
  54.  
  55.         Keys('CtrlShiftLeft XLat CtrlRight');
  56.  
  57.         panel.SetCmdLinePos(nil,pos)
  58.  
  59.         --for i=1,pos do Keys("Right") end;
  60.  
  61.       else
  62.  
  63.         local pos=Object.CurPos;
  64.  
  65.         Keys('CtrlShiftLeft XLat Home');
  66.  
  67.         for i=1,pos-1 do Keys("Right") end;
  68.  
  69.       end;
  70.  
  71.     end;
  72.  
  73.   end;
  74.  
  75. }
P.S. Возможно, использовал немного извращенные но работоспособные решения.
Attachments
Core.XLAT_ShiftBS.rar
(753 Bytes) Downloaded 119 times
Shmuel
Posts: 6834
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 530 times

Работающий (исправление стандартного) макрос XLAT трансформации (транслит и обратно) выделения\ слова перед курсором

Post by Shmuel »

LanKing wrote: В отличии от стандартной функции, идущей в поставке FAR, корректно работает с позицией строки, если макрос выполняется посреди слова
Вы утверждаете, что стандартная функция работает некорректно?
User avatar
LanKing
Posts: 180
Joined: Thu 31 Aug, 2006 20:39
Been thanked: 2 times

Работающий (исправление стандартного) макрос XLAT трансформации (транслит и обратно) выделения/ слова перед курсором

Post by LanKing »

Если речь именно о ф-ции -- я опечатался, имел ввиду стандартный макрос, идущий в папке аддонов.
Попробуйте поставить курсор посередине слова и использовать его.
Думаю, всё понятно из последовательности в макросе: CtrlShiftLeft XLat CtrlRight
User avatar
Skirda
Posts: 3475
Joined: Wed 16 Mar, 2005 11:01
Been thanked: 8 times

Работающий (исправление стандартного) макрос XLAT трансформации (транслит и обратно) выделения/ слова перед курсором

Post by Skirda »

Чему равен "XLat.WordDivForXlat"? (far:config Ctrl-Alt-F xlat)
Если пуст или отсутствует, то см. addons\XLat\Russian\Qwerty.farconfig
Это к тому, что слово "xlat" в ком.строке (при отсутствии выделения) само вычисляет слово по курсором (разделителем слов как раз является "XLat.WordDivForXlat").
We are the Borg. You will be assimilated.
So Say We All!
User avatar
John Doe
Бюрократ
Posts: 13851
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 428 times
Contact:

Работающий (исправление стандартного) макрос XLAT трансформации (транслит и обратно) выделения/ слова перед курсором

Post by John Doe »

Skirda wrote: что слово "xlat" в ком.строке (при отсутствии выделения) само вычисляет слово по курсором
Дело не в этом.
Топикстартер выше (не очень внятно) объясняет, что штатный макрос (Addons\Macros\ShiftBS.lua) работает неудовлетворительно, будучи запущен из середины слова. А именно: преобразует только часть слова, и при этом в результате курсор оказывается в конце, а не в исходной позиции.

Кроме того, если при вызове макроса уже есть выделение, то штатный макрос его не учитывает.

LanKing, уберите "транслит" из заголовка темы.
User avatar
John Doe
Бюрократ
Posts: 13851
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 428 times
Contact:

Работающий (исправление стандартного) макрос XLAT трансформации (транслит и обратно) выделения/ слова перед курсором

Post by John Doe »

Кстати да, я согласен, что штатный макрос бестолковый.
В описании сказано "Converts the word before cursor", но совершенно непонятно для чего вообще конвертировать именно перед курсором.
Мне кажется надо его радикально упростить:

Code: Select all

Macro { description="Converts selection (or last word) using XLat function";
  area="Dialog Editor Shell QView Tree Info";
  key="ShiftBS"; --клавишу возможно стоит поменять
  condition = function() return Area.Dialog or Area.Editor or not CmdLine.Empty end;
  action = function()
    Keys"XLat"
  end;
}
Прекрасно работает и с последним словом, и с выделением, имхо.

Edit: А в папке Addons\XLat\Russian присутствуют макросы ровно того же назначения.
Что-то одно надо удалить.
User avatar
Skirda
Posts: 3475
Joined: Wed 16 Mar, 2005 11:01
Been thanked: 8 times

Работающий (исправление стандартного) макрос XLAT трансформации (транслит и обратно) выделения/ слова перед курсором

Post by Skirda »

Изначально Shift-BS предполагался в качестве вот такого сценария:
Набираю "Ghbdtn" (курсор после n, т.е. в конце слова), далее Shift-BS - результат.
По мере ввода.
We are the Borg. You will be assimilated.
So Say We All!
User avatar
John Doe
Бюрократ
Posts: 13851
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 428 times
Contact:

Работающий макрос XLat-трансформации выделения/ слова перед/под курсором

Post by John Doe »

Skirda wrote: Изначально Shift-BS предполагался в качестве вот такого сценария:
Чем вас в этом сценарии не устраивает просто Keys"XLat"?

У меня так назначено уже 10 лет, всё работает как надо. Именно в этом сценарии.
User avatar
John Doe
Бюрократ
Posts: 13851
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 428 times
Contact:

Работающий макрос XLat-трансформации выделения/ слова перед/под курсором

Post by John Doe »

Развитие предыдущего макроса
  • Ограничена работа в диалогах: действует только в полях ввода, и в листбоксах.
  • Работает во всех списках и меню (при активном фильтре).
  • Работает в области Search
Post Reply

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