Page 1 of 1
Переход в корень диска по Ctrl-\
Posted: Wed 07 Aug, 2019 20:42
by Garrett
Предлагаю при переходе в корень диска из вложенных каталогов (по Ctrl-\) установить курсор не на первый элемент в панели, а на тот каталог (в корне диска), внутри которого мы были. Как если бы мы нажали необходимое кол-во раз переход на уровень выше(Ctrl-PgUp).
Переход в корень диска по Ctrl-\
Posted: Wed 07 Aug, 2019 21:01
by HaRT
Поддерживаю!
Историческое поведение можно включить в комплект поставки как макрос в Addons
.
Переход в корень диска по Ctrl-\
Posted: Wed 07 Aug, 2019 21:45
by Shmuel
Code: Select all
Macro {
area="Shell"; key="CtrlBackSlash";
flags="NoPluginPanels";
action=function()
Far.DisableHistory(0x0F)
while #APanel.Path0 > 3 do Keys("CtrlPgUp") end
end;
}
Переход в корень диска по Ctrl-\
Posted: Wed 07 Aug, 2019 22:11
by HaRT
Shmuel, спасибо, однако не будут ли тут по мере прохода читаться списки файлов (и их отображаемых свойств) всех промежуточных директорий? Если будут, то в ряде случаев это окажется слишком медленно.
Переход в корень диска по Ctrl-\
Posted: Wed 07 Aug, 2019 22:17
by Shmuel
HaRT, этот макрос - простейший, его можно легко изменить или переделать. Запостил его просто как иллюстрацию.
Сейчас уже хочу спать, поэтому не буду улучшать
Переход в корень диска по Ctrl-\
Posted: Thu 08 Aug, 2019 05:45
by Shmuel
Ну вот и утро наступило:
Code: Select all
Macro {
area="Shell"; key="CtrlBackSlash";
flags="NoPluginPanels";
action=function()
local root, dir = APanel.Path0:match("(...)([^\\]*)")
Panel.SetPath(0, root, dir)
end;
}
Переход в корень диска по Ctrl-\
Posted: Thu 08 Aug, 2019 11:28
by HaRT
Shmuel, спасибо, на локальных дисках работает.
А вот на UNC-путях — нет. Встроенное поведение — перейти в корень шары.
И ещё пожелание: чтобы на плагиновых панелях с реальными файлами (например, TmpPanel или NTFSFile) работало на основе текущего элемента (т.е. как если бы на него встали на обычной панели и вызвали этот макрос). По идее, эта же логика может работать и на обычных панелях, т.е. два разных способа вычислять папку вроде не понадобятся.
Переход в корень диска по Ctrl-\
Posted: Thu 08 Aug, 2019 12:32
by siberia-man
Хорошая хотелка и замечательная реализация. Спасибо.
Аналогичное поведение наблюдается у виндового Проводника.
Переход в корень диска по Ctrl-\
Posted: Thu 08 Aug, 2019 12:36
by HaRT
Переход в корень диска по Ctrl-\
Posted: Thu 08 Aug, 2019 13:19
by Shmuel
Добавлена поддержка плагинов (проверялись только TmpPanel и Arclite).
Насчёт UNC - у меня шар нет, поэтому не реализовал. Если опишете все варианты путей UNC, будем посмотреть.
Code: Select all
Macro {
area="Shell"; key="CtrlBackSlash";
action=function()
local path = APanel.Path~="" and APanel.Path or APanel.Current:find("\\") and APanel.Current
if path then
local root, dir = path:match("([^\\]*\\)([^\\]*)")
Panel.SetPath(0, root, dir)
else
Keys("CtrlBackSlash") -- default Far action
end
end;
}
Переход в корень диска по Ctrl-\
Posted: Thu 08 Aug, 2019 13:47
by HaRT
Shmuel wrote: ↑Thu 08 Aug, 2019 13:19Добавлена поддержка плагинов
Спасибо!
Shmuel wrote: ↑Thu 08 Aug, 2019 13:19Насчёт UNC - у меня шар нет, поэтому не реализовал.
Можно проверять хоть на
\\YourHostName\C$
.
Shmuel wrote: ↑Thu 08 Aug, 2019 13:19
Если опишете все варианты путей UNC, будем посмотреть.
Не знаю, как насчёт
всех, но вариант, который покроет, вероятно, 99,9% случаев использования — это
\\HostName\ShareName\path\to\the\file
.
Ну и для остальных случаев (
очень длинных путей) хорошо бы ещё учесть возможность префикса
\\?\
у локальных путей (
\\?\D:\very long path
) и
\\?\UNC\
у UNC-путей (
\\?\UNC\HostName\ShareName\very long path
).
Переход в корень диска по Ctrl-\
Posted: Thu 08 Aug, 2019 14:01
by Shmuel
HaRT, подумал я и пришёл к выводу, что поддержку шар пусть добавит кто-то другой, у кого есть возможность сразу проверять на своей машине. Мне не хотелось бы играть в пинг-понг через форум.
Переход в корень диска по Ctrl-\
Posted: Thu 08 Aug, 2019 14:10
by HaRT
Shmuel wrote: ↑Thu 08 Aug, 2019 14:01
поддержку шар пусть добавит кто-то другой, у кого есть возможность сразу проверять на своей машине
Если дело только в проверке, то
\\localhost\C$
и
\\?\UNC\localhost\C$
— вполне нормальные шары для проверки (пример: с
\\?\UNC\localhost\C$\Program Files (x86)\Far Manager\Addons\Macros\Panel.BS.lua
ожидается переход
на \\?\UNC\localhost\C$\Program Files (x86)
). Но разумеется, я полностью признаю ваше право не продолжать с этим вообще без объяснения причин. Спасибо за тот скрипт, который уже сделали!
Переход в корень диска по Ctrl-\
Posted: Thu 08 Aug, 2019 14:44
by Shmuel
HaRT, уговорили. Проверял с вышеупомянутыми 2-мя плагинами, с локальным путём и с localhost. Не вылизывал - времени нет.
Code: Select all
Macro {
area="Shell"; key="CtrlBackSlash";
action=function()
local path = APanel.Path
local root, dir
if APanel.Plugin then -- plugin panel
path = APanel.Current:find("\\") and APanel.Current or path
root, dir = path:match("([^\\]*\\)([^\\]*)")
elseif APanel.Path:find("^\\\\") then -- network share
root, dir = path:match("^(\\\\[^\\]*\\%w%$\\)([^\\]*)")
else -- local directory
root, dir = path:match("([^\\]*\\)([^\\]*)")
end
if root then
Panel.SetPath(0, root, dir)
else
Keys("CtrlBackSlash") -- default Far action
end
end;
}
Переход в корень диска по Ctrl-\
Posted: Thu 08 Aug, 2019 15:11
by HaRT
Shmuel wrote: ↑Thu 08 Aug, 2019 14:44
Проверял с вышеупомянутыми 2-мя плагинами, с локальным путём и с localhost.
Спасибо! Без префиксов
\\?\
и
\\?\UNC\
работает.