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

Здесь выкладываются готовые к использованию макросы и скрипты.
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.
fml2
Posts: 534
Joined: Mon 09 Jul, 2012 22:10
Has thanked: 2 times
Been thanked: 8 times

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

Post by fml2 »

Latest post of the previous page:

и врядли к этому вернусь
А жаль. С тех пор ничего в ваших планах не изменилось (это ж давно было написано)?
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 »

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

P.S.
Альтернативно, возможно стоило бы адаптировать вот этот готовый плагинчик: http://forum.farmanager.com/viewtopic.php?p=1046
(Сейчас в режиме /w он работает совсем некорректно)
User avatar
LanKing
Posts: 180
Joined: Thu 31 Aug, 2006 20:39
Been thanked: 2 times

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

Post by LanKing »

John Doe wrote: Прежде всего напомню стандартные клавиатурные комбинации для "перемотки" по консольному буферу (в хелпе до сих пор не описаны):
Ctrl-Alt- <Up/Down> — построчно
Ctrl-Alt- <PgUp/PgDn> — постранично
Ctrl-Alt- <Номе/End> — к началу/концу
Подскажите, что я делаю не так? Говорю dir, получаю листинг за пределами окна. Пробую CtrlAltUp - не скроллит. Макрос ещё не ставил.
User avatar
HaRT
Moderator
Posts: 10806
Joined: Tue 30 Aug, 2005 17:21
Has thanked: 220 times
Been thanked: 357 times

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

Post by HaRT »

LanKing, Far запущен с ключом /w?
Фар есть инструмент, а не нянька. © 2009 DrKnS
User avatar
LanKing
Posts: 180
Joined: Thu 31 Aug, 2006 20:39
Been thanked: 2 times

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

Post by LanKing »

Нет, но far:config (System.WindowMode = true).
User avatar
LanKing
Posts: 180
Joined: Thu 31 Aug, 2006 20:39
Been thanked: 2 times

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

Post by LanKing »

Разобрался, я ошибся. Спасибо! )
User avatar
LanKing
Posts: 180
Joined: Thu 31 Aug, 2006 20:39
Been thanked: 2 times

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

Post by LanKing »

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

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


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




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


P.S. Спасибо за отличный макрос!
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 »

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

А так можно ещё и другие функции подёргать, например F1.
User avatar
LanKing
Posts: 180
Joined: Thu 31 Aug, 2006 20:39
Been thanked: 2 times

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

Post by LanKing »

Логично :) А не существует условия "anykey" в макросах?
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 »

Code: Select all

key="/.*/"
User avatar
LanKing
Posts: 180
Joined: Thu 31 Aug, 2006 20:39
Been thanked: 2 times

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

Post by LanKing »

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

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

При желании вы можете добавить в набор и другой макрос, чтобы при нажатии любой посторонней комбинации консоль прокручивалась к окну фара.
Только зачем.
User avatar
LanKing
Posts: 180
Joined: Thu 31 Aug, 2006 20:39
Been thanked: 2 times

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

Post by LanKing »

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

Во-первых, никакой список не нужен.
Во-вторых, никакой нагрузки не будет.
User avatar
LanKing
Posts: 180
Joined: Thu 31 Aug, 2006 20:39
Been thanked: 2 times

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

Post by LanKing »

Поясните так, чтобы было понятно?
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 »

Например:

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

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