Переход в корень диска по Ctrl-\

Здесь обсуждается всё, что касается макросов.
Post Reply
Garrett
Posts: 240
Joined: Mon 01 Aug, 2005 10:23
Been thanked: 1 time

Переход в корень диска по Ctrl-\

Post by Garrett »

Предлагаю при переходе в корень диска из вложенных каталогов (по Ctrl-\) установить курсор не на первый элемент в панели, а на тот каталог (в корне диска), внутри которого мы были. Как если бы мы нажали необходимое кол-во раз переход на уровень выше(Ctrl-PgUp).
User avatar
HaRT
Moderator
Posts: 10823
Joined: Tue 30 Aug, 2005 17:21
Has thanked: 221 times
Been thanked: 358 times

Переход в корень диска по Ctrl-\

Post by HaRT »

Поддерживаю!
Историческое поведение можно включить в комплект поставки как макрос в Addons.
Фар есть инструмент, а не нянька. © 2009 DrKnS
Shmuel
Posts: 6819
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 528 times

Переход в корень диска по Ctrl-\

Post 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;
}
User avatar
HaRT
Moderator
Posts: 10823
Joined: Tue 30 Aug, 2005 17:21
Has thanked: 221 times
Been thanked: 358 times

Переход в корень диска по Ctrl-\

Post by HaRT »

Shmuel, спасибо, однако не будут ли тут по мере прохода читаться списки файлов (и их отображаемых свойств) всех промежуточных директорий? Если будут, то в ряде случаев это окажется слишком медленно.
Фар есть инструмент, а не нянька. © 2009 DrKnS
Shmuel
Posts: 6819
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 528 times

Переход в корень диска по Ctrl-\

Post by Shmuel »

HaRT, этот макрос - простейший, его можно легко изменить или переделать. Запостил его просто как иллюстрацию.
Сейчас уже хочу спать, поэтому не буду улучшать :)
Shmuel
Posts: 6819
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 528 times

Переход в корень диска по Ctrl-\

Post 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;
}
User avatar
HaRT
Moderator
Posts: 10823
Joined: Tue 30 Aug, 2005 17:21
Has thanked: 221 times
Been thanked: 358 times

Переход в корень диска по Ctrl-\

Post by HaRT »

Shmuel, спасибо, на локальных дисках работает.
А вот на UNC-путях — нет. Встроенное поведение — перейти в корень шары.

И ещё пожелание: чтобы на плагиновых панелях с реальными файлами (например, TmpPanel или NTFSFile) работало на основе текущего элемента (т.е. как если бы на него встали на обычной панели и вызвали этот макрос). По идее, эта же логика может работать и на обычных панелях, т.е. два разных способа вычислять папку вроде не понадобятся.
Фар есть инструмент, а не нянька. © 2009 DrKnS
siberia-man
Posts: 131
Joined: Sat 28 Jun, 2014 23:07
Has thanked: 2 times
Been thanked: 9 times

Переход в корень диска по Ctrl-\

Post by siberia-man »

Хорошая хотелка и замечательная реализация. Спасибо.

Аналогичное поведение наблюдается у виндового Проводника.
Last edited by siberia-man on Thu 08 Aug, 2019 12:33, edited 1 time in total.
User avatar
HaRT
Moderator
Posts: 10823
Joined: Tue 30 Aug, 2005 17:21
Has thanked: 221 times
Been thanked: 358 times

Переход в корень диска по Ctrl-\

Post by HaRT »

Фар есть инструмент, а не нянька. © 2009 DrKnS
Shmuel
Posts: 6819
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 528 times

Переход в корень диска по Ctrl-\

Post 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;
}
User avatar
HaRT
Moderator
Posts: 10823
Joined: Tue 30 Aug, 2005 17:21
Has thanked: 221 times
Been thanked: 358 times

Переход в корень диска по Ctrl-\

Post 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).
Фар есть инструмент, а не нянька. © 2009 DrKnS
Shmuel
Posts: 6819
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 528 times

Переход в корень диска по Ctrl-\

Post by Shmuel »

HaRT, подумал я и пришёл к выводу, что поддержку шар пусть добавит кто-то другой, у кого есть возможность сразу проверять на своей машине. Мне не хотелось бы играть в пинг-понг через форум.
User avatar
HaRT
Moderator
Posts: 10823
Joined: Tue 30 Aug, 2005 17:21
Has thanked: 221 times
Been thanked: 358 times

Переход в корень диска по Ctrl-\

Post 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)). Но разумеется, я полностью признаю ваше право не продолжать с этим вообще без объяснения причин. Спасибо за тот скрипт, который уже сделали!
Фар есть инструмент, а не нянька. © 2009 DrKnS
Shmuel
Posts: 6819
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 528 times

Переход в корень диска по Ctrl-\

Post 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;
}
User avatar
HaRT
Moderator
Posts: 10823
Joined: Tue 30 Aug, 2005 17:21
Has thanked: 221 times
Been thanked: 358 times

Переход в корень диска по Ctrl-\

Post by HaRT »

Shmuel wrote: Thu 08 Aug, 2019 14:44 Проверял с вышеупомянутыми 2-мя плагинами, с локальным путём и с localhost.
Спасибо! Без префиксов \\?\ и \\?\UNC\ работает.
Фар есть инструмент, а не нянька. © 2009 DrKnS
Post Reply

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