Переход в корень диска по Ctrl-\
Переход в корень диска по Ctrl-\
Предлагаю при переходе в корень диска из вложенных каталогов (по Ctrl-\) установить курсор не на первый элемент в панели, а на тот каталог (в корне диска), внутри которого мы были. Как если бы мы нажали необходимое кол-во раз переход на уровень выше(Ctrl-PgUp).
- HaRT
- Moderator
- Posts: 10854
- Joined: Tue 30 Aug, 2005 17:21
- Has thanked: 221 times
- Been thanked: 358 times
Переход в корень диска по Ctrl-\
Поддерживаю!
Историческое поведение можно включить в комплект поставки как макрос в
Историческое поведение можно включить в комплект поставки как макрос в
Addons
.Фар есть инструмент, а не нянька. © 2009 DrKnS
-
- Posts: 6834
- Joined: Thu 23 Mar, 2006 21:36
- Location: Israel
- Has thanked: 41 times
- Been thanked: 530 times
Переход в корень диска по Ctrl-\
Code: Select all
Macro {
area="Shell"; key="CtrlBackSlash";
flags="NoPluginPanels";
action=function()
Far.DisableHistory(0x0F)
while #APanel.Path0 > 3 do Keys("CtrlPgUp") end
end;
}
- HaRT
- Moderator
- Posts: 10854
- Joined: Tue 30 Aug, 2005 17:21
- Has thanked: 221 times
- Been thanked: 358 times
Переход в корень диска по Ctrl-\
Shmuel, спасибо, однако не будут ли тут по мере прохода читаться списки файлов (и их отображаемых свойств) всех промежуточных директорий? Если будут, то в ряде случаев это окажется слишком медленно.
Фар есть инструмент, а не нянька. © 2009 DrKnS
-
- Posts: 6834
- Joined: Thu 23 Mar, 2006 21:36
- Location: Israel
- Has thanked: 41 times
- Been thanked: 530 times
Переход в корень диска по Ctrl-\
HaRT, этот макрос - простейший, его можно легко изменить или переделать. Запостил его просто как иллюстрацию.
Сейчас уже хочу спать, поэтому не буду улучшать
Сейчас уже хочу спать, поэтому не буду улучшать
-
- Posts: 6834
- Joined: Thu 23 Mar, 2006 21:36
- Location: Israel
- Has thanked: 41 times
- Been thanked: 530 times
Переход в корень диска по Ctrl-\
Ну вот и утро наступило:
Code: Select all
Macro {
area="Shell"; key="CtrlBackSlash";
flags="NoPluginPanels";
action=function()
local root, dir = APanel.Path0:match("(...)([^\\]*)")
Panel.SetPath(0, root, dir)
end;
}
- HaRT
- Moderator
- Posts: 10854
- Joined: Tue 30 Aug, 2005 17:21
- Has thanked: 221 times
- Been thanked: 358 times
Переход в корень диска по Ctrl-\
Shmuel, спасибо, на локальных дисках работает.
А вот на UNC-путях — нет. Встроенное поведение — перейти в корень шары.
И ещё пожелание: чтобы на плагиновых панелях с реальными файлами (например, TmpPanel или NTFSFile) работало на основе текущего элемента (т.е. как если бы на него встали на обычной панели и вызвали этот макрос). По идее, эта же логика может работать и на обычных панелях, т.е. два разных способа вычислять папку вроде не понадобятся.
А вот на UNC-путях — нет. Встроенное поведение — перейти в корень шары.
И ещё пожелание: чтобы на плагиновых панелях с реальными файлами (например, TmpPanel или NTFSFile) работало на основе текущего элемента (т.е. как если бы на него встали на обычной панели и вызвали этот макрос). По идее, эта же логика может работать и на обычных панелях, т.е. два разных способа вычислять папку вроде не понадобятся.
Фар есть инструмент, а не нянька. © 2009 DrKnS
-
- Posts: 131
- Joined: Sat 28 Jun, 2014 23:07
- Has thanked: 2 times
- Been thanked: 9 times
Переход в корень диска по Ctrl-\
Хорошая хотелка и замечательная реализация. Спасибо.
Аналогичное поведение наблюдается у виндового Проводника.
Аналогичное поведение наблюдается у виндового Проводника.
Last edited by siberia-man on Thu 08 Aug, 2019 12:33, edited 1 time in total.
-
- Posts: 6834
- Joined: Thu 23 Mar, 2006 21:36
- Location: Israel
- Has thanked: 41 times
- Been thanked: 530 times
Переход в корень диска по Ctrl-\
Добавлена поддержка плагинов (проверялись только TmpPanel и Arclite).
Насчёт UNC - у меня шар нет, поэтому не реализовал. Если опишете все варианты путей UNC, будем посмотреть.
Насчёт 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;
}
- HaRT
- Moderator
- Posts: 10854
- Joined: Tue 30 Aug, 2005 17:21
- Has thanked: 221 times
- Been thanked: 358 times
Переход в корень диска по Ctrl-\
Спасибо!
Можно проверять хоть на
\\YourHostName\C$
.
Не знаю, как насчёт всех, но вариант, который покроет, вероятно, 99,9% случаев использования — это
\\HostName\ShareName\path\to\the\file
.Ну и для остальных случаев (очень длинных путей) хорошо бы ещё учесть возможность префикса
\\?\
у локальных путей (\\?\D:\very long path
) и \\?\UNC\
у UNC-путей (\\?\UNC\HostName\ShareName\very long path
).Фар есть инструмент, а не нянька. © 2009 DrKnS
-
- Posts: 6834
- Joined: Thu 23 Mar, 2006 21:36
- Location: Israel
- Has thanked: 41 times
- Been thanked: 530 times
Переход в корень диска по Ctrl-\
HaRT, подумал я и пришёл к выводу, что поддержку шар пусть добавит кто-то другой, у кого есть возможность сразу проверять на своей машине. Мне не хотелось бы играть в пинг-понг через форум.
- HaRT
- Moderator
- Posts: 10854
- Joined: Tue 30 Aug, 2005 17:21
- Has thanked: 221 times
- Been thanked: 358 times
Переход в корень диска по Ctrl-\
Если дело только в проверке, то
\\localhost\C$
и \\?\UNC\localhost\C$
— вполне нормальные шары для проверки (пример: с \\?\UNC\localhost\C$\Program Files (x86)\Far Manager\Addons\Macros\Panel.BS.lua
ожидается переход на \\?\UNC\localhost\C$\Program Files (x86)
). Но разумеется, я полностью признаю ваше право не продолжать с этим вообще без объяснения причин. Спасибо за тот скрипт, который уже сделали!Фар есть инструмент, а не нянька. © 2009 DrKnS
-
- Posts: 6834
- Joined: Thu 23 Mar, 2006 21:36
- Location: Israel
- Has thanked: 41 times
- Been thanked: 530 times
Переход в корень диска по Ctrl-\
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;
}
- HaRT
- Moderator
- Posts: 10854
- Joined: Tue 30 Aug, 2005 17:21
- Has thanked: 221 times
- Been thanked: 358 times
Переход в корень диска по Ctrl-\
Спасибо! Без префиксов
\\?\
и \\?\UNC\
работает.Фар есть инструмент, а не нянька. © 2009 DrKnS