Sleipnirでの「貼り付けて移動」を使えないかを考える

あると便利な機能

ミスで下書き一度飛ばしちゃってしっかり書くやる気無くなったので、流し気味で。


アドレスバー上のコンテキストメニューにあって、クリップボードURIが格納されている場合に選択すると、アドレスバーにそのURIを「貼り付けて」そのページに「移動」する機能です。
OperaとかChromeには標準で付いてます。
URI以外(と思しき)文字列が格納されていたら「貼り付けて検索」になったりもします。

IEコンポブラウザだとAncia、Maxthon2、The World3とかが実装しているようです。
Sleipnirでも実装自体はそう難しくないと思いますが、以前から要望があるのに一向にされないのは何か理由があるんですかね。
例えば大人の事情とか?*1


2ちゃんのプニル本スレでは拘っている人が居るようなのでどうにかならないもんかと頭を捻ってみました。
まぁ、私は貼り付けた後にテンキーのエンターキーで充分なのであっても無くてもどっちゃでも宜しいんですけどねw

拡張メニューにブックマークレットを登録する

一番良いのはアドレスバー上のコンテキストメニューにそういう機能を追加することなんでしょうけど、エクスプローラを弄らないといけないような。
そこまでの情熱は無いのでやりません。


次に思いついたのは「拡張メニュー」にそういう機能を付けること。
というわけでブックマークレットを書いてみたんですけど上手く動かない。
原因はChrome参考に文字列によって挙動を変えるように分岐を入れてたんですけど、その辺りでコケてるようです。
まぁ、IEで問題なく動くブックマークレットSleipnirではどうしても動かないってのも度々あるので、今回も同様なのでしょう。
結局、その辺りオミットしてシンプルな感じになりました。

PasteAndGo.js

javascript:(function(){
	var tmp=clipboardData.getData("Text");
	if(tmp.length>0){
		window.location.href = tmp;
	}
})();

PasteAndSearch.js

javascript:(function(){
	var tmp=clipboardData.getData("Text");
	if(tmp.length>0){
		window.location.href = "http://www.google.com/search?q="+encodeURIComponent(tmp);
	}
})();

以上の2つを"\bookmarklet"に放り込んでください。
拡張メニューに以下のような感じで追記してください。

<item name="貼り付けて移動" action="bookmarklet:PasteAndGo" />
<item name="貼り付けて検索" action="bookmarklet:PasteAndSearch" />

UAスクリプトで作ってみる

まぁ、上述のブックマークレットとしては動かなかったものをベースに一部書き直しただけですが。
PasteAndGoUA.js

(function(){
	var r="http://www.google.com/search?q=";
	var p=sleipnir.api;
	var tmp=clipboardData.getData("Text");
	if(tmp.length>0){
		if(tmp.indexOf("\n")>=0){
			p.Navigate(p.GetDocumentID(p.ActiveIndex),r+encodeURIComponent(tmp));
		}else{
			if(tmp.match(/^(http:\/\/|https:\/\/|about:|\/\/).+/)!=null){
				p.Navigate(p.GetDocumentID(p.ActiveIndex),tmp);
			}else if(tmp.match(/^\/[^\/]/)!=null){
				p.Navigate(p.GetDocumentID(p.ActiveIndex),"/"+tmp);
			}else if(tmp.match(/.*(\.|。|.|。).+/)!=null){
				p.Navigate(p.GetDocumentID(p.ActiveIndex),"//"+tmp);
			}else{
				p.Navigate(p.GetDocumentID(p.ActiveIndex),r+encodeURIComponent(tmp));
			}
		}
	}
})();

"http://example.com"、"https://example.com"、"example.com"や"about:hoge"みたいな感じは当然のこと。
Chromeでは"/example.com"とか"//example.com"でも「貼り付けて移動」になるみたいなのでその辺も。
それ以外の文字列の場合はGoogleで検索するようにしてあります。

もっと良い書き方あると思うので誰かブラッシュアップしてくれないかな。
"ftp://〜"とか"javascript:〜"とか"ttp://〜"*2あたりも対応させてもいいかもね。

こちらは"\plugins\scripts"に放り込んで、ぷにる再起動。
「メニューエディタ」で「タブ」「タブバー」辺りに追加すればいいかも。

*1:100%完全な憶測です

*2:2ちゃんなどで使われる「h抜き」