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

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

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

Post by Garrett » Wed 07 Aug, 2019 20:42

Предлагаю при переходе в корень диска из вложенных каталогов (по Ctrl-\) установить курсор не на первый элемент в панели, а на тот каталог (в корне диска), внутри которого мы были. Как если бы мы нажали необходимое кол-во раз переход на уровень выше(Ctrl-PgUp).

User avatar
HaRT
Moderator
Posts: 9091
Joined: Tue 30 Aug, 2005 17:21
Location: Санкт-Петербург
Has thanked: 90 times
Been thanked: 161 times

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

Post by HaRT » Wed 07 Aug, 2019 21:01

Поддерживаю!
Историческое поведение можно включить в комплект поставки как макрос в Addons.
Фар есть инструмент, а не нянька. © 2009 DrKnS

Shmuel
Posts: 5897
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 23 times
Been thanked: 218 times

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

Post by Shmuel » Wed 07 Aug, 2019 21:45

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: 9091
Joined: Tue 30 Aug, 2005 17:21
Location: Санкт-Петербург
Has thanked: 90 times
Been thanked: 161 times

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

Post by HaRT » Wed 07 Aug, 2019 22:11

Shmuel, спасибо, однако не будут ли тут по мере прохода читаться списки файлов (и их отображаемых свойств) всех промежуточных директорий? Если будут, то в ряде случаев это окажется слишком медленно.
Фар есть инструмент, а не нянька. © 2009 DrKnS

Shmuel
Posts: 5897
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 23 times
Been thanked: 218 times

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

Post by Shmuel » Wed 07 Aug, 2019 22:17

HaRT, этот макрос - простейший, его можно легко изменить или переделать. Запостил его просто как иллюстрацию.
Сейчас уже хочу спать, поэтому не буду улучшать :)

Shmuel
Posts: 5897
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 23 times
Been thanked: 218 times

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

Post by Shmuel » Thu 08 Aug, 2019 05:45

Ну вот и утро наступило:

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: 9091
Joined: Tue 30 Aug, 2005 17:21
Location: Санкт-Петербург
Has thanked: 90 times
Been thanked: 161 times

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

Post by HaRT » Thu 08 Aug, 2019 11:28

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

И ещё пожелание: чтобы на плагиновых панелях с реальными файлами (например, TmpPanel или NTFSFile) работало на основе текущего элемента (т.е. как если бы на него встали на обычной панели и вызвали этот макрос). По идее, эта же логика может работать и на обычных панелях, т.е. два разных способа вычислять папку вроде не понадобятся.
Фар есть инструмент, а не нянька. © 2009 DrKnS

siberia-man
Posts: 98
Joined: Sat 28 Jun, 2014 23:07
Has thanked: 1 time
Been thanked: 3 times

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

Post by siberia-man » Thu 08 Aug, 2019 12:32

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

Аналогичное поведение наблюдается у виндового Проводника.
Last edited by siberia-man on Thu 08 Aug, 2019 12:33, edited 1 time in total.

User avatar
HaRT
Moderator
Posts: 9091
Joined: Tue 30 Aug, 2005 17:21
Location: Санкт-Петербург
Has thanked: 90 times
Been thanked: 161 times

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

Post by HaRT » Thu 08 Aug, 2019 12:36

Фар есть инструмент, а не нянька. © 2009 DrKnS

Shmuel
Posts: 5897
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 23 times
Been thanked: 218 times

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

Post by Shmuel » Thu 08 Aug, 2019 13:19

Добавлена поддержка плагинов (проверялись только 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: 9091
Joined: Tue 30 Aug, 2005 17:21
Location: Санкт-Петербург
Has thanked: 90 times
Been thanked: 161 times

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

Post by HaRT » Thu 08 Aug, 2019 13:47

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: 5897
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 23 times
Been thanked: 218 times

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

Post by Shmuel » Thu 08 Aug, 2019 14:01

HaRT, подумал я и пришёл к выводу, что поддержку шар пусть добавит кто-то другой, у кого есть возможность сразу проверять на своей машине. Мне не хотелось бы играть в пинг-понг через форум.

User avatar
HaRT
Moderator
Posts: 9091
Joined: Tue 30 Aug, 2005 17:21
Location: Санкт-Петербург
Has thanked: 90 times
Been thanked: 161 times

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

Post by HaRT » Thu 08 Aug, 2019 14:10

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: 5897
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 23 times
Been thanked: 218 times

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

Post by Shmuel » Thu 08 Aug, 2019 14:44

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: 9091
Joined: Tue 30 Aug, 2005 17:21
Location: Санкт-Петербург
Has thanked: 90 times
Been thanked: 161 times

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

Post by HaRT » Thu 08 Aug, 2019 15:11

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

Post Reply

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