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

Здесь выкладываются готовые к использованию макросы и скрипты.
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.
2useven10
Posts: 5192
Joined: Mon 07 Sep, 2009 10:40
Has thanked: 18 times
Been thanked: 309 times

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

Post by 2useven10 »

Latest post of the previous page:

LAT wrote: Wed 19 Sep, 2018 15:30 Если задать System.WindowMode.StickyY = false (чтобы не отображалась вертикальная панель прокрутки)
С false как раз полоса прокрутки должна отображаться.
LAT
Posts: 343
Joined: Thu 21 Jan, 2010 20:00
Has thanked: 22 times
Been thanked: 39 times

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

Post by LAT »

Вы правы, перепутал. Исправил в своих предыдущих постах.
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 »

LAT wrote: Wed 19 Sep, 2018 15:30 Если задать System.WindowMode.StickyY = true (чтобы не отображалась вертикальная панель прокрутки)
Если я правильно понял, то таким образом вы управляете не полосой прокрутки, а именно высотой буфера, делая её равной высоте окна.
Соответственно макрос становится просто не нужен.
LAT
Posts: 343
Joined: Thu 21 Jan, 2010 20:00
Has thanked: 22 times
Been thanked: 39 times

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

Post by LAT »

John Doe wrote: Thu 20 Sep, 2018 07:14
LAT wrote: Wed 19 Sep, 2018 15:30 Если задать System.WindowMode.StickyY = true (чтобы не отображалась вертикальная панель прокрутки)
Если я правильно понял, то таким образом вы управляете не полосой прокрутки, а именно высотой буфера, делая её равной высоте окна.
Соответственно макрос становится просто не нужен.
Получается, [с точки зрения пользователя] установка "System.WindowMode.StickyY = true" равносильна "System.WindowMode = false", т.е. эта отмена работы с большим буфером консоли, только другим способом?
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
John Doe
Бюрократ
Posts: 13801
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 72 times
Been thanked: 425 times
Contact:

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

Post by John Doe »

v0.7
  • Действие Ctrl+O также сопровождается возвратом к фару.
  • Горизонтальная прокрутка клавишами Left/Right
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 »

John Doe wrote: Wed 23 Jan, 2019 09:57 Действие Ctrl+O также сопровождается возвратом к фару.
Возможно стоит задать целый список клавиш, при нажатии которых ожидается переход к окну фара.

И есть у меня один макрос, который я тоже подумываю включить в этот набор.
Last edited by John Doe on Wed 23 Jan, 2019 10:33, edited 1 time in total.
User avatar
DrKnS
Posts: 6114
Joined: Thu 04 Aug, 2005 06:44
Location: Kyiv
Has thanked: 12 times
Been thanked: 426 times

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

Post by DrKnS »

John Doe wrote: Wed 23 Jan, 2019 10:06 Данный макрос позволяет в обоиих случаях использовать одну и ту же клавишу Enter.
Alt+Ins, F1?
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
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

local F = far.Flags
Event { description="Buffer: scroll to Far on dialogs got/killfocus";
  group="DialogEvent";
  id="68145E14-E0E9-4303-B7B2-A4CCC0364301";
  action=function(Event,Param)
    if Event==F.DE_DLGPROCINIT then
      local Msg = Param.Msg
      if Msg==F.DN_GOTFOCUS or Msg==F.DN_KILLFOCUS or Msg==F.DN_HELP then
        scrollToFar()
      elseif Msg==F.DN_CLOSE then
        return scrollToFar() and 0
      end
    end
  end;
}
Возвращает к фару при открытии диалогов, предотвращает закрытие.
gotar
Posts: 412
Joined: Sun 06 Sep, 2009 12:34
Has thanked: 17 times
Been thanked: 3 times

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

Post by gotar »

Выдрал из макроса установку высоты консоли. Может кому приходится

Code: Select all

local ffi = require"ffi"
local C = ffi.C

height=3600

ffi.cdef[[
//https://docs.microsoft.com/en-us/windows/console/setconsolescreenbuffersize
BOOL SetConsoleScreenBufferSize(//WINAPI
  HANDLE hConsoleOutput,      //_In_
  COORD  dwSize               //_In_
);
//https://docs.microsoft.com/en-us/windows/console/getstdhandle
HANDLE GetStdHandle(           //WINAPI
  DWORD nStdHandle             //_In_
);
]]
local STD_OUTPUT_HANDLE = ffi.new("DWORD",-11)

local hConsoleOutput = C.GetStdHandle(STD_OUTPUT_HANDLE)
local dwSize = ffi.new("COORD",win.GetConsoleScreenBufferInfo().SizeX,height)
panel.GetUserScreen()
C.SetConsoleScreenBufferSize(hConsoleOutput,dwSize)
panel.SetUserScreen()
Last edited by gotar on Thu 14 Oct, 2021 12:31, edited 2 times in total.
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 »

CtrlShiftE (при погашенных панелях): поместить в командную строку нижнюю строку из буфера экрана:

CtrlShiftE: поместить в командную строку предыдущую строку из буфера экрана:
https://t.me/FarManager — Telegram чат
User avatar
HaRT
Moderator
Posts: 10806
Joined: Tue 30 Aug, 2005 17:21
Has thanked: 220 times
Been thanked: 357 times

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

Post by HaRT »

John Doe wrote: Tue 04 Apr, 2023 22:41 поместить в командную строку нижнюю строку из буфера экрана
[…]
поместить в командную строку предыдущую строку из буфера экрана
А можно практический пример, когда это полезно? А то вдруг мне нужно, а я и не знаю… :)
Фар есть инструмент, а не нянька. © 2009 DrKnS
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 »

Это нужно для того чтобы получить в командной строке вывод запущенной ранее команды.
По типу where somefile.
https://t.me/FarManager — Telegram чат
User avatar
HaRT
Moderator
Posts: 10806
Joined: Tue 30 Aug, 2005 17:21
Has thanked: 220 times
Been thanked: 357 times

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

Post by HaRT »

John Doe wrote: Wed 05 Apr, 2023 06:27 получить в командной строке вывод запущенной ранее команды
Удобно, спасибо!
А я прежде для решения подобной задачи пользовался, каюсь, мышкой и скриптами: авто-захватом и «сносом» по СКМ.
Last edited by HaRT on Thu 06 Apr, 2023 12:35, edited 1 time in total.
Reason: Код скрипта перенесён в другую Тему, [spoiler] заменён ссылкой.
Фар есть инструмент, а не нянька. © 2009 DrKnS
gotar
Posts: 412
Joined: Sun 06 Sep, 2009 12:34
Has thanked: 17 times
Been thanked: 3 times

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

Post by gotar »

@John Doe Был бы рад увидеть Ваши макросы для F3/F4 по типу far2l
Last edited by gotar on Mon 21 Aug, 2023 16:58, edited 1 time in total.
Post Reply

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