WDXdetect

Название WDXdetect
Имя файла (*.txt) WDXdetect.txt
Описание Загружает пользовательский вид для текущей директории
Автор Вахмурка
Параметры ("%P")
Вызываемые плагины win, ini, vec, file
Иконка
Версия 1.1
Дата обновления 07.02.2006
local NewLine = esc(?+\r\n+, ?+\+)
local Path = arg(1)
local Config = "путь\wincmd.ini"
local Settings = "путь\WDXdetect.ini"
local hwnd = win.handle("c=TTOTAL_CMD")
local Temp = ini.get(Config, "CustomFields", "Titles") 
Temp = replacechars(Temp, "|", NewLine)
v = vec.createfromlines(Temp)
local Plugins = vec.length(v)
local Str, i, j
flag clear 1

if(file.validpath(Path ++ "descript.ion") == 1) do
	local Hand = file.open(Path ++ "descript.ion", "r")
	if(Hand > 1) do
		for(not(file.eof(Hand))) 
			Str = file.readstring(Hand)
			if(index(Str, ":") == "1") do
				file.close(Hand)
				flag set 1
				break
			endif
		endfor
		if(pproflag(1)) do
			for(i = 0; i < Plugins; i = i + 1)
				if(index(Str, v[i]) != 0) do
					Temp = 271 + i
					win.postmessage(hwnd, 0x400+51, Temp, 0)
					vec.destroy(v)
					quit
				endif
			endfor
		endif
	else
		messagebox("ok error", "File not opened", "FILE plugin error")
		quit
	endif
endif

;Sub_ParsePath - имя скрипта ParsePath 
local Depth = runfile.Subs\Sub_ParsePath(Path, "")
Path = remove(Path, -1)

for(j = 1; j < Depth; j = j + 1)
	if(ini.check_exists(Settings, "Dirs", Path) == 3) do
		Str = ini.get(Settings, "Dirs", Path)
		for(i = 0; i < Plugins; i = i + 1)
			if(index(Str, v[i]) != 0) do
				Temp = 271 + i
				win.postmessage(hwnd, 0x400+51, Temp, 0) 
				vec.destroy(v)
				quit
			endif
		endfor
	endif
	Str = file.folder(remove(Path, -1))
	Path = Str
endfor

vec.destroy(v)

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

На обоих форумах Total Commander, которые я посещаю - русскоязычном и англоязычном - с регулярностью и настойчивостью, заслуживающих куда более полезных приложений, появляется один и тот же запрос: автоматическая загрузка "пользовательского вида" (custom view) на основе content-плагинов. Разумеется, предлагаемый скрипт не решает поставленной задачи, а лишь совершает первое приближение к этому решению.

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

Способ первый. В директории должен находиться файл descript.ion, содержащий следующую строчку:

:CustomView

где CustomView - название пользовательского вида. Это название содержится в ключе Titles раздела [CustomFields] файла конфигурации wincmd.ini. Проще всего получить список всех видов, щелкнув право кнопкой крысы на Tabstop header (не знаю, как это по-русски). Вот скриншот:

Наконец, третий способ получить список - открыть меню Configuration\Options\Custom Columns.

Итак, в descript.ion должна содержаться строчка, начинающаяся с двоеточия и содержащее одно из имен (например, Dirinfo - см. скриншот). Двоеточие избрано потому, что с него не может начинаться имя файла. Строка может быть единственной в descript.ion или содержаться там наряду с обычными комментариями к файлам, при этом она может располагаться в произвольном месте, но чем ближе к началу, тем быстрее скрипт ее обнаружит.

Если же в текущей директории нет файла descript.ion или он не содержит описанной строчки, то скрипт обращается к Способу второму, то есть к собственному файлу конфигурации WDXdetect.ini, путь к которому, разумеется, должен быть прописан в коде скрипта.

Файл WDXdetect.ini имеет единственный раздел [Dirs], содержащий произвольное число ключей типа

путь=вид

например

[Dirs]
c:\Utils\Temp=dirinfo
c:\User\Pictures=Image

Первый способ определения вида (через descript.ion) имеет приоритет перед вторым (через WDXdetect.ini).

В версии 1.1 были внесены следующие изменения во второй способ: во-первых, путь в конфигурации теперь не должен оканчиваться на "\", во-вторых, вид соответствует не только директории, указанной в конфигурации, но и ее дочерним директориям. В этом и состоит разница между способами.

Видимо, имеет смысл внести в конфигурацию скрипта те директории и соответствующие виды, которые не будут подвергаться изменениям. А файл descript.ion использовать для временных или пробных изменений. При этом следует учитывать, что, найдя первую строчку, начинающуюся с ":", скрипт прекращает поиск, поэтому можно создать несколько таких строчек, и просто меняя их порядок, загружать тот или иной вид для директории, где данный descript.ion живет.

Итак, ранее был один способ загрузки нужного вида - нажать правой кнопкой крысы на Tabstop header и в открывшемся списке найти требуемый вид. Этот способ имел два недостатка. Во-первых, список может быть достаточно длинным (у меня, например, 15 видов, но найдется немало пользователей, у которых их намного больше). Поэтому поиск нужного может представлять некоторое неудобство. Во-вторых, можно просто забыть имя вида, который лучше знаком нам по названиям колонок.

Скрипт позволяет, потратив на настройку несколько минут, получить в результате возможность загрузки нужного вида одним щелчком и пользоваться ей бесконечно долго.


На главную Все о Total Commander PowerPro Все скрипты