Макросы для „борьбы“ с автодополнением

Здесь выкладываются готовые к использованию макросы и скрипты.
User avatar
John Doe
Бюрократ
Posts: 13807
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 426 times
Contact:

Макросы для „борьбы“ с автодополнением

Post by John Doe »

Почему не устраивает штатное автодополнение:

Макросы:
  • Up, Down, Home, End, PgUp, PgDn — передаются в панели.
  • Ctrl-Up, Ctrl-Down, Ctrl-Home, Ctrl-PgUp, Ctrl-PgDn — навигация по списку дополнения.
  • Esc — закрывает список отменяя текущий вариант дополнения.
    Для того чтобы закрыть список и принять текущий вариант можно использовать Ctrl-Tab, F10 или макрос на Ctrl-Enter (см. ниже).
    Также напомню, что список автодополнения можно принудительно вызвать с помощью Ctrl-Space.
  • Ctrl-Enter — закрывает список и принимает текущий выбранные вариант дополнения, если не пустой.
    (т.е. исходная функция Ctrl-Enter доступна, если ни один из вариантов не выбран)
  • Ctrl-Space — переоткрывает список дополнения в ручном режиме.
    Может быть полезно, если какой-либо из 4х параметров Interface.Completion.Use* выставлен в Other (см. hlf:AutoCompleteSettings).
Дополнительные параметры:
  • Для тонкой настройки можно менять значения параметров, заданные в начале скрипта:
  • AutoCompletionAreas — области действия макросов, по умолчанию заданы обе (командная строка, и диалоги).
  • KeepList — восстанавливать список дополнения после передачи в панели курсорных клавиш.
  • VisiblePanelsOnly — не работать при погашенных панелях.
Attachments
AutoCompletion.lua.7z
(1.3 KiB) Downloaded 175 times
difr
Posts: 16
Joined: Sat 26 Oct, 2013 23:08
Has thanked: 2 times

Re: Макросы для „борьбы“ с автодополнением

Post by difr »

John Doe, спасибо, весьма полезные макросы.
DV
Posts: 455
Joined: Mon 07 Aug, 2006 08:23
Has thanked: 31 times
Been thanked: 15 times

Re: Макросы для „борьбы“ с автодополнением

Post by DV »

John Doe wrote:Также напомню, что список автодополнения можно принудительно вызвать с помощью Ctrl-Space.
А почему Ctrl-Space не работает, если в меню AutoComplete settings не стоит галочка Show list?
Т.е. мой вопрос/пожелание вот в чём: как сделать так, чтобы список автодополнения не показывался автоматически, а вызывался вручную по Ctrl-Space?
User avatar
John Doe
Бюрократ
Posts: 13807
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 426 times
Contact:

Re: Макросы для „борьбы“ с автодополнением

Post by John Doe »

DV wrote:А почему Ctrl-Space не работает, если в меню AutoComplete settings не стоит галочка Show list?
Вероятно потому что для кого-то имеют смысл и другие сочетания настроек:

Code: Select all

[ ] Show list
    [ ] Modal mode
[x] Append first matched item
DV wrote:чтобы список автодополнения не показывался автоматически, а вызывался вручную по Ctrl-Space?
На мой взгляд ваше пожелание вполне разумно, но надо продумать способ активации (отдельный хоткей, или команда макроязыка).

Прошу обратить внимание, что в любом случае в данной теме это оффтопик.
Лучше запишите на багтрекер, чтобы не потерялось.

Update
Выяснилось, что для решения задачи DV не надо снимать галку [x] Show list в настройках AutoComplete settings.
Вместо этого нужно снять галку [ ] AutoComplete в настройках Command line settings.
User avatar
HaRT
Moderator
Posts: 10823
Joined: Tue 30 Aug, 2005 17:21
Has thanked: 221 times
Been thanked: 358 times

Макросы для „борьбы“ с автодополнением

Post by HaRT »

Спасибо за полезные макросы!
Лично мне несколько неудобны две вещи:
1. что при использовании обычных клавиш навигации список автодополнения резко пропадает — это отвлекает внимание. Я бы предпочёл, чтобы он остался, притом с сохранением текущей позиции в нём. Наверно, можно в макросе брать текущую позицию (как это сделать в современном FAR Macro API?), закрывать список, отрабатывать клавишу, открывать список вновь и восстанавливать сохранённую позицию.
2. чтобы закрыть список с сохранением выбранного дополнения, приходится либо задействовать обе руки, либо левой тянуться к CtrlTab, либо правой к F10. Было бы удобно назначить на это же действие ещё и CtrlRight, но только если находимся в конце командной строки (чтобы не пострадало шагание по целым словам).
Фар есть инструмент, а не нянька. © 2009 DrKnS
User avatar
John Doe
Бюрократ
Posts: 13807
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 426 times
Contact:

Макросы для „борьбы“ с автодополнением

Post by John Doe »

HaRT wrote: чтобы закрыть список с сохранением выбранного дополнения
А в каких случаях требуется это делать?
HaRT wrote: Было бы удобно назначить на это же действие ещё и CtrlRight
Может CtrlEnter?
User avatar
HaRT
Moderator
Posts: 10823
Joined: Tue 30 Aug, 2005 17:21
Has thanked: 221 times
Been thanked: 358 times

Макросы для „борьбы“ с автодополнением

Post by HaRT »

John Doe wrote: в каких случаях требуется это делать?
Например, когда в истории есть длинный путь к какой-то программе без параметров, а мне надо запустить её с параметрами.
John Doe wrote: Может CtrlEnter?
Тогда, чтобы вставить имя файла с панели, придётся закрывать автодополнение — неудобно. А что не так с CtrlRight?
Фар есть инструмент, а не нянька. © 2009 DrKnS
User avatar
John Doe
Бюрократ
Posts: 13807
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 426 times
Contact:

Макросы для „борьбы“ с автодополнением

Post by John Doe »

HaRT wrote: Например, когда в истории есть длинный путь к какой-то программе без параметров, а мне надо запустить её с параметрами.
Пробел (как и прочие текстовые клавиши) делает то, что вам надо.
HaRT wrote: Тогда, чтобы вставить имя файла с панели, придётся закрывать автодополнение — неудобно.
CtrlEnter будет срабатывать только если в списке выбран непустой элемент.
HaRT wrote: А что не так с CtrlRight?
Всё нормально с ним, но мне почему-то больше нравится CtrlEnter (если это вообще нужно, см. пункт №1)
User avatar
HaRT
Moderator
Posts: 10823
Joined: Tue 30 Aug, 2005 17:21
Has thanked: 221 times
Been thanked: 358 times

Макросы для „борьбы“ с автодополнением

Post by HaRT »

John Doe wrote: CtrlEnter будет срабатывать только если в списке выбран непустой элемент
Вроде тоже неплохо. Надо попробовать на практике.
Фар есть инструмент, а не нянька. © 2009 DrKnS
User avatar
John Doe
Бюрократ
Posts: 13807
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 426 times
Contact:

Макросы для „борьбы“ с автодополнением

Post by John Doe »

HaRT wrote: Надо попробовать на практике.

Code: Select all

Macro { description="CtrlEnter to accept autocompletion";
  area="ShellAutoCompletion DialogAutoCompletion"; key="/^[LR]Ctrl(Enter|NumEnter)$/";
  uid="B8D4CC54-5690-413C-BE02-B3BDCB34145E";
  condition=function() return not Object.Bof end;
  action=function() Keys"Esc" end;
}
User avatar
John Doe
Бюрократ
Posts: 13807
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 426 times
Contact:

Макросы для „борьбы“ с автодополнением

Post by John Doe »

HaRT wrote: 1. что при использовании обычных клавиш навигации список автодополнения резко пропадает — это отвлекает внимание. Я бы предпочёл, чтобы он остался, притом с сохранением текущей позиции в нём.
Заменить первый макрос на этот:

Code: Select all

local KeepList = true
Macro { description="Don't steal important keys!";
  area="ShellAutoCompletion DialogAutoCompletion"; key="Up Down Num8 Num2 Home End Num7 Num1 PgUp PgDn Num9 Num3";
  uid="C9A9CF66-0406-4420-A967-EBEDD75A740D";
  action=function()
    if KeepList then
      local Pos = far.AdvControl("ACTL_GETWINDOWINFO").Id:send("DM_LISTGETCURPOS", 1)
      Keys"Home Esc AKey CtrlSpace"
      far.AdvControl("ACTL_GETWINDOWINFO").Id:send("DM_LISTSETCURPOS", 1, Pos)
    else
      Keys"Esc AKey"
    end
  end;
}
User avatar
John Doe
Бюрократ
Posts: 13807
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 426 times
Contact:

Макросы для „борьбы“ с автодополнением

Post by John Doe »

Можно также предложить альтернативный вариант управления: обычные курсорные клавиши передаются в панели, а клавиши нумпада управляют списком:
Last edited by John Doe on Thu 01 Jan, 1970 01:00, edited 0 times in total.
Reason: fix
User avatar
HaRT
Moderator
Posts: 10823
Joined: Tue 30 Aug, 2005 17:21
Has thanked: 221 times
Been thanked: 358 times

Макросы для „борьбы“ с автодополнением

Post by HaRT »

John Doe wrote: Заменить первый макрос на этот
Спасибо!
John Doe wrote: альтернативный вариант управления: обычные курсорные клавиши передаются в панели, а клавиши нумпада управляют списком
Помнится, у меня в Фаре 1.75 было нечто родственное: нумпадом ходил по панели, а обычными — по командной строке.
Фар есть инструмент, а не нянька. © 2009 DrKnS
User avatar
HaRT
Moderator
Posts: 10823
Joined: Tue 30 Aug, 2005 17:21
Has thanked: 221 times
Been thanked: 358 times

Макросы для „борьбы“ с автодополнением

Post by HaRT »

Если попытаться при скрытых панелях набрать начало команды и в появившемся списке понажимать стрелочки, получим . Вылечил добавлением . Прошу исправить макросы в шапке.
Примечательно, что такую же ошибку я получал и при показанных панелях после каких-то комбинаций действий где-то возле первого/последнего файла на панели, но стабильно воспроизводить так и не научился.
Фар есть инструмент, а не нянька. © 2009 DrKnS
Post Reply

Return to “Полезные макросы и скрипты”