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

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

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

Post by John Doe » Thu 29 May, 2014 19:37

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

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

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

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

¹ Far работает с большим буфером консоли!
² Ctrl-O: просмотр пользовательского экрана из любой области
Attachments
BufferScroll061.7z
v0.6.1
(6.33 KiB) Downloaded 41 times
Last edited by John Doe on Mon 13 Nov, 2017 12:55, edited 3 times in total.

User avatar
John Doe
Бюрократ
Posts: 11715
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 24 times
Been thanked: 123 times

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

Post by John Doe » Tue 21 Oct, 2014 07:14

Latest post of the previous page:

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

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

User avatar
LanKing
Posts: 180
Joined: Thu 31 Aug, 2006 20:39

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

Post by LanKing » Sun 21 Dec, 2014 22:47

John Doe wrote: Прежде всего напомню стандартные клавиатурные комбинации для "перемотки" по консольному буферу (в хелпе до сих пор не описаны):
Ctrl-Alt- <Up/Down> — построчно
Ctrl-Alt- <PgUp/PgDn> — постранично
Ctrl-Alt- <Номе/End> — к началу/концу
Подскажите, что я делаю не так? Говорю dir, получаю листинг за пределами окна. Пробую CtrlAltUp - не скроллит. Макрос ещё не ставил.

User avatar
HaRT
Moderator
Posts: 8310
Joined: Tue 30 Aug, 2005 17:21
Location: Санкт-Петербург
Has thanked: 72 times
Been thanked: 121 times

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

Post by HaRT » Sun 21 Dec, 2014 23:13

LanKing, Far запущен с ключом /w?
Фар есть инструмент, а не нянька. © 2009 DrKnS

User avatar
LanKing
Posts: 180
Joined: Thu 31 Aug, 2006 20:39

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

Post by LanKing » Mon 22 Dec, 2014 00:25

Нет, но far:config (System.WindowMode = true).

User avatar
LanKing
Posts: 180
Joined: Thu 31 Aug, 2006 20:39

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

Post by LanKing » Mon 22 Dec, 2014 00:29

Разобрался, я ошибся. Спасибо! )

User avatar
LanKing
Posts: 180
Joined: Thu 31 Aug, 2006 20:39

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

Post by LanKing » Mon 22 Dec, 2014 18:45

Баг такой:
1. Отключаем панели (CtrlO)
2. Проматываем несколько строк вверх Up Up
3. Включаем панели через CtrlO

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


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




То есть по CtrlO не только показать панели но и проскроллить буфер вначале.


P.S. Спасибо за отличный макрос!

User avatar
John Doe
Бюрократ
Posts: 11715
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 24 times
Been thanked: 123 times

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

Post by John Doe » Mon 22 Dec, 2014 20:34

LanKing wrote: Баг такой:
Давайте называть вещи своими именами: никакого бага тут нет.
Скрипт выполняет ровно те функции, что описаны в шапке.

А так можно ещё и другие функции подёргать, например F1.

User avatar
LanKing
Posts: 180
Joined: Thu 31 Aug, 2006 20:39

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

Post by LanKing » Mon 22 Dec, 2014 20:40

Логично :) А не существует условия "anykey" в макросах?

User avatar
John Doe
Бюрократ
Posts: 11715
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 24 times
Been thanked: 123 times

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

Post by John Doe » Mon 22 Dec, 2014 20:50

Code: Select all

key="/.*/"

User avatar
LanKing
Posts: 180
Joined: Thu 31 Aug, 2006 20:39

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

Post by LanKing » Tue 23 Dec, 2014 13:56

Попробовал написать универсальное решение для возврата скролла перед любым выводом кроме консоли, пришёл к тому что нужно обрабатывать все хоткеи + все хоткеи зарегистрированных макросов, что вызывает мощную нагрузку на макрос. Оставил Ctrl+O для себя, остальное уместно делать в ядре. Ещё было бы замечательно в ядре фара иметь флаг для макросов вроде notConsole - отвечающий за то, что что-то на экран выведено и это не консоль.

User avatar
John Doe
Бюрократ
Posts: 11715
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 24 times
Been thanked: 123 times

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

Post by John Doe » Tue 23 Dec, 2014 14:30

Не пойму что у вас за сложности такие.
Если я в процессе листания "ушёл" от окна фара, то прежде чем выполнять какие-либо действия жму Esc, и возвращаюсь в окно.

При желании вы можете добавить в набор и другой макрос, чтобы при нажатии любой посторонней комбинации консоль прокручивалась к окну фара.
Только зачем.

User avatar
LanKing
Posts: 180
Joined: Thu 31 Aug, 2006 20:39

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

Post by LanKing » Tue 23 Dec, 2014 17:48

Мне тогда придётся добавить список всех хоткеев, кроме хоткеев buffer.scroll -) А это поганый изврат, поскольку он будет создавать нагрузку и когда консоль не открыта (проверками - а открыта ли она).

User avatar
John Doe
Бюрократ
Posts: 11715
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 24 times
Been thanked: 123 times

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

Post by John Doe » Tue 23 Dec, 2014 18:39

Во-первых, никакой список не нужен.
Во-вторых, никакой нагрузки не будет.

User avatar
LanKing
Posts: 180
Joined: Thu 31 Aug, 2006 20:39

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

Post by LanKing » Tue 23 Dec, 2014 19:01

Поясните так, чтобы было понятно?

User avatar
John Doe
Бюрократ
Posts: 11715
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 24 times
Been thanked: 123 times

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

Post by John Doe » Tue 23 Dec, 2014 19:12

Например:

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

User avatar
LanKing
Posts: 180
Joined: Thu 31 Aug, 2006 20:39

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

Post by LanKing » Tue 23 Dec, 2014 19:13

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

User avatar
John Doe
Бюрократ
Posts: 11715
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 24 times
Been thanked: 123 times

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

Post by John Doe » Tue 23 Dec, 2014 19:19

И что?

Post Reply

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