открытие ссылок в TotalCmd из IE, Opera и FireFox

Dasar

Для открытия файловых ссылок из IE в TotalCommander-е - надо сделать следующее:
Создать файл totalcmd.htm в надежном месте на диске, указав в переменной totalcmd - свой путь к Total Commander-у.
Будьте внимательны: слэши должны указываться двойные.

<script language="VBScript">
Function ObjectType(obj)
ObjectType = TypeName(obj)
End Function
</script>
<script language="JavaScript">
var event = external.menuArguments.event;
var element = external.menuArguments.document.elementFromPoint (event.clientX, event.clientY );
if (event.type == "MenuExtAnchor" || event.type=="MenuExtUnknown")
{
var anchor = element;
while(typeof(anchor) != "undefined" && ObjectType(anchor)!="HTMLAnchorElement")
{
anchor = anchor.parentElement;
}
if (typeof(anchor) == "undefined")
anchor = element;
var href = anchor.href;
var shell = new ActiveXObject("WScript.Shell");
if (href.indexOf("file://")==0)
{
href = href.replace("file://", "\\\\");
href = replaceAll(href, "/", "\\");
href = replaceAll(href, "%20", " ");
var totalcmd = "\"c:\\Program Files\\totalcmd\\TOTALCMD.EXE\"";

var cmd = totalcmd + " /O \"/L=%1\"";
cmd = cmd.replace("%1", href);
shell.Exec(cmd);
}

}
function replaceAll(text, pattern, str)
{
for (var i = 0; i < 100; ++i)
text = text.replace(pattern, str);
return text;
}
</script>

создать файл totalcmd.reg, указав ваш путь к файлу totalcmd.htm вместо 'C:\\НадежноеМесто\\'.
Слэши опять же двойные.

[HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\MenuExt\Открыть в Total Commander-е]
@="C:\\НадежноеМесто\\TotalCmd.htm"
"contexts"=dword:00000020

Добавить данный файл в реестр (достаточно просто этот файл открыть по enter-у или double click-ом)
Перезапустить IE
По правой кнопке мышки - теперь ссылки можно открывать в TC

sasha79

Пока не дописал в начало totalcmd.reg слово
REGEDIT4
ничего не получалось

sasha79

А можно как-нибудь сделать так, чтобы все ссылки file:// открывались в Total Commander?
(По левому клику, а не по пункту в меню)

Dasar

> А можно как-нибудь сделать так, чтобы все ссылки file:// открывались в Total Commander?
скорее нет, чем да
если делать свой протокол, например, TC:// - то там можно его заменить, а стандартный вроде нет.

qsk78

А можно сделать так, чтобы в TC 6.51+ открывалось в отдельной вкладке?

Dasar

сейчас нет под рукой версии 6.5, но позже посмотрю

Dasar

надо добавить /T

var cmd = totalcmd + " /O /T \"/L=%1\"";

qsk78

спасибо

bleyman


for (var i = 0; i < 100; ++i)
text = text.replace(pattern, str);
return text;

ужоснах! Так нельзя писать! Писать льзя вот так, например:

for (var text1 = ""; text1 != text;)
{
text1 = text;
text = text.replace(pattern, str);
}

Однако спасибо.

Dasar

> ужоснах! Так нельзя писать! Писать льзя вот так, например
не люблю JavaScript - у меня для него нормально редактора с Intellisense-ом нету.
зы
да, и вообще меня убило, что replace заменяет только первое вхождение

mironova

под оперу не получается =(
Item, "Open in TC" = Copy link address & Execute program, "d:\prog\sys\file mangers\totalcommander6.53\totalcmd.htm","%c"

Gattsu

спасибо!

Dasar

Документация на Opera-у есть?
Что означает каждая запятая в данной строке?

mironova

На примере добавления в меню пункта "Открыть в IE".
Для этого нужно изменить выбранный в настройках файл меню (Настройки - Панели инструментов - Настройки Меню). Сами файлы находятся в папке: Папка Оперы\profile\menu\.
В секцию [Document Popup Menu] добавить пункт:
Item, "Открыть в IE" = Execute program, "iexplore","%u"
Вместо "iexplore" нужно писать полный путь к программе, если он не прописан в реестре Windows (наверно ключ HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\App Paths).
"%u" - параметры командной строки, передающиеся в запускаемую программу (в общем случае не обязательны).
%u = URL отображаемого документа
%t = выбранный текст
%s = источник отображаемого документа
%c = текст буфера обмена.

Dasar

спасибо.
Дальше все это соединяем вместе.
== Открытие TC из Opera-ы ==
Создаем файл TC_from_Opera.js и сохраняем в надежном месте
где totalcmd - это путь к TC

var href = WScript.Arguments(0);
var totalcmd = "\"c:\\Program Files\\totalcmd\\TOTALCMD.EXE\"";
var shell = new ActiveXObject("WScript.Shell");
if (href.indexOf("file://")==0)
{
href = href.replace("file://", "\\\\");
href = replaceAll(href, "/", "\\");
href = replaceAll(href, "%20", " ");
var cmd = totalcmd + " /O \"/L=%1\"";
cmd = cmd.replace("%1", href);
shell.Exec(cmd);
}
function replaceAll(text, pattern, str)
{
for (var text1 = ""; text1 != text;)
{
text1 = text;
text = text.replace(pattern, str);
}
return text;
}

в файл "\Program Files\Opera\defaults\standard_menu.ini"
в раздел [Link Popup Menu] добавляем строку:

Item, "Open in Total Commander" = Execute program, "c:\НадежноеМесто\TC_from_Opera.js","%l"

Внимание:
путь в переменной totalCmd - надо указывать с двойными слэшами
путь в файле standart_menu.ini - с одинарными
pps
Опера может быть и хороший браузер, но справка - очень и очень ужасная.

mironova

respect

Dasar

=== FireFox & TC ==
Полноценно оформлять лень, поэтому решение вкратце:
добавить файл tc.js в chrome/browser.jar/content/browser

function OpenTotalCommander(link)
{
var href = link;
var targetFile = Components.classes['@mozilla.org/file/local;1'].createInstance(Components.interfaces.nsILocalFile);
targetFile.initWithPath('C:\\Program Files\\totalcmd\\TOTALCMD.EXE');
var process = Components.classes['@mozilla.org/process/util;1'].getService(Components.interfaces.nsIProcess);
process.init(targetFile);
var arguments= [] ;
href = href.replace("file://", "\\\\");
href = replaceAll(href, "/", "\\");
href = replaceAll(href, "%20", " ");
var cmd = "/L=%1";
cmd = cmd.replace("%1", href);
arguments.push("/O");
arguments.push(cmd);
process.run(false, arguments, arguments.length,{});
return true;
}
function replaceAll(text, pattern, str)
{
for (var text1 = ""; text1 != text;)
{
text1 = text;
text = text.replace(pattern, str);
}
return text;
}

в файл chrome/browser.jar/content/browser/browser.xul рядом с такими же похожими строками
добавить строку

<script type="application/x-javascript" src="chrome://browser/content/tc.js"/>

в этот же файл chrome/browser.jar/content/browser/browser.xul после строк вида

<menuitem id="context-savelink"
...
<menuitem id="context-copylink"
...

добавить строки

<menuitem id="context-openlink-in-tc"
label="Open Link in TC"
oncommand="OpenTotalCommander(gContextMenu.linkURL"/>

disna

не воспринимает папки с пробелами
если в названии папки есть пробел, то открывает надлежащую папку

Dasar

это какой из вариантов - Ie, Opera или FireFox?

disna

Opera+TC

vall

>href = replaceAll(href, "%20", " ");
хм, по стандарту URI кодируются в utf-8 и все символы не из ASCII кодируются эскейп последовательностями. глять что films.hackers выдаёт на русские имена

Dasar

> по стандарту URI кодируются в utf-8
у меня в IE и в OPera-е русские символы нормально работают, похоже их сам браузер дешифрует.

Dasar

Да, оказывается Opera не умеет правильно передавать параметры с пробелами во внешние программы
Соответственно в скрипте TC_from_Opera.js
надо строку var href = WScript.Arguments(0);
заменить на

var href = "";
for (i = 0; i < WScript.Arguments.length; i++)
{
if (i != 0)
href = href + " ";
href = href + WScript.Arguments(i);
}

ps
но если в пути было два пробела подряд, то работать все равно нормально не будет.

tihon972009

2: хоть я это пока еще и не попробовал, но все равно за труд большой респект

tihon972009

У меня такая проблема возникла: в IE пункт меню не появился. Ну да хрен с ним. В лисе пункт меню появился, если выбрать этот пункт, то переходится в ТС, он даже открывается, если не запущен, но в ТС'вской вкладке ничего нового не открывается, т.е. это просто как Alt-Tab выглядит.

Olenenok

Я совсем не в курсе что такое *.jar файл, а вот использовать FF в локальной сети вместо IE охота. Так вот, как добавлять файл в энтот *.jar? Какая-нибудь утилита, или в ручную придётся?
Бля, архив это ...

Dasar

в TC.js перед строкой href = href.replace("file://", ); добавить строку href = href.replace("file://///", ); ,
т.е. теперь должно быть:

var arguments= [] ;
href = href.replace("file://///", "\\\\");
href = href.replace("file://", "\\\\");
href = replaceAll(href, "/", "\\");
href = replaceAll(href, "%20", " ");
var cmd = "/L=%1";
cmd = cmd.replace("%1", href);

Olenenok

Большущий респект 'ю, за полезную функцию в FF!

Olenenok

Что-то перестал заходить, что это может быть? Я редактирую с помощью WinRar. У всех последний вариант работает?

Olenenok

Разобрался, тут ещё есть небольшая проблема.
(1) Ищём что-то в лориене
(2) Появляется список
(3) Выбираем элемент списка и делаем Open Link in TC
(4) TC открывается, но не на ссылке
Но он откроется правильно, если сначала кликнуть на этот элемент, а потом открыть на ссылке вверху. Кажется, неправильно обрабатывается последовательность Правильно получается только
Где можно скачать нормальный учебник по JScript?
Ёпт, это не в скрипте проблема, а во мне, вначале у лориена не ссылки, а фигась поймёшь что.

tihon972009

:
Разобрался, тут ещё есть небольшая проблема.
(1) Ищём что-то в лориене
(2) Появляется список
(3) Выбираем элемент списка и делаем Open Link in TC
(4) TC открывается, но не на ссылке
Но он откроется правильно, если сначала кликнуть на этот элемент, а потом открыть на ссылке вверху. Кажется, неправильно обрабатывается последовательность Правильно получается только
Добавил все. У меня все так же, как и у 'а (кстати, не знаю, как до добавления было, я так делать раньше не пробовал).
Ну да ладно, зато так, как описано - открывается
Не особо большой труд вместо одного раза кликнуть два.
Как говорится, от добра добра не ищщут, так что DarkGay'у спасибо и большой респект

Dmitry08

ае. клевая вещь!

Dasar

> У меня все так же, как и у 'а
ссылку ты случаем не с русскими буквами пытаешься открывать?
ps
в отличие от IE и Opera-ы - Firefox оказывается русские ссылкы мало того, что сам не раскодирует, так еще их и кодирует не по стандарту.

Dmitry08

А можно так открывать авишки и музыку сразу из оперы например?

Dasar

можно

tihon972009

:
ссылку ты случаем не с русскими буквами пытаешься открывать?
Не. Английскую полностью (в качестве примера - практически любой запрос из лориена).
Осчастливил бы людей, плагинш бы уж написал бы... (Шутка. А то я тут недавно лису переставлял, вручную опять все проделывал)...

Dasar

> Не. Английскую полностью (в качестве примера - практически любой запрос из лориена).
Английские нормально открываются.
надо только помнить, что в лориене есть и http-ссылки, которые ведут на сам же лориен
есть вот такие ссылки http://lorien.local/showdir.pl?host=479&where=57
а есть такие
Вторые открываются в отличии от первых.

Teosha

не открываются......
firefox 1.5b2
TC 6.53
WinXp
В ТС открыто несколько табов в каждой панели....

Olenenok

Всё прописал?

Teosha

сейчас все переделал еще раз
ссылки не открываются. просто ничего не происходит.
Оставить комментарий
Имя или ник:
Комментарий: