нестандартные url'ы в опере

На работе для общения с клиентами используется веб-интерфейс, ну и большинство времени провожу в нем. И частые однотипные действия логично хочется как-то автоматизировать или хотя бы сделать удобнее. А т.к. разработчиков хрен дождешься долго упрашивать - пришлось наконец-то вплотную столкнуться с таким явлением, как UserJS. Но пост не об этом, а о том, что одним из желаний было бы сделать такие кнопочки, по нажатию на которые открывался бы PuTTY с нужным IP адресом.
Идея собственно на поверхности - делаем ссылку вида ssh://127.0.0.1, и учим оперу понимать её. Идем в настройки протоколов, вписываем протокол ssh и говорим открывать с помощью putty. И тут наступает первый облом - putty, будь он неладен, ни в какую не хочет понимать такую ссылку (а опера отдает ему всю ссылку, вместе с ssh://). Хотя абсолютно подобную telnet://127.0.0.1 прекрасно понимает, включает протокол telnet и открывает IP адрес. Это просто подло с его стороны, я считаю. Немного погуглив я нашел маленькую программку, написанную челом, который столкнулся с такой же проблемой. Она принимает параметром ссылку, вырезает протокол, вызывает программу, указанную у себя в конфигурации для данного протокола и завешается. С ней все вышло замечательно.
Вторым желанием было сделать кнопочку, по нажатию на которую нужный участок текста копируется в буфер обмена. Признаюсь, сначала я думал что задача пустяковая, но оказалось, что реализовать это с помощью javascript очень и очень нетривиально. Легко и непринужденно записать текст в буфер обмена можно только в древних IE. Во всех современных браузерах такая возможность заблокирована, как дыра в безопасности. И если, по слухам, в FF все таки можно как-то где-то в настройках её разрешить, то в опере безоговорочно. Народ в интернетах извращается по полной. Оказывается, это можно делать флешу. Пишут маленькую оболочку на AS, прячут флешку на странице и дергают из скрипта. Но с 10й версии разработчики adobe задачу усложнили - возможность оставили, но только если пользователь сам нажал на кнопку на флешке. Народ не сдается - делают прозрачную флешку с кнопкой и помещают её над кнопкой в html. Попробовал примеры, меня не устроило. Во первых, сама флешка активируется только после клика по ней - получается, надо два раза жать, а во вторых, почему то работает через раз. Ну я и подумал, а почему бы не прикрутить опять же протокол и внешнюю программу?
Потом некоторое время искал консольную программку (да, лень самому писать), которая бы принимала параметром строку и записывала её в буфер. Нашел две, но обе работают с stdin, а не с параметрами... Потом с удивлением обнаружил, что в windows (начиная с висты) есть стандартная утилитка clip.exe, выполняющая абсолютно тоже самое - читает stdin и записывает его в буфер. Т.к. с параметрами никто не работает, пришлось думать, как вызывать её, чтобы работало как надо.
Первый вариант, пришедший на ум

echo %1 | clip
не сработал - опера не смогла вызвать утилиту через пайп. Тогда он преобразовался в
cmd /C "echo %1 | clip"
заработало, но через пару тестов я обнаружил, что в буфер попадает символ переноса строки. Виновником оказался echo, и отучить от этого я его не смог. Пришлось заменить его на echo из cygwin, который понимает параметр -n.
В итоге, теперь ссылки вида clip:text немного через ж#пу, но записывают text в буфер обмена :)
PS Если вдруг кто знает, как в опере более гибко настроить вызов внешней программы, и какие принимаются переменные (я видел %1 и %l, работают похоже одинаково) - буду очень благодарен. В идеале она сама должна уметь удалять протокол из строки, но нарыть в интернете ничего не удалось...seguir ->

 

Design in CSS by TemplateWorld and sponsored by SmashingMagazine
Blogger Template created by Deluxe Templates