turbo — работа с выделением в редакторе

Здесь обсуждается всё, что касается макросов.
User avatar
John Doe
Бюрократ
Posts: 14582
Joined: Wed 27 Apr, 2005 20:42
Location: github.com/FarManagerLegacy
Has thanked: 92 times
Been thanked: 514 times
Contact:

turbo — работа с выделением в редакторе

Post by John Doe »

Удобных сочетаних клавиш всегда не хватает, поэтому предлагаю попробовать в фаре проверенную временем систему последовательностей из нескольких нажатий, знакомую многим по старым IDE от Borland (хотя большинство сочетаний пришли туда в свою очередь из редактора WordStar).

Предлагаются макросы, повторяющие действие некоторых команд: (под "x" здесь понимается вторая клавиша последовательности, например ^KB надо понимать как CtrlK-B).

Часть команд дублирует команды Far, часть — добавляет хоткеи для управления некоторыми параметрами редактора, часть — использует функции стандартных плагинов.

Хотя действия большинства команд очевидны, систему следует описать в целом:
  • Основная функциональность — работа с блоками: воспроизводится то самое поведение turbo-сред: отдельные команды для пометки начала/конца блока, и пр.
  • Применения команд создаёт "постоянные" блоки (режим по умолчанию отключенный в Far), но изменение это временно, до тех пор, пока не будет выделен другой блок (или сброшено выделение).
    Это позволяет прозрачно совмещать оба типа выделения, без необходимости явно трогать настройки.
    • Текущее состояние режима постоянных блоков индицируется на линейке клавиш (F3), как предлагалось тут. Кроме того, выполнение ряда команд сопровождается выводом состояния в строке статуса (кратковременно).
    • "Классическое" поведение постоянных блоков тоже возможно, если режим включен в глобальных настройках редактора.
      Активировать его в локальных (^OO) - недостаточно.
    • Если же глобально режим отключен (что в Far является умолчательным), то команда ^OP (или F3) переключает свойство текущего блока, а не режим.
Не все функции этого пакета имели аналоги в турбо средах. Например:
  • ^KX Overwrite block with clipboard content
  • ^KN переключить тип блока (поточный/вертикальный)
  • ^KP вернуть выделение предыдущему блоку (запрашивалось тут).
    [todo] сформулировать отличие от ^KH
    Так же можно переключаться между текущим и предыдущим выделением.
    Альтернативный шорткат — Ctrl+U, как бы инвертирует штатное действие (сброс выделения).
  • CtrlU:Hold - выделяет последние изменённые строки.
    Главным образом для того чтобы восстановить выделение после вставки блока, или после undo операции с блоком.
    В связи со странностями EE_CHANGE вынуждено применяется дополнительная эвристика, покрывающая не все случаи потенциального использования.
  • ^QV возвращает курсор в место последней правки, подобно шорткату Eclipse Ctrl+Q (запрашивалось тут), или ShiftF5 в MS Word (запрашивалось тут, работает не идентично MS).
    Сохраняются несколько последних позиций, повторные нажатия позволяют переключаться между ними (и возвращаться в исходную позицию).
    ^QP — то же самое, но если последняя правка была произведена не в текущем редакторе, то открывает сесто последней правки в нужном файле (в панелях тоже работает).
  • Для непостоянных блоков кнопки Left/Right перемещают курсор между позициями начала и конца выделения (предлагалось тут).
Дополнительно:

Для того, чтобы макросы активировались последовательностью нажатий: требуется также установить скрипт macroEx.

Если не нравятся последовательности, то несложно определить собственные макросы на удобные сочетания.

Скачать: https://chiselapp.com/user/johnd0e/repo ... /turbo.zip

Старая версия:
AleXH
Posts: 1000
Joined: Sun 12 Apr, 2009 05:21
Been thanked: 1 time

Re: turbo — работа с выделением в редакторе

Post by AleXH »

Latest post of the previous page:

Нет, я их сортирую в одной :)
User avatar
John Doe
Бюрократ
Posts: 14582
Joined: Wed 27 Apr, 2005 20:42
Location: github.com/FarManagerLegacy
Has thanked: 92 times
Been thanked: 514 times
Contact:

Re: turbo — работа с выделением в редакторе

Post by John Doe »

Я так не делаю, поэтому вам придётся переименовывать самостоятельно.
AleXH
Posts: 1000
Joined: Sun 12 Apr, 2009 05:21
Been thanked: 1 time

Re: turbo — работа с выделением в редакторе

Post by AleXH »

Меню:
^QY удаление до конца строки
^Q-DEL до начала
, может:
^Q-DEL удаление до конца строки
^Q-BS до начала
?
Line написано в одном случае строчной, в другом прописной.
^Q{ и ^Q} без описаний.
User avatar
John Doe
Бюрократ
Posts: 14582
Joined: Wed 27 Apr, 2005 20:42
Location: github.com/FarManagerLegacy
Has thanked: 92 times
Been thanked: 514 times
Contact:

Re: turbo — работа с выделением в редакторе

Post by John Doe »

Сочетания ^QY и ^Q-DEL ещё со времён WordStar, смысла переназначать нет никакого, ведь в фаре есть для этого выделенные шорткаты.
"Line" исправил

^Q{ и ^Q} описал. Update: хотя... есть смысл переназначить на ^K[ ^K]
User avatar
HaRT
Moderator
Posts: 11458
Joined: Tue 30 Aug, 2005 17:21
Has thanked: 270 times
Been thanked: 417 times

turbo — работа с выделением в редакторе

Post by HaRT »

Спасибо за полезную функциональность и удобное интерфейсное решение!

Несколько вопросов/предложений (по версии от 2014-08-20,21 из шапки):
* В конце файла Ctrl-K-blocks.lua действием макроса назначена функция markLastBlock, которую мне не удалось найти ни в одном из файлов пакета. Это ошибка или какая-то хитрая магия?

В файле Ctrl-Q-quick.lua хорошо бы добавить/исправить по паре описаний:

Code: Select all

^Q[  Go to matching/backward pair [Brackets plugin]
^Q]  Go to matching/forward pair [Brackets plugin]
^Q{  Select to matching/backward pair [Brackets plugin]
^Q}  Select to matching/forward pair [Brackets plugin]
* Есть и другие мелкие улучшения по части английского. Если интересно, выложу.
Фар есть инструмент, а не нянька. © 2009 DrKnS
User avatar
John Doe
Бюрократ
Posts: 14582
Joined: Wed 27 Apr, 2005 20:42
Location: github.com/FarManagerLegacy
Has thanked: 92 times
Been thanked: 514 times
Contact:

turbo — работа с выделением в редакторе

Post by John Doe »

HaRT wrote: Это ошибка или какая-то хитрая магия?
Не магия.
В какой-то предыдущей версии функция была, а потом целиком перекочевала в макрос на CtrlK-P.

Вероятно забыл удалить из кода отключенный макрос (или не решил что с ним делать).

А идея в том, чтобы заставить стандартное сочетание CtrlU работать как переключатель.
Сейчас для этого достаточно в макрос на CtrlK-P дописать через пробел CtrlU.
Update В рабочей версии сделал так:
HaRT wrote: Есть и другие мелкие улучшения по части английского. Если интересно, выложу.
Почему бы и нет.
P.S.
Вообще что касается английского, то текст в основном брался уже готовый, как он и был в справке старых редакторов.
Даже не знаю стоит ли править всё.
User avatar
HaRT
Moderator
Posts: 11458
Joined: Tue 30 Aug, 2005 17:21
Has thanked: 270 times
Been thanked: 417 times

turbo — работа с выделением в редакторе

Post by HaRT »

John Doe wrote: достаточно в макрос на CtrlK-P дописать через пробел CtrlU
Спасибо, я так и сделаю.
John Doe wrote:Почему бы и нет.
Вот:

Code: Select all

^KB  Mark block beginning
^KT  Select current word
^KN  Switch block column mode
^KL  Select current line
^KP  Select last block
John Doe wrote:текст в основном брался уже готовый, как он и был в справке старых редакторов
Ну, терминология с тех пор несколько трансформировалась. Да и правила английского никто не отменял. :)
PS
А ещё я себе время показа сообщения в строке статуса увеличил до полусекунды. Есть ли цивилизованный способ переиспользовать эту функцию, а не копировать в каждый файл?
Фар есть инструмент, а не нянька. © 2009 DrKnS
User avatar
John Doe
Бюрократ
Posts: 14582
Joined: Wed 27 Apr, 2005 20:42
Location: github.com/FarManagerLegacy
Has thanked: 92 times
Been thanked: 514 times
Contact:

turbo — работа с выделением в редакторе

Post by John Doe »

HaRT wrote: Есть ли цивилизованный способ переиспользовать эту функцию, а не копировать в каждый файл?
Поместить её в модуль (в папке modules), и загружать его через require.
User avatar
John Doe
Бюрократ
Posts: 14582
Joined: Wed 27 Apr, 2005 20:42
Location: github.com/FarManagerLegacy
Has thanked: 92 times
Been thanked: 514 times
Contact:

turbo — работа с выделением в редакторе

Post by John Doe »

HaRT wrote:^Q{  Select to matching/backward pair [Brackets plugin]
^Q}  Select to matching/forward pair [Brackets plugin]
А в рабочей версии у меня оказывается другие сочетания:

^K[ Mark block between mathing pairs right
^K] Mark block between mathing pairs left
User avatar
HaRT
Moderator
Posts: 11458
Joined: Tue 30 Aug, 2005 17:21
Has thanked: 270 times
Been thanked: 417 times

turbo — работа с выделением в редакторе

Post by HaRT »

John Doe wrote: достаточно в макрос на CtrlK-P дописать через пробел CtrlU
Попользовался немного и понял, что хотелось бы всё же, чтобы CtrlU не переключал текущее/прежнее выделение, а сбрасывал/возвращал выделение. Это сложно сделать?
Фар есть инструмент, а не нянька. © 2009 DrKnS
User avatar
John Doe
Бюрократ
Posts: 14582
Joined: Wed 27 Apr, 2005 20:42
Location: github.com/FarManagerLegacy
Has thanked: 92 times
Been thanked: 514 times
Contact:

turbo — работа с выделением в редакторе

Post by John Doe »

User avatar
HaRT
Moderator
Posts: 11458
Joined: Tue 30 Aug, 2005 17:21
Has thanked: 270 times
Been thanked: 417 times

turbo — работа с выделением в редакторе

Post by HaRT »

John Doe wrote: См. update
Спасибо, самое то!
Фар есть инструмент, а не нянька. © 2009 DrKnS
User avatar
HaRT
Moderator
Posts: 11458
Joined: Tue 30 Aug, 2005 17:21
Has thanked: 270 times
Been thanked: 417 times

turbo — работа с выделением в редакторе

Post by HaRT »

Я тут для себя немного изменил порядок перечисления команд в подсказке, чтобы они были более логично сгруппированы: , .
Пожелание: чтобы была возможность вставить разделители с текстом, как то: “Go to…”, “Select to…”.

15:25
(Не)кстати, а в чём получается различие между здешней функциональностью на CtrlU и на CtrlK-H?
User avatar
John Doe
Бюрократ
Posts: 14582
Joined: Wed 27 Apr, 2005 20:42
Location: github.com/FarManagerLegacy
Has thanked: 92 times
Been thanked: 514 times
Contact:

turbo — работа с выделением в редакторе

Post by John Doe »

Подсказка формируется динамически из description, и порядок пунктов зависит от порядка следования макросов.
Т.е. изменить несложно.

Добавить разделители по идее тоже можно, если разделитель будет свойством пункта, перед которым должен появиться.
Можно даже в лоб:

Code: Select all

description="──────── Goto... ────────\n^QB        start of block";
User avatar
HaRT
Moderator
Posts: 11458
Joined: Tue 30 Aug, 2005 17:21
Has thanked: 270 times
Been thanked: 417 times

turbo — работа с выделением в редакторе

Post by HaRT »

John Doe wrote: разделитель будет свойством пункта, перед которым должен появиться
А как-нибудь более самостоятельно? Чтобы при перетасовке пунктов не надо было менять их описания?

И прошу ещё ответить вот на эту приписку:
HaRT wrote: в чём получается различие между здешней функциональностью на CtrlU и на CtrlK-H?
Фар есть инструмент, а не нянька. © 2009 DrKnS
User avatar
John Doe
Бюрократ
Posts: 14582
Joined: Wed 27 Apr, 2005 20:42
Location: github.com/FarManagerLegacy
Has thanked: 92 times
Been thanked: 514 times
Contact:

turbo — работа с выделением в редакторе

Post by John Doe »

Добавка: лучше так

Code: Select all

description="\1Goto...\n^QB  Go to start of block";
HaRT wrote: А как-нибудь более самостоятельно?
Предлагайте.
HaRT wrote: а в чём получается различие между здешней функциональностью на CtrlU и на CtrlK-H?
Ctrl-U сейчас восстанавливает любое выделение.
CtrlK-H восстанавливает только то, что было погашено с помощью CtrlK-H, или запомнено ранее при использовании прочих макросов, устанавливающих блоки (а именно CtrlK-B/K, и CtrlK-N).
Post Reply

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