package.nounload.ljsqlite3 = true
local sql = require "ljsqlite3"
-- Проверка, один ли столбец
local function OneColumn()
local fname = win.GetEnv("farprofile").."\\panelmodes.db"
local conn = assert(sql.open(fname, "ro"))
local wm = panel.GetPanelInfo(nil, 1).ViewMode
local iCurr = wm
if iCurr == 10 then iCurr = 0 end
if iCurr <= 9 then iCurr = iCurr + 1 end -- Одна из стандартных панелей. >9 - свои добавленные
local SQL = [[SELECT name, value FROM table_values WHERE key_id=]]..iCurr
local t = conn:exec(SQL)
conn:close()
if t then
for i, v in ipairs(t.name) do
if v == 'ColumnTitles' then
return (','..t.value[i]):find(",N.*,N") == nil
end
end
else
-- Почему-то база пустая. видимо, после установки не настраивали панели. Тогда по умолчанию
-- режимы 1 и 2 - многостолбцовые; остальные - по одному.
return not (wm == 1 or wm == 2)
end
end
Macro {
area="Shell";
key="Left"; flags="EmptyCommandLine"; description="LYNX-style motion";
condition=function()
return APanel.Visible and OneColumn()
end;
action = function()
Keys('CtrlPgUp')
end;
}
Macro {
area="Shell"; key="Right"; flags="EmptyCommandLine"; description="LYNX-style motion";
condition=function()
-- Проверка количества столбцов на панели
if APanel.Visible and APanel.Folder and APanel.Current ~= '..' then
return OneColumn()
end
end;
action = function()
local Dest=APanel.Path .. (APanel.Path:sub(-1)=='\\' and '' or '\\') .. APanel.Current
if APanel.Plugin then
local pd=panel.GetPanelDirectory(nil, 1)
pd.Name = Dest
if not panel.SetPanelDirectory(nil, 1, pd) then -- некоторые плагины не поддерживают...
Keys('CtrlPgDn')
end
else
Panel.SetPath(0, Dest)
end;
end
}
Смысл:
1. Переход вправо - только если под курсором папка и не .. (надо ли заходить в архивы по Right - не знаю…). Ну и уж всяко если APanel.Visible.
2. Вообще переходы допустимы только если на панели один столбец. Я определяю это через SQLite-чтение базы PanelModes.db; возможно, я неправ, и можно проще.
3. Переход вправо по возможности осуществляются не по PgDown, а через Panel.SetPath (в плагиновой панели - через panel.SetPnelDirectory)
Можно было бы (и, наверно, было бы правильно) ещё и ассоциации проверять.
Улучшение макросов из поставки фара
Posted: Sat 02 Nov, 2019 00:57
by HaRT
buniak_a_h wrote: ↑Sat 02 Nov, 2019 00:34
Можно было бы (и, наверно, было бы правильно) ещё и ассоциации проверять.
На мой взгляд, было бы правильно проверять ассоциации и пытаться заходить в любой файл, если на CtrlPgDnне задана команда запуска.
buniak_a_h wrote: ↑Sat 02 Nov, 2019 00:34
Можно было бы (и, наверно, было бы правильно) ещё и ассоциации проверять.
На мой взгляд, было бы правильно проверять ассоциации и пытаться заходить в любой файл, если на CtrlPgDnне задана команда запуска.
Интересный получился макрос. Вроде, даже удобно. Пришлось приложить довольно много усилий для обеспечения "симметричности" навигации. Чтоб последовательность Right - Left выводила в исходный каталог. Поэтому проверка наличия ассоциации на PgDn для файла производится не в condition, а в action. В общем, проверьте …
Макрос работает на режимах с одним столбцом либо если указатель стоит в крайнем левом/правом столбце (если прокручивать уже некуда)
buniak_a_h wrote: ↑Sat 02 Nov, 2019 00:34
. Вообще переходы допустимы только если на панели один столбец. Я определяю это через SQLite-чтение базы PanelModes.db; возможно, я неправ, и можно проще
APanel.ColumnCount, PPanel.ColumnCount
Аналог "Lynx like motion" из Midnight Commander
Posted: Sat 20 Nov, 2021 20:21
by John Doe
Переписал немного макросы предложенные @nightgryphon
John Doe wrote: ↑Mon 22 Nov, 2021 11:21
Будем считать что предложение не поддержано.
Странный вывод. Скорее никого из посетителей за последний день этот макрос не интересует, поэтому нет откликов.
Аналог "Lynx like motion" из Midnight Commander
Posted: Mon 22 Nov, 2021 12:54
by John Doe
Откликов вообще частенько не бывает и это нормально. В данном случае я сообщаю что поскольку собственного видения этого макроса у меня нет, то из своего PR я упомянутые улучшения пока исключил.