Предлагаю набор макросов, облегчающих работу с большим буфером консоли¹.
Прежде всего перечислю стандартные клавиатурные комбинации для перемещения по
консольному буферу (в справке фара до сих пор не описаны):
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
Макросы для работы с большим буфером консоли
Posted: Mon 20 Oct, 2014 19:45
by fml2
Latest post of the previous page:
и врядли к этому вернусь
А жаль. С тех пор ничего в ваших планах не изменилось (это ж давно было написано)?
Макросы для работы с большим буфером консоли
Posted: Tue 21 Oct, 2014 07:14
by John Doe
Увы, слишком много конкурирующих планов.
Тем более что нормальный способ ждёт своего героя на мантисе.
John Doe wrote: Прежде всего напомню стандартные клавиатурные комбинации для "перемотки" по консольному буферу (в хелпе до сих пор не описаны):
Ctrl-Alt- <Up/Down> — построчно
Ctrl-Alt- <PgUp/PgDn> — постранично
Ctrl-Alt- <Номе/End> — к началу/концу
Подскажите, что я делаю не так? Говорю dir, получаю листинг за пределами окна. Пробую CtrlAltUp - не скроллит. Макрос ещё не ставил.
Макросы для работы с большим буфером консоли
Posted: Sun 21 Dec, 2014 23:13
by HaRT
LanKing, Far запущен с ключом /w?
Макросы для работы с большим буфером консоли
Posted: Mon 22 Dec, 2014 00:25
by LanKing
Нет, но far:config (System.WindowMode = true).
Макросы для работы с большим буфером консоли
Posted: Mon 22 Dec, 2014 00:29
by LanKing
Разобрался, я ошибся. Спасибо! )
Макросы для работы с большим буфером консоли
Posted: Mon 22 Dec, 2014 18:45
by LanKing
Баг такой:
1. Отключаем панели (CtrlO)
2. Проматываем несколько строк вверх Up Up
3. Включаем панели через CtrlO
Видим часть консоли и начало верхней части окна фара, окно частично спрятано.
Macro { description="Esc - scroll buffer to Far window. CtrlO - scroll + show panels";
area="Common"; key="Esc CtrlO"; priority=60;
uid="BDAC4B4B-4BC3-4CAE-BAE7-118B62DB4875";
condition=function()
local in_window,yDelta = far_in_window()
if not in_window then
Far.Window_Scroll(yDelta)
return true
end
end;
action=function()
if (akey(1)=="CtrlO") then Keys(akey(1)); end;
end;
}
То есть по CtrlO не только показать панели но и проскроллить буфер вначале.
P.S. Спасибо за отличный макрос!
Макросы для работы с большим буфером консоли
Posted: Mon 22 Dec, 2014 20:34
by John Doe
LanKing wrote: Баг такой:
Давайте называть вещи своими именами: никакого бага тут нет.
Скрипт выполняет ровно те функции, что описаны в шапке.
А так можно ещё и другие функции подёргать, например F1.
Макросы для работы с большим буфером консоли
Posted: Mon 22 Dec, 2014 20:40
by LanKing
Логично А не существует условия "anykey" в макросах?
Попробовал написать универсальное решение для возврата скролла перед любым выводом кроме консоли, пришёл к тому что нужно обрабатывать все хоткеи + все хоткеи зарегистрированных макросов, что вызывает мощную нагрузку на макрос. Оставил Ctrl+O для себя, остальное уместно делать в ядре. Ещё было бы замечательно в ядре фара иметь флаг для макросов вроде notConsole - отвечающий за то, что что-то на экран выведено и это не консоль.
Макросы для работы с большим буфером консоли
Posted: Tue 23 Dec, 2014 14:30
by John Doe
Не пойму что у вас за сложности такие.
Если я в процессе листания "ушёл" от окна фара, то прежде чем выполнять какие-либо действия жму Esc, и возвращаюсь в окно.
При желании вы можете добавить в набор и другой макрос, чтобы при нажатии любой посторонней комбинации консоль прокручивалась к окну фара.
Только зачем.
Макросы для работы с большим буфером консоли
Posted: Tue 23 Dec, 2014 17:48
by LanKing
Мне тогда придётся добавить список всех хоткеев, кроме хоткеев buffer.scroll -) А это поганый изврат, поскольку он будет создавать нагрузку и когда консоль не открыта (проверками - а открыта ли она).
Макросы для работы с большим буфером консоли
Posted: Tue 23 Dec, 2014 18:39
by John Doe
Во-первых, никакой список не нужен.
Во-вторых, никакой нагрузки не будет.
Macro {
area="Common"; key="/.*/"; priority=55;
condition=function()
local in_window,yDelta = far_in_window()
if not in_window then
Far.Window_Scroll(yDelta)
return true
end
end;
action=function()
local key = akey(1)
if eval(key,2)==-2 then Keys(key) end;
end;
}
(Этот кусок кода не претендует на законченное решение, если что)