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

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

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

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

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

Прежде всего напомню стандартные клавиатурные комбинации для "перемотки" по консольному буферу (в хелпе до сих пор не описаны):
Ctrl-Alt- <Up/Down> — построчно
Ctrl-Alt- <PgUp/PgDn> — постранично
Ctrl-Alt- <Номе/End> — к началу/концу

Предлагаемый набор макросов вносит следующие улучшения:
  • При скроллинге автоматически скрываются панели: .
  • CtrlUp/Down прокручивает буфер к месту запуска предыдущей/следующей команды (при скрытых панелях) .
  • Есть возможность перемещаться по буферу с помощью простых курсорных клавиш (без модификаторов Ctrl-Alt-).
    Для этого достаточно скрыть панели (при пустой командной строке).
  • В редакторе и вьювере тоже иногда требуется работать с "подпанельной" частью буфера.
    После нажатия CtrlO теперь возможно прокручивать буфер (можно без Ctrl-Alt-).
  • Экспериментально: CtrlO теперь работает везде, а не только в панелях/редакторе/вьювере.
    (Курсорные клавиши точно так же служат для прокрутки буфера).
  • С помощью клавиши Esc можно в любой момент вернутся из любого места буфера в окно Far.
  • Прочие улучшения:
    — Стандартные сочетания не действуют с клавишами NumPad, макросы это исправляют.
    — Стандартные сочетания работают везде, кроме редактора, где они заняты. В наборе присутствует макрос, позволяющий активировать эти клавиши и в редакторе (по умолчанию отключен).
Attachments
BufferScroll.lua.7z
(2.38 KiB) Downloaded 97 times

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

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

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



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

Есть и другой вариант решения: использовать консольный "граббер", позволяющий выделить прямоугольный блок мышью.
(Меню окна консоли / Изменить / Пометить).

Каждый раз лазить по менюшкам не очень удобно. В свойствах консоли есть опция, позволяющая всегда использовать мышь для выделения, но к сожалению в настоящий момент Far активно выключает этот режим (на мантисе есть предложение по улучшению: 0002648).

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

Обновление

Post by John Doe » Thu 16 Oct, 2014 11:25

  • Скроллинг курсорными клавишами теперь работают и в т.н. Desktop.
  • Внутренние изменения (задействованы новые возможности фара)

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

Quick fix

Post by John Doe » Thu 16 Oct, 2014 15:41

Прошу прощения, ещё одна правка.
Выяснилось, что ACTL_GETWINDOWTYPE в граббере почему-то не работает, в отличии от ACTL_GETWINDOWINFO...

topmo3
Posts: 116
Joined: Mon 21 Aug, 2006 15:36
Has thanked: 1 time
Been thanked: 2 times

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

Post by topmo3 » Mon 20 Oct, 2014 08:21

а не подскажете, возможно ли создать макрос, переключающий скролирование кнопкой ScrollLock, и в каком примерно направлении двигаться при создании?
Идея такова, чтобы при нажатии ScrollLock включался режим скролинга, когда просто стрелками и PgUp/Dn можно просматривать буфер.
Устанавливать какую-то глобальную переменную, и в зависимости от неё переопределять CrlShiftСтрелки?

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

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

Post by John Doe » Mon 20 Oct, 2014 08:42

Можно и так, но если нажимать ScrollLock не в окне фара, то ваш скрипт об этом не узнает, и может "рассинхронизироваться" с реальным состоянием скроллока (не думаю, врочем, что это проблема).

Альтернативно, можно использовать функцию наподобие этой:

Code: Select all

local function LockState(xLock,State) --set State: 0|1|2=toggle
                                      --get State: nil|-1
  local Lock = {Num=0, Caps=1, Scroll=2}
  local modeIsOn,keyIsPressed = 1,0xff80
  if State then win.Sleep(80) else State=-1 end
  local r = mf.flock(assert(Lock[xLock]),State)
  return band(r,modeIsOn)==modeIsOn,
         band(r,keyIsPressed)==keyIsPressed
end

fml2
Posts: 490
Joined: Mon 09 Jul, 2012 22:10
Has thanked: 1 time
Been thanked: 5 times

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

Post by fml2 » Mon 20 Oct, 2014 09:38

У меня Фар 4149 x86. Скачал скрипт, распаковал и поместил в каталог %farprofile%\Macros\scripts. Перезапустил Фар. Но макроса как-то не чувствуется. Запустил MacroBrowser -- вашего макро в списке нет.

Что я делаю не так?

И еще небольшое предложение: в шапке написано "CtrlUp/Down прокручивает буфер в место запуска предыдущей/следующей команды...". Я сначала споткнулся при чтении -- подумал, что слово "вместо" написано раздельно (и удивился: врпде ведь CtrlUp не запускало раньше предыдущую команду). А потом понял, в чем дело. Не лучше ли было бы написать "к месту" вместо "в место"?

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

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

Post by John Doe » Mon 20 Oct, 2014 09:58

>Что я делаю не так?
Фар должен быть запущен в режиме большого буфера консоли.

fml2
Posts: 490
Joined: Mon 09 Jul, 2012 22:10
Has thanked: 1 time
Been thanked: 5 times

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

Post by fml2 » Mon 20 Oct, 2014 10:24

Пардон, забыл сказать, что Фар у меня запускается с ключом /w, т.е. я "грамотно" пользуюсь этой функцией. Именно поэтому и обрадовался вашему макросу.

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

Обновление

Post by John Doe » Mon 20 Oct, 2014 11:10

Исправления
* Скрипт пытался детектировать режим большого буфера по параметру System.WindowMode, и не работал при запуске фара с ключом /w
* Неверно определялась высота окна

fml2
Posts: 490
Joined: Mon 09 Jul, 2012 22:10
Has thanked: 1 time
Been thanked: 5 times

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

Post by fml2 » Mon 20 Oct, 2014 11:19

Заработало! Спасибо!

Еще один вопросик: при включенных панелях первое нажатие Ctrl+Alt+Up гасит панели, но не прокручивает буфер. Это так и задумано? И наоборот: при возврате в исходное положение последнее нажатие Ctrl+Alt+Down лишь показывает панели. Не было ли бы правильным начинать прокрутку сразу, т.е. чтобы было так, что первое нажатие Ctrl+Alt+Up гасит панели и прокручивает на одну строку?

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

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

Post by John Doe » Mon 20 Oct, 2014 11:59

>гасит панели, но не прокручивает буфер. Это так и задумано?
Да, именно так.
Ведь аналогичным образом работают не только Up/Down, но и остальные клавиши.

Если сделать по-вашему, то нажав CtrlAltPgUp я не увижу вывод под панелями фара.

fml2
Posts: 490
Joined: Mon 09 Jul, 2012 22:10
Has thanked: 1 time
Been thanked: 5 times

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

Post by fml2 » Mon 20 Oct, 2014 18:55

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

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

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

Post by John Doe » Mon 20 Oct, 2014 19:02

Всё изложено во втором посте.

fml2
Posts: 490
Joined: Mon 09 Jul, 2012 22:10
Has thanked: 1 time
Been thanked: 5 times

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

Post by fml2 » Mon 20 Oct, 2014 19:45

и врядли к этому вернусь
А жаль. С тех пор ничего в ваших планах не изменилось (это ж давно было написано)?

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

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

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

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

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

Post Reply

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

Who is online

Users browsing this forum: No registered users and 3 guests