Panel.CtrlShiftBackSlash.lua — открыть тот же каталог

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

Re: Panel.CtrlShiftBackSlash.lua

Post by John Doe »

Latest post of the previous page:

Я чего-то наверно не понимаю
Вот сабжевый макрос: http://farmanager.com/svn/trunk/addons/ ... kSlash.lua
Явно сработает CtrlShiftBackSlash
Что значит правильное имя, или неправильное имя?
Denis
Posts: 1444
Joined: Tue 05 Apr, 2005 18:12
Has thanked: 10 times
Been thanked: 5 times

Re: Panel.CtrlShiftBackSlash.lua

Post by Denis »

У меня не срабатывает на CtrlShiftBackSlash, а вот на CtrlShiftBS срабатывает.
Denis
Posts: 1444
Joined: Tue 05 Apr, 2005 18:12
Has thanked: 10 times
Been thanked: 5 times

Re: Panel.CtrlShiftBackSlash.lua

Post by Denis »

Всё, понял, это разные комбинации :)
Тогда из доп. удобств - выбор того же файла, что и на активной панели.
Дмитрий Журко
Posts: 81
Joined: Tue 19 Jan, 2021 21:49
Has thanked: 25 times
Been thanked: 1 time

Panel.CtrlShiftBackSlash.lua — открыть тот же каталог

Post by Дмитрий Журко »

Моя попытка сделать правильно:

Code: Select all

-- Устанавливает папку неактивной панели как у активной.

local msg = { { 'same folder nearby' }, Russian = { 'та же папка рядом' }, }
local language = Far.GetConfig('Language.Help'); msg = msg[language] and msg[language] or msg[1] -- Язык определяется однажды при загрузке макроса.

Macro { key = 'Alt='; area = 'Shell'; description = msg[1]; action = function()
		if not APanel.Visible or APanel.Current:len() <= 0 then return end
		local path, fn = far.ConvertPath(APanel.Current):match('^(.*[/\\])([^/\\]*)$')
		Panel.SetPath(1, path, fn)
		if not PPanel.Visible then Keys('CtrlQ') end -- Не знаешь что делать с панелью? Жми Ctl+Q, пока не заработает!
		for _ = 1, 2 do if not PPanel.FilePanel then Keys('CtrlQ') end end
	end
}
User avatar
John Doe
Бюрократ
Posts: 13807
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 426 times
Contact:

Panel.CtrlShiftBackSlash.lua — открыть тот же каталог

Post by John Doe »

Дмитрий Журко wrote: Mon 08 Feb, 2021 21:57 Моя попытка сделать правильно:
Опишите преимущества вашего макроса перед вот этим тупым: viewtopic.php?p=106183#p106183
https://t.me/FarManager — Telegram чат
User avatar
buniak_a_h
Posts: 4236
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 643 times
Contact:

Panel.CtrlShiftBackSlash.lua — открыть тот же каталог

Post by buniak_a_h »

По-моему, самый правильный подход - это так: (можно ввести в командной строке):
lua:panel.SetPanelDirectory(nil, 0, panel.GetPanelDirectory(nil,1))
Преимущества: открывается даже папка плагина (например, внутри архива). И не надо заморачиваться ни о видимости панели, ни о полном пути …
Для удобства можно забить в UserMenu.
Дополнительно: если надо ещё и позиционироваться на том же элементе, то добавляете строку:
Panel.SetPos(1, APanel.Current)
Ну, или в одной строке:
lua:panel.SetPanelDirectory(nil, 0, panel.GetPanelDirectory(nil,1)); Panel.SetPos(1, APanel.Current)
Last edited by buniak_a_h on Tue 09 Feb, 2021 12:50, edited 2 times in total.
User avatar
HaRT
Moderator
Posts: 10823
Joined: Tue 30 Aug, 2005 17:21
Has thanked: 221 times
Been thanked: 358 times

Panel.CtrlShiftBackSlash.lua — открыть тот же каталог

Post by HaRT »

buniak_a_h wrote: Tue 09 Feb, 2021 12:44 если надо ещё и позиционироваться на том же элементе, то добавляете строку:
Panel.SetPos(1, APanel.Current)
Ну, или в одной строке:
lua:panel.SetPanelDirectory(nil, 0, panel.GetPanelDirectory(nil,1)); Panel.SetPos(1, APanel.Current)
Сработает ли это ожидаемым образом, если перед этим на пассивной панели другая сортировка?
Фар есть инструмент, а не нянька. © 2009 DrKnS
User avatar
buniak_a_h
Posts: 4236
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 643 times
Contact:

Panel.CtrlShiftBackSlash.lua — открыть тот же каталог

Post by buniak_a_h »

HaRT wrote: Tue 09 Feb, 2021 13:09 Сработает ли это ожидаемым образом, если перед этим на пассивной панели другая сортировка?
Да, конечно. Там же не SetPosIdx, там позиционирование по имени.
Вот если на пассивной панели установлен фильтр, в результате которого целевой файл не виден - тогда, конечно, нет.
Last edited by buniak_a_h on Tue 09 Feb, 2021 13:16, edited 1 time in total.
shpeka
Posts: 51
Joined: Tue 03 Jul, 2007 15:46
Has thanked: 1 time

Panel.CtrlShiftBackSlash.lua — открыть тот же каталог

Post by shpeka »

Добрый день.

Возможно добавить функционал замены папок активной/пассивной панелей местами? Или подобный функционал должен быть реализован где-то в другом месте?
О "Поменять панели" (Ctrl+U) знаю, функционал интересен, когда на разных панелях установлены разные режимы.
User avatar
buniak_a_h
Posts: 4236
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 643 times
Contact:

Panel.CtrlShiftBackSlash.lua — открыть тот же каталог

Post by buniak_a_h »

Правильно ли я понял:
на двух панелях разные режимы (сортировки, фильтры и т.д.) и разные папки открыты. Вы хотите поменять местами отображаемые папки, при этом режимы оставить без изменения. Так? Если да, то такой скрипт решит Ваши проблемы:
  1. local a1,f1,a2,f2 = panel.GetPanelDirectory(nil, 1), APanel.Current, panel.GetPanelDirectory(nil, 0), PPanel.Current
  2.  
  3. panel.SetPanelDirectory(nil,0,a1);
  4.  
  5. Panel.SetPos(1, f1)
  6.  
  7. panel.SetPanelDirectory(nil,1,a2)
  8.  
  9. Panel.SetPos(0, f2)
  10.  
  11. panel.SetActivePanel(nil, 0) -- это если надо и активность панели перенести
Что с этим скриптом делать - знаете?
Last edited by buniak_a_h on Tue 02 Mar, 2021 12:57, edited 2 times in total.
shpeka
Posts: 51
Joined: Tue 03 Jul, 2007 15:46
Has thanked: 1 time

Panel.CtrlShiftBackSlash.lua — открыть тот же каталог

Post by shpeka »

buniak_a_h wrote: Tue 02 Mar, 2021 12:51 Что с этим скриптом делать - знаете?
Да, спасибо!

Для себя оформил так:
User avatar
buniak_a_h
Posts: 4236
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 643 times
Contact:

Panel.CtrlShiftBackSlash.lua — открыть тот же каталог

Post by buniak_a_h »

Не игнорируйте слово local в объявлении переменных! На самом деле это - ошибка. Не критичная (в данном случае), но может привести к неожиданным результатам и конфликтам с другими скриптами.
shpeka
Posts: 51
Joined: Tue 03 Jul, 2007 15:46
Has thanked: 1 time

Panel.CtrlShiftBackSlash.lua — открыть тот же каталог

Post by shpeka »

buniak_a_h wrote: Tue 02 Mar, 2021 13:55 Не игнорируйте слово local в объявлении переменных! На самом деле это - ошибка. Не критичная (в данном случае), но может привести к неожиданным результатам и конфликтам с другими скриптами.
Спасибо.
User avatar
John Doe
Бюрократ
Posts: 13807
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 426 times
Contact:

Panel.CtrlShiftBackSlash.lua — открыть тот же каталог

Post by John Doe »

buniak_a_h wrote: Tue 02 Mar, 2021 13:55 но может привести к неожиданным результатам и конфликтам с другими скриптами.
Строго говоря в данном случае с другими скриптами не может, только в пределах одного файла.
Но существуют и случаи когда ваше утверждение истинно.
https://t.me/FarManager — Telegram чат
User avatar
buniak_a_h
Posts: 4236
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 643 times
Contact:

Panel.CtrlShiftBackSlash.lua — открыть тот же каталог

Post by buniak_a_h »

John Doe, да-да, я так и написал - в данном случае.
User avatar
buniak_a_h
Posts: 4236
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 643 times
Contact:

Panel.CtrlShiftBackSlash.lua — открыть тот же каталог

Post by buniak_a_h »

В Telegram-е возникла тема позиционирования из временной панели на оппозитной панели на папку/файл, текущий на временной. Когда-то этот вопрос решался просто: Alt+F1/F2 -> Буква диска. Теперь этого не стало. Так что, может, кому-то станет удобным следующий скрипт (добавляет Same Folder в список дисков для пассивной панели, но только если на активной панели - имена файлов с полными путями (как во временной).
  1. MenuItem {
  2.  
  3.   description = 'Выбор на оппозитной панели того же файла, что на временной';
  4.  
  5.   menu   = "Disks";
  6.  
  7.   area   = "Shell";
  8.  
  9.   guid   = 'F2985D12-FE2E-4C13-982A-53A8407851E2';
  10.  
  11.   text   = function(menu,area)
  12.  
  13.     if APanel.Current == '..' then return end
  14.  
  15.     if mf.fsplit(APanel.Current,3) ~= '' and
  16.  
  17.        Drv.ShowPos == (APanel.Left and 2 or 1) then
  18.  
  19.       return '&[ Same Folder (BAX)]'
  20.  
  21.     end
  22.  
  23.   end;
  24.  
  25.   action = function(OpenFrom,Item)
  26.  
  27.     local pt, nm
  28.  
  29.     if APanel.Folder then
  30.  
  31.       pt, nm = APanel.Current, nil
  32.  
  33.     else
  34.  
  35.       pt, nm = mf.fsplit(APanel.Current,3), mf.fsplit(APanel.Current,12)
  36.  
  37.     end
  38.  
  39.     panel.SetPanelDirectory(nil, 0, pt)
  40.  
  41.     if nm then Panel.SetPos(1, nm) end
  42.  
  43.   end; -- action
  44.  
  45. }
Last edited by buniak_a_h on Mon 04 Oct, 2021 11:35, edited 1 time in total.
Post Reply

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