Как провалиться в первую непустую вложенную папку?
Как провалиться в первую непустую вложенную папку?
Всем добра.
Когда лазишь по Java-проекту на диске (только не спрашивайте зачем это делать в Far-е) жутко надоедает необходимость много раз жать "вниз+Enter", пока доберёшься до рабочих файлов. Можно это как-то автоматизировать? Т.е. по нажатию сочетания клавиш проваливаться в первую папку, в которой есть файл или другая папка. Куда копать?
Когда лазишь по Java-проекту на диске (только не спрашивайте зачем это делать в Far-е) жутко надоедает необходимость много раз жать "вниз+Enter", пока доберёшься до рабочих файлов. Можно это как-то автоматизировать? Т.е. по нажатию сочетания клавиш проваливаться в первую папку, в которой есть файл или другая папка. Куда копать?
Как провалиться в первую непустую вложенную папку?
Поковырялся немного. Хотя нет, много ковырялся, но сделал что нужно.
Этот макрос проваливается в первую непустую папку:
А этот вылезает со дна наверх:
В общем всё работает.
Единственный минус, кмк, оно выполняется где-то 0,3 - 0,5 сек, т.е. заметно на глаз, хотелось бы чтобы было незаметно.
Если я что-то наговнокодил - прошу показать.
Всем спасибо за помощь.
Этот макрос проваливается в первую непустую папку:
Code: Select all
Macro {
area="Shell"; key="CtrlAltDown"; flags="EmptyCommandLine"; description="Go down to first non-empty dir";
action=function()
if APanel.Folder then Keys('Enter') end
while true do
if APanel.Empty or (APanel.ItemCount > 2) then
break
else
Keys('Down')
if APanel.Folder then Keys('Enter') else break end
end
end
end;
}
Code: Select all
Macro {
area="Shell"; key="CtrlAltUp"; flags="EmptyCommandLine"; description="Go up to first non-empty dir";
action=function()
Keys('Home Enter')
while true do
if (APanel.ItemCount > 2) then
break
else
Keys('Home Enter')
end
end
end;
}
Единственный минус, кмк, оно выполняется где-то 0,3 - 0,5 сек, т.е. заметно на глаз, хотелось бы чтобы было незаметно.
Если я что-то наговнокодил - прошу показать.
Всем спасибо за помощь.
- HaRT
- Moderator
- Posts: 10858
- Joined: Tue 30 Aug, 2005 17:21
- Has thanked: 221 times
- Been thanked: 358 times
Как провалиться в первую непустую вложенную папку?
1. Вместо “Home Enter” и “Enter” на директории лучше писать CtrlPgUp и CtrlPgDn соответственно — и короче, и
flags="EmptyCommandLine";
можно выкинуть, и в корне диска будет работать правильно. Впрочем, если там меньше 3 элементов, то зациклится.2. Вместо
Code: Select all
while true do
if Condition then
break
else
Actions
end
end
Code: Select all
while not Condition do
Actions
end
И только сейчас, прочитав Ваш код, я понял, что же Вы хотели получить. Я для такого „проваливания“ давно пользуюсь таким макросом: . А для выхода вверх — Go Up: http://forum.farmanager.com/viewtopic.p ... 19#p137619.
Фар есть инструмент, а не нянька. © 2009 DrKnS
Как провалиться в первую непустую вложенную папку?
За CtrlPgDn спасибо, я им не пользуюсь, поэтому и не применил.
Сначала механически поправил while по вашему совету. С таким кодом Far зависал:
Долго пытался понять, что ему не нравится. Потом попробовал руками проделать всё и стало понятно.
Вот рабочие переделанные макросы.
Ваш макрос AltPgDn работает, и лучше, чем мой - он проваливается вниз из корневой директории, даже если в ней больше 1 файла\папки, а у меня это условие стоит в начале цикла. Поэтому буду использовать ваш вариант, правда, смысл булевой операции я не понял, и не хочу понимать
Go Up я использовать не буду - там всё слишком сложно и оно не решает исходной задачи к тому же.
Наконец-то я написал в Far-е макрос, за примерно 15 лет использования
Сначала механически поправил while по вашему совету. С таким кодом Far зависал:
Code: Select all
Macro {
area="Shell"; key="CtrlAltDown"; description="Go down to first non-empty dir";
action=function()
if APanel.Folder then Keys('CtrlPgDn') end
while not (APanel.Empty or (APanel.ItemCount > 2)) do
if APanel.Folder then Keys('CtrlPgDn') else break end
end
end;
}
Вот рабочие переделанные макросы.
Code: Select all
Macro {
area="Shell"; key="CtrlAltUp"; description="Go up to first non-empty dir";
action=function()
Keys('CtrlPgUp')
while not (APanel.ItemCount > 2) do
Keys('CtrlPgUp')
end
end;
}
Code: Select all
Macro {
area="Shell"; key="CtrlAltDown"; description="Go down to first non-empty dir";
action=function()
while not (APanel.Empty or (APanel.ItemCount > 2)) do
Keys('Down CtrlPgDn')
end
end;
}
Go Up я использовать не буду - там всё слишком сложно и оно не решает исходной задачи к тому же.
Наконец-то я написал в Far-е макрос, за примерно 15 лет использования
Спуститься в первый подкаталог с "нетривиальным" содержимым
Здравствуйте.
У меня довольно часто возникает такая ситуациа: я стою в каталоге, содежимым которого является только один подкаталог. Содежимое этого подкаталога -- тоже только один подкаталог. И так еще пару раз. И только после этой пару раз в качестве содержимого появляется что-то кроме одного единственного подкаталога, т.е. либо более чем один подкаталог, либо еще какие-нибудь файлы.
Мне бы хотелось иметь макрос, который, исходя из текущего каталога, спускался бы вглубь до тех пор, пока в качестве содержимого не окажется что-то кроме одного единственного каталога.
Пример. Предположим, имеется следующая структура каталогов, и курсор в активной панели стоит на Folder1:
Тогда макрос должен "спуститься" по структуре и остановиться на Folder3 (т.е. в панели должно отображаться содержимое Folder3), т.к. Folder3 -- это первая папка, содержимое которой состоит не из одного единственного подкаталога.
Мне кажется, что я такой макрос даже уже где-то видел. Искал-искал, но так ничего и не нашел. Может, кто-нибудь подкинет ссылочку?
Заранее спасибо.
У меня довольно часто возникает такая ситуациа: я стою в каталоге, содежимым которого является только один подкаталог. Содежимое этого подкаталога -- тоже только один подкаталог. И так еще пару раз. И только после этой пару раз в качестве содержимого появляется что-то кроме одного единственного подкаталога, т.е. либо более чем один подкаталог, либо еще какие-нибудь файлы.
Мне бы хотелось иметь макрос, который, исходя из текущего каталога, спускался бы вглубь до тех пор, пока в качестве содержимого не окажется что-то кроме одного единственного каталога.
Пример. Предположим, имеется следующая структура каталогов, и курсор в активной панели стоит на Folder1:
Code: Select all
Folder1
Folder2
Folder3
FolderA
FolderB
Мне кажется, что я такой макрос даже уже где-то видел. Искал-искал, но так ничего и не нашел. Может, кто-нибудь подкинет ссылочку?
Заранее спасибо.
Last edited by fml2 on Thu 08 Mar, 2018 23:26, edited 1 time in total.
Как провалиться в первую непустую вложенную папку?
А нельзя ли как-нибудь сделать так, чтобы перед "спусканием" макрос запоминал, откуда производится спуск, и потом иметь какую-нибудь кнопку, по которой можно было бы прыгнуть обратно. Что-то вроде "Undo". Потому как в том виде, в каком оно сейчас, кнопки Alt+Down и Alt+Up не являются "взаимонейтрализующими". А хотелось бы иметь возможность быстро подняться в исходное место, если увидел, что "провалился" не туда (или, может, точнее было бы "выбрал неправильную исходную точку для проваливания").HaRT wrote: ↑Wed 14 Dec, 2016 23:09А для выхода вверх — Go Up: http://forum.farmanager.com/viewtopic.p ... 19#p137619.
Как провалиться в первую непустую вложенную папку?
Может, как-то так можно: перед спуском запоминать (в settings? ведь макросы не имеют состояния, правильно?), откуда начинается спуск, а в другом макросе (Alt+Up) проверять, находимся ли мы в одном из подкаталогов запомненного каталога, и, если да, то возвращаться в него.
-
- Posts: 6834
- Joined: Thu 23 Mar, 2006 21:36
- Location: Israel
- Has thanked: 41 times
- Been thanked: 530 times
Как провалиться в первую непустую вложенную папку?
Макросы могут иметь состояние. Вот пример:
Code: Select all
local last_dir
Macro {
......
action=function()
if last_dir .... then
..............
last_dir = ....
..............
end;
}
Как провалиться в первую непустую вложенную папку?
Написал вот пару "взаимно нейтрализующих" макросов (один спускается, другой поднимается в исходное место) -- см. прикрепленный файл. Внутри панелей плагинов "подъем", похоже, не работает.
- Attachments
-
- DescendToFirstNonTrivialFolder.lua
- Текст макросов
- (1.19 KiB) Downloaded 167 times
-
- Posts: 6834
- Joined: Thu 23 Mar, 2006 21:36
- Location: Israel
- Has thanked: 41 times
- Been thanked: 530 times
Как провалиться в первую непустую вложенную папку?
fml2, не используйте функции библиотеки string - она не юникодная.
Вместо
Вместо
string.len(srcPath)
должно быть srcPath:len()
, аналогично заменить string.sub(APanel.Path)
на APanel.Path:sub()
.-
- Posts: 131
- Joined: Sat 28 Jun, 2014 23:07
- Has thanked: 2 times
- Been thanked: 9 times
Как провалиться в первую непустую вложенную папку?
Спрошу, не вдаваясь в подробности Ваших макросов. Возможно Вы уже предусмотрели это. Макросы учитывают "неожиданный" переход в другой кактлог после спуска? Например, пользователь сделал "Descend to the first non-trivial subdirectory", а потом перешел в совершенно другой каталог. Как отреагирует макрос "Undo the last Descend" на такое изменение системы?
Last edited by siberia-man on Sun 11 Mar, 2018 08:01, edited 1 time in total.
Как провалиться в первую непустую вложенную папку?
Спасибо за замечание, подправил. Подправленный вариант -- в довеске.
Да. Если текущий каталог не находится внутри того каталога, откуда был произведен спуск, то ничего не происходит.siberia-man wrote: ↑Sun 11 Mar, 2018 08:00Макросы учитывают "неожиданный" переход в другой кактлог после спуска?
- Attachments
-
- DescendToFirstNonTrivialFolder.lua
- (1.61 KiB) Downloaded 177 times
Last edited by fml2 on Thu 15 Mar, 2018 09:47, edited 2 times in total.