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

Здесь обсуждается всё, что касается макросов.
User avatar
John Doe
Бюрократ
Posts: 14580
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

Старая версия:
User avatar
John Doe
Бюрократ
Posts: 14580
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 »

Latest post of the previous page:

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

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).
User avatar
HaRT
Moderator
Posts: 11454
Joined: Tue 30 Aug, 2005 17:21
Has thanked: 270 times
Been thanked: 417 times

MacroEx — запуск макросов нетрадиционными способами

Post by HaRT »

John Doe wrote: Должно работать и сейчас.
Спасибо, работает! Теперь у меня так: , .
John Doe wrote: должно быть задано поле action
Да, притом ни false, ни true не прокатили; пришлось определять local function noop() end.
Фар есть инструмент, а не нянька. © 2009 DrKnS
User avatar
John Doe
Бюрократ
Posts: 14580
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

Group {"\1group"}
--
Group {"\2group"}
--
Group {"just text"}
--
Group {}
User avatar
HaRT
Moderator
Posts: 11454
Joined: Tue 30 Aug, 2005 17:21
Has thanked: 270 times
Been thanked: 417 times

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

Post by HaRT »

John Doe wrote: Можно так
Не могу похвастаться полным пониманием предлагаемого решения.
Поскольку у меня этих групп всего 3+2, у себя пока оставлю как есть. Но для более общего решения, похоже, предлагаемый Вами подход будет действительно лучше.
Фар есть инструмент, а не нянька. © 2009 DrKnS
User avatar
HaRT
Moderator
Posts: 11454
Joined: Tue 30 Aug, 2005 17:21
Has thanked: 270 times
Been thanked: 417 times

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

Post by HaRT »

John Doe wrote: Для непостоянных блоков кнопки Left/Right перемещают курсор между позициями начала и конца выделения (предлагалось тут)
Выяснилось, что эта функциональность мешает двигать блок (что и неудивительно).
Есть ли какой-то простой способ заставить оба макроса (в смысле, здешний и тамошний) выполниться в предопределённом порядке?
Фар есть инструмент, а не нянька. © 2009 DrKnS
User avatar
HaRT
Moderator
Posts: 11454
Joined: Tue 30 Aug, 2005 17:21
Has thanked: 270 times
Been thanked: 417 times

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

Post by HaRT »

HaRT wrote: какой-то простой способ заставить оба макроса (в смысле, здешний и тамошний) выполниться в предопределённом порядке?
Оказывается, там не макрос, а обработчик события ввода.
HaRT wrote:
Shmuel wrote: Там каждый из обоих макросов заканчивается вызовом Editor.Sel(RESET).
Вылечил заменой на Keys('AKey').
5 минут спустя: недовылечил. Теперь вправо перескакивает через одну позицию. Но идея ясна, как понадобится, дочиню.
Фар есть инструмент, а не нянька. © 2009 DrKnS
User avatar
John Doe
Бюрократ
Posts: 14580
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 »

Shmuel wrote: Вообще-то эти макросы отношения к Turbo вроде не имеют, они как бы сами по себе.
Так и есть.
HaRT wrote: Выяснилось, что эта функциональность мешает двигать блок (что и неудивительно).
Не знаю как именно предполагается двигать блок, как-нибудь попробую.
Эти 2 макроса точно должны функционировать одновременно? Может быть нужен condition?
User avatar
HaRT
Moderator
Posts: 11454
Joined: Tue 30 Aug, 2005 17:21
Has thanked: 270 times
Been thanked: 417 times

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

Post by HaRT »

John Doe wrote: Эти 2 макроса точно должны функционировать одновременно? Может быть нужен condition?
Не нужны, потому я и подзабил. Если пойму, когда что мне надо, сделаю условия или ещё что и сюда отпишусь.
Фар есть инструмент, а не нянька. © 2009 DrKnS
User avatar
HaRT
Moderator
Posts: 11454
Joined: Tue 30 Aug, 2005 17:21
Has thanked: 270 times
Been thanked: 417 times

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

Post by HaRT »

Создаю блочное выделение (непостоянное); прыгаю куда-то — оно сбрасывается (нормально); пытаюсь восстановить по ^KP — восстанавливается уже поточное выделение (с теми же началом и концом). При этом, например, Editor_SelectingEx работает нормально.
Far Manager v3.0 build 4457 x86 (2015-11-18), без прочих скриптов (оставлены только *Turbo* и macroEx.lua).
Фар есть инструмент, а не нянька. © 2009 DrKnS
User avatar
John Doe
Бюрократ
Posts: 14580
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 »

По всей видимости недоделано: сейчас тип блока нигде не сохраняется, вместо этого используется "глобальное" состояние (которое вроде как можно изменить по ^KN)
User avatar
HaRT
Moderator
Posts: 11454
Joined: Tue 30 Aug, 2005 17:21
Has thanked: 270 times
Been thanked: 417 times

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

Post by HaRT »

John Doe wrote: тип блока нигде не сохраняется
Пожелание: сохранять и восстанавливать.
John Doe wrote: "глобальное" состояние (которое вроде как можно изменить по ^KN)
Насколько я вижу, это переключает тип текущего выделения. При отсутствии такового никакого влияния не вижу.
Фар есть инструмент, а не нянька. © 2009 DrKnS
User avatar
John Doe
Бюрократ
Posts: 14580
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: Пожелание: сохранять и восстанавливать.
Логично. Но не знаю когда доберусь до фара.
HaRT wrote: Насколько я вижу, это переключает тип текущего выделения. При отсутствии такового никакого влияния не вижу.
По и идее при отсутствии выделения эта комбинация меняет глобальное состояние, что должно быть видно, если после этого попытаться восстановить предыдущее выделение.
Это по коду. По факту может и не так, проверить пока не на чем.
User avatar
HaRT
Moderator
Posts: 11454
Joined: Tue 30 Aug, 2005 17:21
Has thanked: 270 times
Been thanked: 417 times

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

Post by HaRT »

Я заметил, что если выполнить ^KC (дублировать блок) при отсутствии выделения, то дубликат текущей строки допишется в её конец, а каретка скакнёт в её начало. Хотелось бы, чтобы вместо этого копия строки добавлялась перед текущей строкой (единообразно тому, что, например, при отсутствии выделения по CtrlIns копируется вся текущая строка вместе с EOL), а каретка никуда бы не смещалась.
Фар есть инструмент, а не нянька. © 2009 DrKnS
User avatar
HaRT
Moderator
Posts: 11454
Joined: Tue 30 Aug, 2005 17:21
Has thanked: 270 times
Been thanked: 417 times

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

Post by HaRT »

Обнаружилось, что в редакторе не работает голый CtrlO — при том, что CtrlK и CtrlQ работают. (Проверял без лишних плагинов и макрофайлов.)
Пришлось подставить . В чём может быть дело? Реально ли это исправить в turbo или в macroEx?
Фар есть инструмент, а не нянька. © 2009 DrKnS
Shmuel
Posts: 7243
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 48 times
Been thanked: 635 times

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

Post by Shmuel »

HaRT, поле code не документировано, следовательно его поддержка может быть убрана в любой момент. Нужно использовать action.
User avatar
sToLp
Posts: 938
Joined: Thu 23 Jul, 2009 10:16
Has thanked: 114 times
Been thanked: 12 times

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

Post by sToLp »

При установленном Ctrl-K-blocks.lua и попытке в редакторе выделить текст (стрелками, мышью или по CtrlA) Far последней ночной сборки 4674 обеих разрядностей, работающий по Win10x64entRu, валится. В 4672 этого не наблюдалось.

Post Reply

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