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

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

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

Post by John Doe » Tue 03 Jun, 2014 12:25

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

Связанные темы:

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

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

Post by John Doe » Wed 04 Jun, 2014 11:02

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

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

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

Плюс не обрабатывается закрытие по CtrlQ в Area.QView.

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

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

Post by John Doe » Wed 04 Jun, 2014 13:10

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

Не учитывается начальный режим панелей, и при закрытии всегда устанавливается 2.

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

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

Post by John Doe » Wed 04 Jun, 2014 13:33

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

В идеале конечно надо запоминать режим до его смены, но не вижу в АПИ способа как честно идентифицировать панели :(

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

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

Post by John Doe » Wed 04 Jun, 2014 20:46

John Doe wrote:Не учитывается начальный режим панелей, и при закрытии всегда устанавливается 2.
Теперь учитывается:
  1. local OneColumnMode = 10
  2. local MinWidth = 15
  3.  
  4. local LastPanel = {}
  5.  
  6. local function restorePanels(n)
  7.   local mode = LastPanel.OwnerGuid==panel.GetPanelInfo(nil,n).OwnerGuid and LastPanel.ViewMode
  8.   if mode then panel.SetViewMode (nil,n,mode) end
  9.   Keys"CtrlQ CtrlClear"
  10. end
  11.  
  12. local QVIEW = 2
  13. Macro {
  14.   description="Toggle 'maximized' quick view panel";
  15.   area="Shell"; key="CtrlQ";
  16.   condition=function() --http://bugs.farmanager.com/view.php?id=2692
  17.     if not APanel.Folder or PPanel.Type==QVIEW then return true end
  18.     LastPanel = panel.GetPanelInfo(nil,1)
  19.   end;
  20.   action=function()
  21.     if PPanel.Type==QVIEW then
  22.       restorePanels(1) --active
  23.     else
  24.       LastPanel = panel.GetPanelInfo(nil,1)
  25.       if not panel.SetViewMode (nil,1,OneColumnMode) then
  26.         far.Message("'CtrlQ' macro requires custom view mode to be set","Error",nil,"w")
  27.         LastPanel = {}
  28.         return
  29.       end
  30.       Keys"CtrlQ"
  31.       local key = PPanel.Left and "CtrlRight" or "CtrlLeft"
  32.       for i=1,APanel.Width-MinWidth do Keys(key) end
  33.     end
  34.   end;
  35. }
  36.  
  37. Macro {
  38.   description="Toggle 'maximized' quick view panel";
  39.   area="QView"; key="CtrlQ";
  40.   action=function()
  41.     restorePanels(0) --passive
  42.   end;
  43. }
Update
  1. -- This macro is intended to open QView panel with maximum width
  2. -- narrowing filepanel to width of it's single column
  3.  
  4. -- IMPORTANT:
  5. -- panel mode should be set to have first column width static
  6. -- e.g. it's value can be '15', but not '0' and not '40%'
  7.  
  8. -- by default the macro uses panel mode 6 (Descriptions) so you should
  9. -- open Options/File panel modes/Descriptions and fix the value manually
  10.  
  11. -- alternatively you can setup separate mode, and change constant
  12. -- below to it's number
  13.  
  14. local OneColumnMode = 6 --Default: 6 (Descriptions)
  15.  
  16. local ffi = require"ffi"
  17.  
  18. local function Warning(str) far.Text(nil,nil,nil,str) end
  19.  
  20. local SavedViewMode = {}
  21. local function saveViewMode(P)
  22.   local pi = panel.GetPanelInfo(nil,P)
  23.   local handleraw = pi.PluginHandle and pi.PluginHandle:rawhandle()
  24.   SavedViewMode = {[handleraw or 0]=pi.ViewMode}
  25. end
  26. local function restoreViewMode(P)
  27.   local pi = panel.GetPanelInfo(nil,P)
  28.   local handleraw = pi.PluginHandle and pi.PluginHandle:rawhandle()
  29.   local mode = SavedViewMode[handleraw or 0]
  30.   if mode then panel.SetViewMode(nil,P,mode) end
  31. end
  32.  
  33. local QVIEW,APANEL,PPANEL = 2,1,0
  34. local function get1stColumnW()
  35.   return panel.GetColumnWidths(nil,APANEL):match"%d+" + 2
  36. end
  37. Macro {
  38.   description="Toggle 'maximized' quick view panel";
  39.   area="Shell Search"; key="CtrlQ";
  40.   condition=function()  -- prevent delay on folders, see M#2692 --http://bugs.farmanager.com/view.php?id=2692
  41.     return not APanel.Folder or PPanel.Type==QVIEW
  42.   end;
  43.   action=function()
  44.     Keys"CtrlQ"
  45.     if PPanel.FilePanel then
  46.       Keys"CtrlClear"
  47.       restoreViewMode(APANEL)
  48.     else
  49.       saveViewMode(APANEL)
  50.       if not panel.SetViewMode(nil,APANEL,OneColumnMode) then
  51.         Warning("'CtrlQ' macro: unable to set view mode number "..OneColumnMode)
  52.         return
  53.       end
  54.       local Width = get1stColumnW()
  55.       local key = PPanel.Left and "CtrlRight" or "CtrlLeft"
  56.       for i=1,APanel.Width-Width do Keys(key) end
  57.       if Width~=get1stColumnW() then
  58.         Warning"'CtrlQ' macro: set first column width to fixed value!"
  59.       end
  60.     end
  61.   end;
  62. }
  63.  
  64. Macro {
  65.   description="Toggle 'maximized' quick view panel";
  66.   area="QView"; key="CtrlQ";
  67.   action=function()
  68.     Keys"CtrlQ"
  69.     if PPanel.FilePanel then
  70.       Keys"CtrlClear"
  71.       restoreViewMode(PPANEL)
  72.     end
  73.   end;
  74. }
Last edited by John Doe on Mon 10 Sep, 2018 07:36, edited 1 time in total.

Shmuel
Posts: 5698
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 21 times
Been thanked: 200 times

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

Post by Shmuel » Wed 04 Jun, 2014 20:55

А что это за переменная загадочная QVIEW - она нигде не инициализируется.

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

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

Post by John Doe » Wed 04 Jun, 2014 21:02

local QVIEW = 2
Константа для макроязыка, тип панели "быстрый просмотр"
Случайно удалил, уже исправлено.

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

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

Post by John Doe » Thu 05 Jun, 2014 08:23

Заметил, что макрос ощутимо тормозит в случае если на пассивной панели много файлов.
Исправил, теперь сначала включается QView, а потом только меняется ширина панели.

User avatar
Wave
Posts: 1762
Joined: Thu 04 Aug, 2005 18:47
Has thanked: 4 times
Been thanked: 15 times

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

Post by Wave » Wed 11 Jun, 2014 10:59

А обязательно для QVIEW сначала настройки какие-то вносить? Интересней был бы более универсальный вариант. А то получаю 'CtrlQ' macro requires custom view mode to be set и хошь-нехошь вынужден разбираться с тем, что эти режимы дают и как и зачем их менять.
Пользуюсь ФАРом больше 20 лет © собирательный.

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

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

Post by John Doe » Wed 11 Jun, 2014 11:07

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: 1762
Joined: Thu 04 Aug, 2005 18:47
Has thanked: 4 times
Been thanked: 15 times

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

Post by Wave » Wed 11 Jun, 2014 11:48

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

В целом — создаётся пользовательский режим (разово), а при выполнении макрос переключает в него, делает что угодно с панелями (или там уже всё сделано?), а потом возвращает в тот режим что был (у меня второй), так?
Пользуюсь ФАРом больше 20 лет © собирательный.

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

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

Post by John Doe » Wed 11 Jun, 2014 11:58

Wave wrote:(я как-то не понял, имеет ли имя значение, и почему режим задан числом 10)
Имя значения не имеет (ненадёжно, но что поделаешь), 10 это первый пользовательский режим (встроенные нумеруются 0-9).
Wave wrote:при выполнении макрос [...] делает что угодно с панелями
Цель макроса: максимально увеличить панель быстрого просмотра.
Отдельный режим используется для того, чтобы файловую панель можно было красиво уменьшить до одного столбца.

User avatar
Wave
Posts: 1762
Joined: Thu 04 Aug, 2005 18:47
Has thanked: 4 times
Been thanked: 15 times

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

Post by Wave » Wed 11 Jun, 2014 12:15

А, один столбик, теперь допёрло, зачем нужен отдельный режим. Спасибо за пояснения.
Пользуюсь ФАРом больше 20 лет © собирательный.

kozyavkin
Posts: 13
Joined: Thu 25 Feb, 2010 12:08

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

Post by kozyavkin » Mon 15 Sep, 2014 11:23

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


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

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

Post by John Doe » Mon 15 Sep, 2014 15:00

Чтобы работало - попросите автора picture.lua исправить строку 323 на

Code: Select all

mf.postmacro(function() Keys"Esc" if eval(key,2)==-2 then Keys(key) end end)
И ещё один момент: picture.lua срабатывает во время исполнения макропоследовательности, раздвигающей панель.
Это тоже скорее всего стоит исправлять там.
(Можно и в Panel.CtrlQ.lua, но в результате при большом количестве файлов на панели появится задержка)

Post Reply

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