LinkPath

Название LinkPath
Имя файла (*.txt) LinkPath.txt
Описание Помещает в буфер ссылку на заданный файл относительно текущего пути
Автор Вахмурка
Параметры "%P", "%T", "%M"
Вызываемые плагины miscplugin, clip
Иконка
Версия 2.0
Дата обновления 26.01.2006
args P, T, M
local Result, i, BegP, BegT
local Bef = "<a href="
local Aft = "></a>"

if(P == T) do
	Result = Bef ++ M ++ Aft
	clip.set(Result)
	quit
endif

;Sub_ParsePath - eiy ne?eioa ParsePath
local SourceDepth = runfile.Subs\Sub_ParsePath(P, "")
local TargetDepth = runfile.Subs\Sub_ParsePath(T, "")

if(index(P, T) != 0) do
	Result = Bef ++ repeat("../", SourceDepth - TargetDepth) ++ M ++ Aft
	clip.set(Result)
	quit
endif

if(index(T, P) != 0) do
	Result = Bef ++ select(T, length(P) - length(T)) ++ M ++ Aft
	clip.set(Result)
	quit
endif

local Lim = min(SourceDepth, TargetDepth)
local Counter = 0

for(i = 1; i <= Lim; i = i + 1)
	Result = BegP
	BegP = runfile.Subs\Sub_ParsePath(P, i - SourceDepth)
	BegT = runfile.Subs\Sub_ParsePath(T, i - TargetDepth)
	if(BegP == "" || BegT == "")
		break

	if(BegP == BegT) do
		Counter = Counter + 1
	else
		break
	endif
endfor

if(Counter == 0) do
	local mpDlgCaption = "LinkPath Script"
	local mpIcon = "WARNING"
	local mpDlgText = "Source path is " ++ P ++ "\nTarget file is " ++ T ++ M
	mpDlgText = mpDlgText ++ "\nThey seem to be on different logical disks!"
	miscplugin.messagebox(1, "&OK")
	quit
endif

Result = repeat("../", SourceDepth - Counter)
Result = Result ++ runfile.Subs\Sub_ParsePath(T, TargetDepth - Counter) ++ "/"
Result = Bef ++ replacechars(Result, "\", "/") ++ M ++ Aft
clip.set(Result)

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

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

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

Пусть веб-страничка имеет следующее полное имя:

c:\One\Two\Three\Source.html

Помещаемые в буфер обмена ссылкы при различных путях целевого файла Target.html представлены в таблице:
Полный путь целевого файла Результат
c:\One\Target.html <a href=../../Target.html></a>
c:\One\Two\Three\Target.html <a href=Target.html></a>
c:\Four\Five\Six\Target.html <a href=../../../Four/Five/Six/Target.html></a>
d:\Seven\Eight\Target.html Ошибка!

Ошибка в последнем случае вызвана тем, что страничка и целевой файл находятся на разных логических дисках.

После запуска скрипта необходимо перейти в редактор веб-странички и вставить туда содержимое буфера.

Обратим внимание на то, что ссылка является относительной, а не абсолютной. Это значит, что, сохраняя структуру директорий, мы можем записать оба файла (веб-страничку и целевой файл) куда угодно, и ссылка будет работать всегда.

Внимание! В скрипте использовано ключевое слово args, введенное в PowerPro 4.4! В более ранних версиях PowerPro скрипт будет выдавать сообщение об ошибке. Если вы по каким-либо причинам не хотите устанавливать версию 4.4, первую строку скрипта следует заменить на 3 строки:

local P = arg(1)
local T = arg(2)
local M = arg(3)

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