Предлагаю набор макросов, облегчающих работу с большим буфером консоли¹.
Прежде всего перечислю стандартные клавиатурные комбинации для перемещения по
консольному буферу (в справке фара до сих пор не описаны):
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. Обсуждения на форуме:
Стандартная функция копирования текста, вызываемая командой Alt+Ins, работает только
в пределах окна фара.
В буфере за пределами окна можно использовать встроенную функцию консоли, доступную в меню окна, или
использовать для выделения мышь.
Кроме того, скриптом предусмотрено несколько макросов (по умолчанию отключенных), которые при желании
можно активировать в опциях:
Ctrl+Ins копирует верхнюю строку.
Ctrl+Shift+Ins копирует экран.
Ctrl+Alt+Ins сохраняет весь буфер в файл, и открывает его в редакторе.
Вставка текста в командную строку
Ctrl+Shift+E (при погашенных панелях)
поместить в командную строку нижнюю строку из буфера экрана
Ctrl+Shift+E
поместить в командную строку предыдущую строку из буфера экрана
Опции
В начале скрипта (BufferScroll.lua) есть таблица с опциями, которые можно изменять редактируя файл,
или используя возможности cfgscript.
prompt (string/false)
Определяет регэксп для поиска строки приглашения, используемый чтобы
найти в буфере места запуска команд.
По умолчанию: "^%a:%\\.->"; false отключает функцию.
height (number/false)
Определяет вертикальный размер буфера, который устанавливается при старте,
если высота буфера совпадает с высотой окна.
По умолчанию: 10000; false отключает функцию.
real_top (boolean)
Определяет поведение комбинаций с Home.
По умолчанию: true — прокручивает к первой непустой строке буфера. false — сначала прокручивает в самый верх буфера, а повторное нажатие — к первой непустой строке.
key_copy_line, key_copy_screen, key_save_buffer (string)
Определяет клавиатурные комбинации макросов для копирования текста с экрана.
По умолчанию: не назначены.
Чтобы после каждого обновления скрипта не приходилось вручную восстанавливать
изменённые значения опций рекомендуется использовать возможности cfgscript из пакета ScriptsBrowser: http://forum.farmanager.com/viewtopic.php?f=15&t=10418
Подозреваю, что параллельно у вас стоит макрос из темы о том, что граббер не работает из Ctrl-O в редакторе.
В любом случае, из BufferScroll макрос удалите (в актуальной версии его и нет).
Замену опубликую отдельно.
Макросы для работы с большим буфером консоли
Posted: Tue 31 Oct, 2017 18:24
by zg
да нет, у вас там panel.GetUserScreen() делается, а panel.SetUserScreen() — нет.
Макросы для работы с большим буфером консоли
Posted: Tue 31 Oct, 2017 23:25
by John Doe
Да, это неприлично, поэтому в шапке обновление:
Мелкие фиксы, поддержка колеса мыши (надо бы задокументировать в каких функциях)
Макросы для Ctrl-O теперь отдельно viewtopic.php?f=15&t=10983
Макросы для работы с большим буфером консоли
Posted: Sat 04 Nov, 2017 23:10
by John Doe
В шапке обновление.
Макросы заново выверены, улучшены условия срабатывания, согласованы описания, и т.п.
Добавлены новые функции:
- Список команд в буфер
- Поиск строки в буфере
- Копирование строки, экрана, и сохранение буфера целиком
- При старте может устанавливаеться размер буфера
Описание макросов в отдельном hlf.
Макросы для работы с большим буфером консоли
Posted: Thu 09 Nov, 2017 17:16
by HaRT
Вижу, в комплекте идёт файл справки (спасибо). Предполагается ли, что он открывается из каких-то меню/диалогов, показываемых скриптом? Например, у меня ни из диалога Search console buffer, ни из меню найденных в буфере команд по F1 справка не открывается.
И пожелание: сложно ли сделать, чтобы по AltIns (переход в режим граббера) буфер не прокручивался в самый низ?
Возможно, стоит при прокрутке буфера, если каретка оказалась за пределами окна, задавать её положение в ближайшей (или верхней?) строке окна…
Макросы для работы с большим буфером консоли
Posted: Thu 09 Nov, 2017 18:48
by John Doe
HaRT wrote: ↑Thu 09 Nov, 2017 17:16Предполагается ли, что он открывается из каких-то меню/диалогов, показываемых скриптом?
Не предполагалось, но действительно, почему бы и нет.
HaRT wrote: ↑Thu 09 Nov, 2017 17:16сложно ли сделать, чтобы по AltIns (переход в режим граббера) буфер не прокручивался в самый низ?
v0.6.1
По ошибке была выложена не последняя версия..
Макросы для работы с большим буфером консоли
Posted: Wed 19 Sep, 2018 15:30
by LAT
Столкнулся со следующей проблемой.
Для ярлыка для запуска FAR-а заданы размеры буфера окна и экрана: ширина = 110, высота = 60.
Параметры из far:config:
System.WindowMode = true
System.WindowMode.StickyX = true
Если задать System.WindowMode.StickyY = true (чтобы не отображалась вертикальная панель прокрутки), макрос перестает работать, плюс при запуске FAR-а возникают проблемы с прорисовкой панелей.
При запуске вверху появляется лишняя (на скриншоте черная) строка
При попытке ввести что-либо в командную строку выясняется, что на самом деле курсор находится на 1 строку выше. При передвижении по панели (стрелки вверх-вниз) появляются проблемы с прорисовкой содержимого панели
UPD1. Win 7, FAR 3.0.2561 x86, версия макроса v0.6.1
UPD2. Если изменить значение height в макросе на 43 или меньше, проблем с прорисовкой не наблюдается, но макрос все равно не работает.
Макросы для работы с большим буфером консоли
Posted: Wed 19 Sep, 2018 15:39
by 2useven10
LAT wrote: ↑Wed 19 Sep, 2018 15:30
Если задать System.WindowMode.StickyY = false (чтобы не отображалась вертикальная панель прокрутки)
С false как раз полоса прокрутки должна отображаться.
Макросы для работы с большим буфером консоли
Posted: Wed 19 Sep, 2018 15:42
by LAT
Вы правы, перепутал. Исправил в своих предыдущих постах.
Макросы для работы с большим буфером консоли
Posted: Thu 20 Sep, 2018 07:14
by John Doe
LAT wrote: ↑Wed 19 Sep, 2018 15:30
Если задать System.WindowMode.StickyY = true (чтобы не отображалась вертикальная панель прокрутки)
Если я правильно понял, то таким образом вы управляете не полосой прокрутки, а именно высотой буфера, делая её равной высоте окна.
Соответственно макрос становится просто не нужен.