Page 2 of 4

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

Posted: Thu 29 May, 2014 19:37
by John Doe
Предлагаю набор макросов, облегчающих работу с большим буфером консоли¹.

Прежде всего перечислю стандартные клавиатурные комбинации для перемещения по
консольному буферу (в справке фара до сих пор не описаны):
Ctrl+Alt+Up/Down — построчно
Ctrl+Alt+PgUp/PgDn — постранично
Ctrl+Alt+Номе/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: просмотр пользовательского экрана из любой области
* Макросы для работы с большим буфером консоли

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

Опции

cfgscript

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

Posted: Tue 21 Oct, 2014 07:14
by John Doe

Latest post of the previous page:

Увы, слишком много конкурирующих планов.
Тем более что нормальный способ ждёт своего героя на мантисе.

P.S.
Альтернативно, возможно стоило бы адаптировать вот этот готовый плагинчик: http://forum.farmanager.com/viewtopic.php?p=1046
(Сейчас в режиме /w он работает совсем некорректно)

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

Posted: Sun 21 Dec, 2014 22:47
by LanKing
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

Видим часть консоли и начало верхней части окна фара, окно частично спрятано.


Довесил костыль, изменив ф-цию, отвечающую за Esc:




То есть по 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" в макросах?

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

Posted: Mon 22 Dec, 2014 20:50
by John Doe

Code: Select all

key="/.*/"

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

Posted: Tue 23 Dec, 2014 13:56
by LanKing
Попробовал написать универсальное решение для возврата скролла перед любым выводом кроме консоли, пришёл к тому что нужно обрабатывать все хоткеи + все хоткеи зарегистрированных макросов, что вызывает мощную нагрузку на макрос. Оставил 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
Во-первых, никакой список не нужен.
Во-вторых, никакой нагрузки не будет.

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

Posted: Tue 23 Dec, 2014 19:01
by LanKing
Поясните так, чтобы было понятно?

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

Posted: Tue 23 Dec, 2014 19:12
by John Doe
Например:

Code: Select all

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;
}
(Этот кусок кода не претендует на законченное решение, если что)

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

Posted: Tue 23 Dec, 2014 19:13
by LanKing
Проблема в этом коде в том, что любое нажатие даже незарегистрированных клавиш (которые не вызывают видимых панелей и т.п.) всё равно будет прокручивать буфер.

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

Posted: Tue 23 Dec, 2014 19:19
by John Doe
И что?