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

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

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

Post by LanKing » Tue 16 Dec, 2014 22:56

Конвертирует выделение или слово перед курсором используя XLAT
В отличии от стандартного макроса, идущего в поставке FAR, корректно работает с позицией строки, если макрос выполняется посреди слова
Макрос для FAR3, запускается по Shift + BackSpace
  1. --------------------------------------------------------------------------------------
  2. -- Конвертирует выделение или слово перед курсором используя XLAT
  3. -- В отличии от стандартного макроса, идущего в поставке FAR,
  4. -- корректно работает с позицией строки, если макрос выполняется посреди слова
  5. -- (c) 2014, LanKing
  6. --------------------------------------------------------------------------------------
  7. Macro {
  8.   area="Shell Info QView Tree Dialog Editor"; key="ShiftBS"; description="Converts selected area or word before cursor using XLat function";
  9.   condition = function()
  10.     if (Area.Current == 'Shell' or Area.Current == 'Info' or Area.Current == 'QView' or Area.Current == 'Tree') and (panel.GetCmdLine():len()==0) then
  11.         return false;  
  12.     end;
  13.  
  14.     return true;
  15.   end;
  16.  
  17.   action = function()
  18.  
  19.     if (Object.Selected) then
  20.       Keys('XLat')
  21.     else
  22.       if (Area.Current == 'Editor') then
  23.         local pos = Editor.Pos(0,2);
  24.         Keys('CtrlShiftLeft XLat CtrlRight');
  25.         Editor.Pos(1,2,pos);
  26.       elseif (Area.Current == 'Shell' or Area.Current == 'Info' or Area.Current == 'QView' or Area.Current == 'Tree') then
  27.         local pos=panel.GetCmdLinePos()
  28.         Keys('CtrlShiftLeft XLat CtrlRight');
  29.         panel.SetCmdLinePos(nil,pos)
  30.         --for i=1,pos do Keys("Right") end;
  31.       else
  32.         local pos=Object.CurPos;
  33.         Keys('CtrlShiftLeft XLat Home');
  34.         for i=1,pos-1 do Keys("Right") end;
  35.       end;
  36.     end;
  37.   end;
  38. }
P.S. Возможно, использовал немного извращенные но работоспособные решения.
Attachments
Core.XLAT_ShiftBS.rar
(753 Bytes) Downloaded 55 times

Shmuel
Posts: 5577
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 21 times
Been thanked: 186 times

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

Post by Shmuel » Tue 16 Dec, 2014 23:05

LanKing wrote: В отличии от стандартной функции, идущей в поставке FAR, корректно работает с позицией строки, если макрос выполняется посреди слова
Вы утверждаете, что стандартная функция работает некорректно?

User avatar
LanKing
Posts: 180
Joined: Thu 31 Aug, 2006 20:39

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

Post by LanKing » Wed 17 Dec, 2014 04:31

Если речь именно о ф-ции -- я опечатался, имел ввиду стандартный макрос, идущий в папке аддонов.
Попробуйте поставить курсор посередине слова и использовать его.
Думаю, всё понятно из последовательности в макросе: CtrlShiftLeft XLat CtrlRight

User avatar
Skirda
Posts: 3474
Joined: Wed 16 Mar, 2005 11:01
Been thanked: 3 times

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

Post by Skirda » Wed 17 Dec, 2014 07:30

Чему равен "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: 11981
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 26 times
Been thanked: 136 times

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

Post by John Doe » Wed 17 Dec, 2014 07:56

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

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

LanKing, уберите "транслит" из заголовка темы.

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

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

Post by John Doe » Wed 17 Dec, 2014 08:06

Кстати да, я согласен, что штатный макрос бестолковый.
В описании сказано "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: 3474
Joined: Wed 16 Mar, 2005 11:01
Been thanked: 3 times

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

Post by Skirda » Wed 17 Dec, 2014 09:08

Изначально Shift-BS предполагался в качестве вот такого сценария:
Набираю "Ghbdtn" (курсор после n, т.е. в конце слова), далее Shift-BS - результат.
По мере ввода.
We are the Borg. You will be assimilated.
So Say We All!

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

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

Post by John Doe » Wed 17 Dec, 2014 12:53

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

У меня так назначено уже 10 лет, всё работает как надо. Именно в этом сценарии.

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

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

Post by John Doe » Sat 10 Nov, 2018 17:22

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

Post Reply

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