Panel.CtrlQ.lua — широкая панель быстрого просмотра

Здесь обсуждается всё, что касается макросов.
User avatar
John Doe
Бюрократ
Posts: 13807
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 426 times
Contact:

Panel.CtrlQ.lua — широкая панель быстрого просмотра

Post by John Doe »

Обсуждаем штатный макрос Panel.CtrlQ.lua

Связанные темы:
User avatar
John Doe
Бюрократ
Posts: 13807
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 426 times
Contact:

Улучшение макросов из поставки фара

Post by John Doe »

Panel.CtrlQ.lua wrote:
  1. Macro {
  2.  
  3.   description="Toggle quick view panel";
  4.  
  5.   area="Shell"; key="CtrlQ";
  6.  
  7.   action=function()
  8.  
  9.     Keys"Tab"
  10.  
  11.     if Area.QView then
  12.  
  13.       Keys"Tab Ctrl2 Tab CtrlClear"
  14.  
  15.     else
  16.  
  17.       Keys"Tab Ctrl6 Tab"
  18.  
  19.       if APanel.Left then
  20.  
  21.         for ii=1,APanel.Width do Keys"CtrlRight" end
  22.  
  23.       else
  24.  
  25.         for ii=1,APanel.Width do Keys"CtrlLeft" end
  26.  
  27.       end
  28.  
  29.     end
  30.  
  31.     Keys"Tab CtrlQ"
  32.  
  33.   end;
  34.  
  35. }
У кого есть представление о функциях этого макроса?
Пробовал запускать на разных панелях, какая-то ерунда получается.

Update
Источник макроса:
Те не менее, макрос глючит.

Update 2
Одна из причин странного поведения макроса, это различие в режиме панели 6.
Макрос рассчитан на фиксированную ширину первой колонки Column widths: 12,0
Но сейчас в фаре по умолчанию другие значения Column widths: 40%,0
Как с этим разобраться - не знаю. По нормальному надо использовать свой режим, но его же ещё создать надо...

Плюс не обрабатывается закрытие по CtrlQ в Area.QView.
User avatar
John Doe
Бюрократ
Posts: 13807
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 426 times
Contact:

Улучшение макросов из поставки фара

Post by John Doe »

Вот так может выглядеть современный вариант:
  1. local DefaultMode = 2
  2.  
  3. local OneColumnMode = 10
  4.  
  5. local MinWidth = 15
  6.  
  7.  
  8.  
  9. local QVIEW = 2
  10.  
  11. local F = far.Flags
  12.  
  13. Macro {
  14.  
  15.   description="Toggle quick view panel";
  16.  
  17.   area="Shell"; key="CtrlQ";
  18.  
  19.   condition=function() return not APanel.Folder or PPanel.Type==QVIEW end; --http://bugs.farmanager.com/view.php?id=579
  20.  
  21.   action=function()
  22.  
  23.     if PPanel.Type==QVIEW then
  24.  
  25.       panel.SetViewMode (nil,1,DefaultMode)
  26.  
  27.       Keys"CtrlClear"
  28.  
  29.     else
  30.  
  31.       panel.SetViewMode (nil,1,OneColumnMode) --active
  32.  
  33.       local key = PPanel.Left and "CtrlRight" or "CtrlLeft"
  34.  
  35.       for i=1,APanel.Width-MinWidth do Keys(key) end
  36.  
  37.     end
  38.  
  39.     Keys"CtrlQ"
  40.  
  41.   end;
  42.  
  43. }
  44.  
  45.  
  46.  
  47. Macro {
  48.  
  49.   description="Toggle quick view panel";
  50.  
  51.   area="QView"; key="CtrlQ";
  52.  
  53.   action=function()
  54.  
  55.     panel.SetViewMode (nil,0,DefaultMode) --passive
  56.  
  57.     Keys"CtrlQ CtrlClear"
  58.  
  59.   end;
  60.  
  61. }
Тут предполагается, что первый пользовательский режим содержит такие настройки:
Column types:N
Column widths:0
Можно импортировать из

Не учитывается начальный режим панелей, и при закрытии всегда устанавливается 2.
User avatar
John Doe
Бюрократ
Posts: 13807
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 426 times
Contact:

Re: Улучшение макросов из поставки фара

Post by John Doe »

Временная панель открывается в режиме 4.
Вот так можно учесть умолчательный режим для отдельных плагинов:

В идеале конечно надо запоминать режим до его смены, но не вижу в АПИ способа как честно идентифицировать панели :(
User avatar
John Doe
Бюрократ
Posts: 13807
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 426 times
Contact:

Улучшение макросов из поставки фара

Post by John Doe »

John Doe wrote:Не учитывается начальный режим панелей, и при закрытии всегда устанавливается 2.
Теперь учитывается:
  1. local OneColumnMode = 10
  2.  
  3. local MinWidth = 15
  4.  
  5.  
  6.  
  7. local LastPanel = {}
  8.  
  9.  
  10.  
  11. local function restorePanels(n)
  12.  
  13.   local mode = LastPanel.OwnerGuid==panel.GetPanelInfo(nil,n).OwnerGuid and LastPanel.ViewMode
  14.  
  15.   if mode then panel.SetViewMode (nil,n,mode) end
  16.  
  17.   Keys"CtrlQ CtrlClear"
  18.  
  19. end
  20.  
  21.  
  22.  
  23. local QVIEW = 2
  24.  
  25. Macro {
  26.  
  27.   description="Toggle 'maximized' quick view panel";
  28.  
  29.   area="Shell"; key="CtrlQ";
  30.  
  31.   condition=function() --http://bugs.farmanager.com/view.php?id=2692
  32.  
  33.     if not APanel.Folder or PPanel.Type==QVIEW then return true end
  34.  
  35.     LastPanel = panel.GetPanelInfo(nil,1)
  36.  
  37.   end;
  38.  
  39.   action=function()
  40.  
  41.     if PPanel.Type==QVIEW then
  42.  
  43.       restorePanels(1) --active
  44.  
  45.     else
  46.  
  47.       LastPanel = panel.GetPanelInfo(nil,1)
  48.  
  49.       if not panel.SetViewMode (nil,1,OneColumnMode) then
  50.  
  51.         far.Message("'CtrlQ' macro requires custom view mode to be set","Error",nil,"w")
  52.  
  53.         LastPanel = {}
  54.  
  55.         return
  56.  
  57.       end
  58.  
  59.       Keys"CtrlQ"
  60.  
  61.       local key = PPanel.Left and "CtrlRight" or "CtrlLeft"
  62.  
  63.       for i=1,APanel.Width-MinWidth do Keys(key) end
  64.  
  65.     end
  66.  
  67.   end;
  68.  
  69. }
  70.  
  71.  
  72.  
  73. Macro {
  74.  
  75.   description="Toggle 'maximized' quick view panel";
  76.  
  77.   area="QView"; key="CtrlQ";
  78.  
  79.   action=function()
  80.  
  81.     restorePanels(0) --passive
  82.  
  83.   end;
  84.  
  85. }
Update
  1. -- This macro is intended to open QView panel with maximum width
  2.  
  3. -- narrowing filepanel to width of it's single column
  4.  
  5.  
  6.  
  7. -- IMPORTANT:
  8.  
  9. -- panel mode should be set to have first column width static
  10.  
  11. -- e.g. it's value can be '15', but not '0' and not '40%'
  12.  
  13.  
  14.  
  15. -- by default the macro uses panel mode 6 (Descriptions) so you should
  16.  
  17. -- open Options/File panel modes/Descriptions and fix the value manually
  18.  
  19.  
  20.  
  21. -- alternatively you can setup separate mode, and change constant
  22.  
  23. -- below to it's number
  24.  
  25.  
  26.  
  27. local OneColumnMode = 6 --Default: 6 (Descriptions)
  28.  
  29.  
  30.  
  31. local ffi = require"ffi"
  32.  
  33.  
  34.  
  35. local function Warning(str) far.Text(nil,nil,nil,str) end
  36.  
  37.  
  38.  
  39. local SavedViewMode = {}
  40.  
  41. local function saveViewMode(P)
  42.  
  43.   local pi = panel.GetPanelInfo(nil,P)
  44.  
  45.   local handleraw = pi.PluginHandle and pi.PluginHandle:rawhandle()
  46.  
  47.   SavedViewMode = {[handleraw or 0]=pi.ViewMode}
  48.  
  49. end
  50.  
  51. local function restoreViewMode(P)
  52.  
  53.   local pi = panel.GetPanelInfo(nil,P)
  54.  
  55.   local handleraw = pi.PluginHandle and pi.PluginHandle:rawhandle()
  56.  
  57.   local mode = SavedViewMode[handleraw or 0]
  58.  
  59.   if mode then panel.SetViewMode(nil,P,mode) end
  60.  
  61. end
  62.  
  63.  
  64.  
  65. local QVIEW,APANEL,PPANEL = 2,1,0
  66.  
  67. local function get1stColumnW()
  68.  
  69.   return panel.GetColumnWidths(nil,APANEL):match"%d+" + 2
  70.  
  71. end
  72.  
  73. Macro {
  74.  
  75.   description="Toggle 'maximized' quick view panel";
  76.  
  77.   area="Shell Search"; key="CtrlQ";
  78.  
  79.   condition=function()  -- prevent delay on folders, see M#2692 --http://bugs.farmanager.com/view.php?id=2692
  80.  
  81.     return not APanel.Folder or PPanel.Type==QVIEW
  82.  
  83.   end;
  84.  
  85.   action=function()
  86.  
  87.     Keys"CtrlQ"
  88.  
  89.     if PPanel.FilePanel then
  90.  
  91.       Keys"CtrlClear"
  92.  
  93.       restoreViewMode(APANEL)
  94.  
  95.     else
  96.  
  97.       saveViewMode(APANEL)
  98.  
  99.       if not panel.SetViewMode(nil,APANEL,OneColumnMode) then
  100.  
  101.         Warning("'CtrlQ' macro: unable to set view mode number "..OneColumnMode)
  102.  
  103.         return
  104.  
  105.       end
  106.  
  107.       local Width = get1stColumnW()
  108.  
  109.       local key = PPanel.Left and "CtrlRight" or "CtrlLeft"
  110.  
  111.       for i=1,APanel.Width-Width do Keys(key) end
  112.  
  113.       if Width~=get1stColumnW() then
  114.  
  115.         Warning"'CtrlQ' macro: set first column width to fixed value!"
  116.  
  117.       end
  118.  
  119.     end
  120.  
  121.   end;
  122.  
  123. }
  124.  
  125.  
  126.  
  127. Macro {
  128.  
  129.   description="Toggle 'maximized' quick view panel";
  130.  
  131.   area="QView"; key="CtrlQ";
  132.  
  133.   action=function()
  134.  
  135.     Keys"CtrlQ"
  136.  
  137.     if PPanel.FilePanel then
  138.  
  139.       Keys"CtrlClear"
  140.  
  141.       restoreViewMode(PPANEL)
  142.  
  143.     end
  144.  
  145.   end;
  146.  
  147. }
Last edited by John Doe on Mon 10 Sep, 2018 07:36, edited 1 time in total.
Shmuel
Posts: 6820
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 528 times

Re: Улучшение макросов из поставки фара

Post by Shmuel »

А что это за переменная загадочная QVIEW - она нигде не инициализируется.
User avatar
John Doe
Бюрократ
Posts: 13807
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 426 times
Contact:

Re: Улучшение макросов из поставки фара

Post by John Doe »

local QVIEW = 2
Константа для макроязыка, тип панели "быстрый просмотр"
Случайно удалил, уже исправлено.
User avatar
John Doe
Бюрократ
Posts: 13807
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 426 times
Contact:

Re: Улучшение макросов из поставки фара

Post by John Doe »

Заметил, что макрос ощутимо тормозит в случае если на пассивной панели много файлов.
Исправил, теперь сначала включается QView, а потом только меняется ширина панели.
User avatar
Wave
Posts: 1885
Joined: Thu 04 Aug, 2005 18:47
Has thanked: 14 times
Been thanked: 26 times

Re: Улучшение макросов из поставки фара

Post by Wave »

А обязательно для QVIEW сначала настройки какие-то вносить? Интересней был бы более универсальный вариант. А то получаю 'CtrlQ' macro requires custom view mode to be set и хошь-нехошь вынужден разбираться с тем, что эти режимы дают и как и зачем их менять.
Пользуюсь ФАРом больше 20 лет © собирательный.
User avatar
John Doe
Бюрократ
Posts: 13807
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 426 times
Contact:

Re: Улучшение макросов из поставки фара

Post by John Doe »

Wave wrote:А обязательно для QVIEW сначала настройки какие-то вносить?
Фар предоставляет апи только для переключения, а изменять или создавать приходится пользователю. Можно импортом: http://forum.farmanager.com/viewtopic.p ... 57#p119457
Или макросом из командной строки:
lua:Keys"F9 O m Ins" print"~QView~" Keys"CtrlEnter Esc"

Теоретически эту последовательность можно внести в сам макрос, но это тоже не очень хорошо: что если 2 макроса захотят воспользоваться первым пользовательским режимом?
User avatar
Wave
Posts: 1885
Joined: Thu 04 Aug, 2005 18:47
Has thanked: 14 times
Been thanked: 26 times

Re: Улучшение макросов из поставки фара

Post by Wave »

Пара мелочей:
В конфиге для импорта name ~QView
В вышеуказанном макросе (который работает для английского интерфейса) ~QView~
(я как-то не понял, имеет ли имя значение, и почему режим задан числом 10)

В целом — создаётся пользовательский режим (разово), а при выполнении макрос переключает в него, делает что угодно с панелями (или там уже всё сделано?), а потом возвращает в тот режим что был (у меня второй), так?
Пользуюсь ФАРом больше 20 лет © собирательный.
User avatar
John Doe
Бюрократ
Posts: 13807
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 426 times
Contact:

Re: Улучшение макросов из поставки фара

Post by John Doe »

Wave wrote:(я как-то не понял, имеет ли имя значение, и почему режим задан числом 10)
Имя значения не имеет (ненадёжно, но что поделаешь), 10 это первый пользовательский режим (встроенные нумеруются 0-9).
Wave wrote:при выполнении макрос [...] делает что угодно с панелями
Цель макроса: максимально увеличить панель быстрого просмотра.
Отдельный режим используется для того, чтобы файловую панель можно было красиво уменьшить до одного столбца.
User avatar
Wave
Posts: 1885
Joined: Thu 04 Aug, 2005 18:47
Has thanked: 14 times
Been thanked: 26 times

Re: Улучшение макросов из поставки фара

Post by Wave »

А, один столбик, теперь допёрло, зачем нужен отдельный режим. Спасибо за пояснения.
Пользуюсь ФАРом больше 20 лет © собирательный.
kozyavkin
Posts: 13
Joined: Thu 25 Feb, 2010 12:08

Re: Panel.CtrlQ.lua — широкая панель быстрого просмотра

Post by kozyavkin »

Сложно. Но разобрался.
Закрытие QView во время использования макроса просмотра картинок http://forum.farmanager.com/viewtopic.p ... 8&start=32 так и не возвращает предыдущее состояние панели на место.
Пока отказался от использования расширения области.
Post Reply

Return to “Обсуждение макросов”