拡張ってすばらしい。

使用頻度の高いアプリ

普段僕はWinマシンをメインで使っていてSleipnirは常に開いています。
使用頻度の高い故に「ここがこうだったらなぁ」とか「こうだったら便利なのになぁ」っていうのが多くなってきませんか?
Sleipnirの気に入っている部分はいっぱいありますが、その中でも他のブラウザでは代替できない(or しにくい)のがScriptによる機能拡張です。
この機能を使うと元々ブラウザがサポートしていない機能を自分で作ることでより便利にブラウザが使えるようになります。

僕が普段よく使っているスクリプト

/*
選択文字列がISBNなら本やタウンでISBN検索
*/
var window;
var pnir;
var document;
var id;

pnir     = new ActiveXObject("Sleipnir.API");
id       = pnir.GetDocumentID(pnir.ActiveIndex);
document = _document;
window = _window;

var ISBN = getISBN();

// WEBPOSを新規ウィンドウで開ける
if(ISBN){
	pnir.NewWindow("http://www.honya-town.co.jp/hst/HTdispatch?free=&free_andor=0&title=&title_andor=0&title_title=1&title_subtitle=1&title_series=1&title_original=1&author=&author_list=0&publisher=&date_yy_from=&date_mm_from=&date_yy_to=&date_mm_to=&list_kensu=20&stamp_style=0&price_from=&price_to=&isbn_cd="+ISBN+"&vague_search=1&pub_stat=2&nips_cd=&submit.x=0&submit.y=0",true);
}
 
document = null;
pnir = null;



/****************************************************************************************/
function getISBN(){  //JANコード(978〜)の場合にもISBNを出力できるように修正
var copiedtext;

	AD = new ActiveDocument(document);
	if (AD.getComplete){
		ActDoc = AD.self;
		try {
			copiedtext = ActDoc.selection.createRange().text;	//選択範囲
		} catch(e) {
			pnir.MessageBox('アクティブなフレームがありません。');
		}
	}
	
	// 数字とx以外の文字をトリミング
	var ISBN;
	var ISBN2;
	ISBN = copiedtext.replace(/[^0-9x]/ig, "").replace(/[x]/g, "X");
	if(!ISBN.match(/\d\w/)){
		pnir.MessageBox("数字が含まれてませんコードを選択してください");
		ISBN2 = null;
	}	
		
	if(ISBN.match(/^4910/)){
		//雑誌のコードの場合
		ISBN2 = ISBN.substr(0, 13);
	}else if(ISBN.match(/^978/)){
		ISBN2 = ISBN.substr(3, 9);
		ISBN2 = calcISBN(ISBN2);
	}else if(ISBN.match(/^4/)){
		//ISBNコードの場合
		ISBN2 = ISBN.substr(0, 10);
	}else{
		ISBN2 = "";
	}
	return ISBN2;
}
/****************************************************************************************/
/****************************************************************************************/
/* ActiveDocumentClass */
function ActiveDocument(objDoc){
	this.getComplete = GetDocument(objDoc);
}

function GetDocument(objDoc){
	try {
		while (objDoc.activeElement.tagName.match(/FRAME$/i)){
			objDoc = objDoc.activeElement.contentWindow.document;
		}
		return(true);
	}
	catch(error) {
		return(false);
	}
	finally {
		ActiveDocument.prototype.self = objDoc;
	}
}

/****************************************************************************************/
/***************************************************************************************/
function calcISBN(inputcode){
    var total, wight, amari, checkdigit, ISBN;
    total = 0;
    for(i=0;i<inputcode.length;i++){
        wight = 11-(i+1);
        total += inputcode.charAt(i)*wight;
    }
    amari = total%11;
    checkdigit = 11 - amari;
    if(checkdigit == 10){
        checkdigit = "X";
    }else if(checkdigit == 11){
        checkdigit = 0;
    }
    ISBN = inputcode + checkdigit;
    return ISBN;
}

/**************************************************************************************/

上記スクリプトのNewWindowメソッドの第一引数を

"http://www.e-hon.ne.jp/bec/SA/Detail?refISBN="+ISBN

に変えるとe-honで検索出来るようになります。

Textmateでも便利に拡張

シチュエーション

自宅LAN内のWinマシンの中にXAMPPを使ってPHPで遊んでいます。
xampp\htdocsを共有設定していてMacからその中のPHPファイルを弄ってる状況。

ここで面倒なこと

Textmateで弄ったPHPの動作を確認するとき。
PHPファイルを保存 → ブラウザを前面にだす。 → 該当ファイルにアクセス。
となる訳ですが、すでにブラウザで開いていればリロードでOKなんですが、
開いてなかったり新しくPHPファイルを作ったりしたときにいちいちURLを打ち込むのが面倒です。

そこで拡張

#!/usr/bin/env ruby

path = ENV['TM_FILEPATH']
if (/Volumes\/(192.168.0.20).*?(\/.*)\.php/ =~ path)
  `open "http://#{$1+$2}.php"`
end


ENV['TM_FILEPATH']で今開いてるファイルのパスを取得。
パスが自宅LAN内のWinマシン内のPHPファイルなら
システムコマンドでopenしてブラウザで開くと。
汎用性はないです。すいません。
このスクリプトをCtrl+command+Rに割り当ててあります。
よって。

PHPファイルを保存 → Ctrl+command+R

以上。

いや〜便利っす。

やっぱり

自分で拡張できると非常〜に便利です。
それ故にこの手の手軽な拡張手段がないアプリは使いづらくなってしまう弊害があります。(汗)