TreeDown

Название TreeDown
Имя файла (*.txt) TreeDown.txt
Описание Осуществляет движение по дереву директорий сверху вниз
Автор Вахмурка
Параметры "%p", "%n"
Вызываемые плагины win, file, tc
Иконка
Версия 1.0
Дата обновления 23.10.2005

local hwnd = win.handle("c=TTOTAL_CMD")
local Path = arg(1)
local Name = arg(2)
local List, Counter, Slash, j, One

if(select(Path, 2) == "\\") do
	Slash = "Script works only in directory tree, not network or special folders"
	messagebox("ok error", Slash, "TreeDown Script")
	quit
endif

if(file.isfolder(Path ++ Name) == "1" && Name != "") do	
	win.sendmessage(hwnd, 0x400+51, 2003, 0)			
	quit
endif

if(file.isfolder(Path ++ Name) == "0") do				
	if(length(Path) == 3) do
		Path = select(Path, 2)
		Slash = "Last folder in root visited. Go to the next drive?"
		if(messagebox("yesno warning", Slash, Path ++ " root") == 7)
			quit

		win.sendmessage(hwnd, 0x400+51, 2051, 0)		
		win.sendmessage(hwnd, 0x400+51, 2001, 0)		
			quit
	endif

	Path = remove(Path, -1)
	Slash = revindex(Path, "\")
	Name = select(Path, Slash - length(Path))
	Path = select(Path, Slash)
endif

Path = remove(Path, -1)

for(1)
	List = file.listfiles(Path, 2, 0, 1)
	Counter = line(List, 0)

	if(Counter == 0) do										
		Slash = revindex(Path, "\")
		Name = select(Path, Slash - length(Path))
		Path = select(Path, Slash - 1)
		win.sendmessage(hwnd, 0x400+51, 2002, 0)			
	else
		Slash = "z;"
		flag clear 1

		for(j = 1; j <= Counter; j = j + 1)
			One = file.getShortPath(line(List, j))
			if(file.isfolder(One) == "1" && min(One, Path ++ "\" ++ Name) != One) do
				flag set 1
				Slash = min(One, Slash)
			endif
		endfor

		if(pproflag(1)) do
			tc.cd(hwnd, Slash)
			keys {home}
			quit
		else
			if(length(Path) == 2) do
				Path = select(Path, 2)
				Slash = "Last folder in root visited. Go to the next drive?"
				if(messagebox("yesno warning", Slash, Path ++ " root") == 7)
					quit

				win.sendmessage(hwnd, 0x400+51, 2051, 0)		
				win.sendmessage(hwnd, 0x400+51, 2001, 0)		
				quit
			endif

			Slash = revindex(Path, "\")
			Name = select(Path, Slash - length(Path))
			Path = select(Path, Slash - 1)

		endif
	endif
endfor								

Комментарии:

В своей статье Gregory приводит краткие описания и ссылки на некоторые скрипты для работы с Total Commander. Судьбу этих скриптов я вкратце описал здесь.

В частности, практический смысл я увидел только в скрипте neighbour, однако его разбор, даже поверхностный, меня разочаровал. Не буду вдаваться в подробности, ибо считаю Gregory в определенном смысле своим "крестным отцом" и учителем.

Сама идея передвижения по дереву директорий показалась мне весьма продуктивной. Поэтому я предпринял попытку самостоятельно ее реализовать. Плоды этих усилий приводятся выше и в скрипте TreeUp.

Задача состоит в том, чтобы, многократно исполняя скрипт TreeDown, пройти все директории на диске, не пропуская ни одной. Затем, получив приглашение перейти на следующий диск (что означает невозможность движения вниз), пройти обратным путем с помощью скрипта TreeUp.

Мне раньше часто приходилось жалеть, что для перехода в соседнюю (скажем, нижнюю) директорию приходится сначала бессчетное число раз переходить в родительскую, то есть вверх по дереву, а затем столь же утомительно спускаться по другой ветке. Теперь достаточно одного нажатия клавиши или одного щелчка крысы. При тестировании скриптов я много нового узнал о своих дисках.

Мне возразят, что для этого можно воспользоваться режимом Directory tree, но я увидел в таком подходе ряд недостатков.

Воспользовавшись советом Gregory, я присвоил вызову скриптов клавиши Alt+PgDn и Alt+PgUp.

У пользователя, который, как и я, частенько испытывает необходимость в таком перемещении, есть уникальная возможность сравнить, как эту задачу решили два человека (Gregory и я) и выбрать наилучшее решение.


На главную Все о Total Commander PowerPro PowerPro & Total Commander