Макросы для работы с большим буфером консоли

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

Макросы для работы с большим буфером консоли

Post by John Doe »

Предлагаю набор макросов, облегчающих работу с большим буфером консоли¹.

Прежде всего перечислю стандартные клавиатурные комбинации для перемещения по
консольному буферу (в справке фара до сих пор не описаны):
Ctrl+Alt+Up/Down — построчно
Ctrl+Alt+PgUp/PgDn — постранично
Ctrl+Alt+Ноmе/End — к началу/концу
Данный набор макросов вносит следующие улучшения:
  • При скроллинге в панелях они автоматически гасятся, чтобы не загораживать
    “подпанельную” часть буфера.
  • Можно перемещаться по буферу с помощью простых курсорных клавиш (без модификаторов Ctrl+Alt-).
    Это работает, если панели скрыты, и командная строка пуста.
    Или если прокрутка уже начата, и фар “не в окне”.
  • С помощью клавиши Esc можно в любой момент вернуться из любого места буфера в окно Far.
    Действие Ctrl+O также сопровождается возвратом к фару.
  • Сочетания с Home прокручивают буфер к реальному началу консольного вывода
    (фар заполняет буфер нетипичным образом: начиная снизу).
  • Поддержка прокрутки колесом мыши (в том числе горизонтально, см. определения макросов).
  • Все сочетания работают также и в области Desktop.
    Это особенно удобно использовать с макросом на Ctrl+O для перехода в Desktop из любой области.
  • Ctrl+Up/Down прокручивает буфер к месту запуска предыдущей/следующей команды (при скрытых панелях).
    Регэксп для поиска строки приглашения настраивается.
    Ctrl+F7 отображает список всех найденных в буфере команд.
  • Ctrl+Shift+F7 позволяет задать строку для поиска в буфере, и отображает список найденных.
    Заданная строка запоминается, и впоследствии можно перемещаться между вхождениями в буфере
    используя клавиши Ctrl+Shift+Up/Down.
Важно: работа с большим буфером возможна только в режиме WindowMode (в актуальных
версиях фара включен по умолчанию).

Если размер буфера не задан (например в свойствах консоли), то при старте скрипт
увеличивает его до значения, указанного в параметре height.

Обсуждения на форуме:

¹ Far работает с большим буфером консоли!
² Ctrl+O: просмотр пользовательского экрана из любой области
* Макросы для работы с большим буфером консоли

Копирование текста с экрана

Вставка текста в командную строку

Опции
Attachments
BufferScroll07.7z
v0.7
(6.48 KiB) Downloaded 270 times
Last edited by John Doe on Mon 13 Nov, 2017 12:55, edited 3 times in total.
User avatar
John Doe
Бюрократ
Posts: 13801
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 72 times
Been thanked: 425 times
Contact:

Макросы для работы с большим буфером консоли

Post by John Doe »



Ещё одна важная задача (пока не решена): стандартный граббер экрана работает только с окном Far, и с его помощью невозможно выделить ничего выше панелей.
Я намеревался реализовать собственный граббер, работающий по всему буферу, но подзастрял (и врядли к этому вернусь).

Есть и другой вариант решения: использовать консольный "граббер", позволяющий выделить прямоугольный блок мышью.
(Меню окна консоли / Изменить / Пометить).

Каждый раз лазить по менюшкам не очень удобно. В свойствах консоли есть опция, позволяющая всегда использовать мышь для выделения, но к сожалению в настоящий момент Far активно выключает этот режим (на мантисе есть предложение по улучшению: 0002648).
User avatar
John Doe
Бюрократ
Posts: 13801
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 72 times
Been thanked: 425 times
Contact:

Обновление

Post by John Doe »

  • Скроллинг курсорными клавишами теперь работают и в т.н. Desktop.
  • Внутренние изменения (задействованы новые возможности фара)
User avatar
John Doe
Бюрократ
Posts: 13801
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 72 times
Been thanked: 425 times
Contact:

Quick fix

Post by John Doe »

Прошу прощения, ещё одна правка.
Выяснилось, что ACTL_GETWINDOWTYPE в граббере почему-то не работает, в отличии от ACTL_GETWINDOWINFO...
topmo3
Posts: 155
Joined: Mon 21 Aug, 2006 15:36
Has thanked: 35 times
Been thanked: 6 times

Макросы для работы с большим буфером консоли

Post by topmo3 »

а не подскажете, возможно ли создать макрос, переключающий скролирование кнопкой ScrollLock, и в каком примерно направлении двигаться при создании?
Идея такова, чтобы при нажатии ScrollLock включался режим скролинга, когда просто стрелками и PgUp/Dn можно просматривать буфер.
Устанавливать какую-то глобальную переменную, и в зависимости от неё переопределять CrlShiftСтрелки?
User avatar
John Doe
Бюрократ
Posts: 13801
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 72 times
Been thanked: 425 times
Contact:

Макросы для работы с большим буфером консоли

Post by John Doe »

Можно и так, но если нажимать ScrollLock не в окне фара, то ваш скрипт об этом не узнает, и может "рассинхронизироваться" с реальным состоянием скроллока (не думаю, врочем, что это проблема).

Альтернативно, можно использовать функцию наподобие этой:

Code: Select all

local function LockState(xLock,State) --set State: 0|1|2=toggle
                                      --get State: nil|-1
  local Lock = {Num=0, Caps=1, Scroll=2}
  local modeIsOn,keyIsPressed = 1,0xff80
  if State then win.Sleep(80) else State=-1 end
  local r = mf.flock(assert(Lock[xLock]),State)
  return band(r,modeIsOn)==modeIsOn,
         band(r,keyIsPressed)==keyIsPressed
end
fml2
Posts: 534
Joined: Mon 09 Jul, 2012 22:10
Has thanked: 2 times
Been thanked: 8 times

Макросы для работы с большим буфером консоли

Post by fml2 »

У меня Фар 4149 x86. Скачал скрипт, распаковал и поместил в каталог %farprofile%\Macros\scripts. Перезапустил Фар. Но макроса как-то не чувствуется. Запустил MacroBrowser -- вашего макро в списке нет.

Что я делаю не так?

И еще небольшое предложение: в шапке написано "CtrlUp/Down прокручивает буфер в место запуска предыдущей/следующей команды...". Я сначала споткнулся при чтении -- подумал, что слово "вместо" написано раздельно (и удивился: врпде ведь CtrlUp не запускало раньше предыдущую команду). А потом понял, в чем дело. Не лучше ли было бы написать "к месту" вместо "в место"?
User avatar
John Doe
Бюрократ
Posts: 13801
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 72 times
Been thanked: 425 times
Contact:

Макросы для работы с большим буфером консоли

Post by John Doe »

>Что я делаю не так?
Фар должен быть запущен в режиме большого буфера консоли.
fml2
Posts: 534
Joined: Mon 09 Jul, 2012 22:10
Has thanked: 2 times
Been thanked: 8 times

Макросы для работы с большим буфером консоли

Post by fml2 »

Пардон, забыл сказать, что Фар у меня запускается с ключом /w, т.е. я "грамотно" пользуюсь этой функцией. Именно поэтому и обрадовался вашему макросу.
User avatar
John Doe
Бюрократ
Posts: 13801
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 72 times
Been thanked: 425 times
Contact:

Обновление

Post by John Doe »

Исправления
* Скрипт пытался детектировать режим большого буфера по параметру System.WindowMode, и не работал при запуске фара с ключом /w
* Неверно определялась высота окна
fml2
Posts: 534
Joined: Mon 09 Jul, 2012 22:10
Has thanked: 2 times
Been thanked: 8 times

Макросы для работы с большим буфером консоли

Post by fml2 »

Заработало! Спасибо!

Еще один вопросик: при включенных панелях первое нажатие Ctrl+Alt+Up гасит панели, но не прокручивает буфер. Это так и задумано? И наоборот: при возврате в исходное положение последнее нажатие Ctrl+Alt+Down лишь показывает панели. Не было ли бы правильным начинать прокрутку сразу, т.е. чтобы было так, что первое нажатие Ctrl+Alt+Up гасит панели и прокручивает на одну строку?
User avatar
John Doe
Бюрократ
Posts: 13801
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 72 times
Been thanked: 425 times
Contact:

Макросы для работы с большим буфером консоли

Post by John Doe »

>гасит панели, но не прокручивает буфер. Это так и задумано?
Да, именно так.
Ведь аналогичным образом работают не только Up/Down, но и остальные клавиши.

Если сделать по-вашему, то нажав CtrlAltPgUp я не увижу вывод под панелями фара.
fml2
Posts: 534
Joined: Mon 09 Jul, 2012 22:10
Has thanked: 2 times
Been thanked: 8 times

Макросы для работы с большим буфером консоли

Post by fml2 »

А далеко ли от этого макро до возможности маркировать (и копировать) текст из любой части буфера, а не только тот, который находится под панелями?
User avatar
John Doe
Бюрократ
Posts: 13801
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 72 times
Been thanked: 425 times
Contact:

Макросы для работы с большим буфером консоли

Post by John Doe »

Всё изложено во втором посте.
fml2
Posts: 534
Joined: Mon 09 Jul, 2012 22:10
Has thanked: 2 times
Been thanked: 8 times

Макросы для работы с большим буфером консоли

Post by fml2 »

и врядли к этому вернусь
А жаль. С тех пор ничего в ваших планах не изменилось (это ж давно было написано)?
Post Reply

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