注意
- Minibuffer(+LDRize)との併用不可
- ショートカットキーが競合
- &にしようかと思ったけどSHIFT同時押しが使いづらいのでやめた
- コマンドの移植度が微妙
- 実装したもの:cat cd clear cut date echo exit expr find go google grep hatena head inspect jot logout ls maketoc open parse printf prompt pwd rm save sed seq settimer sort tac tail tee tr uniq up wc wget xargs
- seqが自然数でしか使えなかったり、sedがエディタになってなかったり、いろいろ
起動方法など
:かALT+xで起動。
clearコマンドもしくはCTRL+Lでクリア。
TAB2回で候補表示。候補が1つだけのときはTAB1回で補完。
ファイルシステムもどき
$ pwd
http://mayokara.info/note/
$ cat links|head > outfile
$ cat outfile
http://mayokara.info/note/
http://mayokara.info/note/1
http://mayokara.info/note/view/325
http://mayokara.info/note/view/257
http://mayokara.info/note/search/tag/個人的メモ
http://mayokara.info/note/search/tag/JavaScript
http://mayokara.info/
http://mayokara.info/note/view/325
http://mayokara.info/note/view/325#comment
http://mayokara.info/note/view/325#trackback
$ cat feeds
http://mayokara.info/note/rss2
$ cat //h2/a/@href
http://mayokara.info/note/view/325
http://mayokara.info/note/view/324
http://mayokara.info/note/view/323
http://mayokara.info/note/view/322
http://mayokara.info/note/view/321
http://mayokara.info/note/view/320
http://mayokara.info/note/view/319
http://mayokara.info/note/view/318
http://mayokara.info/note/view/317
http://mayokara.info/note/view/316
text,links,images,stext,slinks,simages,feeds,next,prevなどは読み込み専用で、現在のページ/選択範囲に対するさまざまな情報を返す。
スラッシュを含む指定はXPathとみなされる。
書き出したファイルはコマンド履歴とは異なり、そのタブを開いている間しか参照できない。
wget & parse
$ cat feeds
http://mayokara.info/note/rss2
$ cat feeds|wget -i -|parse //item/link
wget: waiting for response... http://mayokara.info/note/rss2
wget: HTTP/1.x 200 OK
wget: Date: Sat, 23 Aug 2008 11:38:15 GMT
wget: Server: Apache
wget: Last-Modified: Sat, 23 Aug 2008 11:33:34 GMT
wget: Content-Type: text/xml;charset=UTF-8
wget: Content-Encoding: gzip
wget: Content-Length: 13016
http://mayokara.info/note/view/325
http://mayokara.info/note/view/324
http://mayokara.info/note/view/323
http://mayokara.info/note/view/322
http://mayokara.info/note/view/321
http://mayokara.info/note/view/320
http://mayokara.info/note/view/319
http://mayokara.info/note/view/318
http://mayokara.info/note/view/317
http://mayokara.info/note/view/316
http://mayokara.info/note/view/315
http://mayokara.info/note/view/314
http://mayokara.info/note/view/313
http://mayokara.info/note/view/312
http://mayokara.info/note/view/311
wgetでresponseTextを取得し、parseでXPathを用いて抽出。
wget -i - -l3とすれば、標準入力の3行目を読み込む。
parse -jで入力をJSONとみなし、DOMツリーに変換する。
tako3.comからデータを取得
$ echo http://tako3.com/json/likely/ `pwd`|tr -d " "|wget -i -|parse -j //jsonarray|tee tako3|cat -n
wget: waiting for response... http://tako3.com/json/likely/http://mayokara.info/note/
wget: HTTP/1.x 200 OK
wget: Date: Sat, 23 Aug 2008 11:43:25 GMT
wget: Server: Apache
wget: Content-Type: text/plain
wget: Transfer-Encoding: chunked
1 http://mayokara.info/blog/
2 http://mayokara.info/
3 http://d.hatena.ne.jp/mayokara384/
4 http://mayokara.info/note/
$ open tako3 -l3
現在のロケーションに関する情報をtako3.comから取得する。
番号を振る前のデータをtako3というファイルにtee。
open tako3 -l3で3行目を開く。
echo ...|tr -d " "の代わりにprintf "%s%s" http://tako3.com/json/likely/ `pwd`でも可。
しょぼいカレンダーから直近の番組データを取得
$ wget "http://cal.syoboi.jp/rss.php?titlefmt=$(StTime) $(ChName) $(Title)"|parse //x:item/x:title|head
wget: waiting for response... http://cal.syoboi.jp/rss.php?titlefmt=$(StTime)%20$(ChName)%20$(Title)
wget: HTTP/1.x 200 OK
wget: Date: Sat, 23 Aug 2008 11:44:53 GMT
wget: Server: Apache/2.2.3 (Unix) PHP/5.2.5
wget: X-Powered-By: PHP/5.2.5
wget: Cache-Control: no-cache, must-revalidate
wget: Expires: Mon, 26 Jul 1997 05:00:00 GMT
wget: Content-Type: text/xml; charset=UTF-8
wget: Transfer-Encoding: chunked
08/23 21:00 文化放送(1134) A&G超RADIO SHOW~アニスパ!~
08/23 22:30 TOKYO MX 鉄腕バーディー DECODE
08/23 22:30 キッズステーション NARUTO -ナルト- 疾風伝
08/23 23:00 BS11デジタル 鉄腕バーディー DECODE
08/23 23:00 文化放送(1134) A&Gメディアステーション こむちゃっとカウントダウン
08/23 23:30 BS11デジタル ウルトラヴァイオレット コード044
08/24 00:00 tvk アニメTV
08/24 00:00 BS11デジタル 真ゲッターロボ 世界最後の日
08/24 00:30 tvk 薬師寺涼子の怪奇事件簿
08/24 01:00 tvk 狂乱家族日記
RSS1.0ではデフォルト名前空間があるのでXPathにx:が必要。
Twitterの「フォロー中」にリストされているユーザIDを取得
$ pwd
http://twitter.com/XXXXXX
$ inspect
inspect: 'id("friends")/span[@class="vcard"][1]/a[@class="url"][1]'
$ cat id("friends")//a/@href|cut -d / -f 4
XXXXXX
XXXXXX
XXXXXX
...
inspectでXPathを調べる。左/右クリックで終了。
@href、@srcはAbsolute URLに変換して返される(場当たり的対応)。
外部ファイルによる操作
// ==UserScript==
// @name dot_tishrc
// @namespace http://mayokara.info/
// @description .tishrc
// @include http://*
// ==/UserScript==
(function(){
var Shell = window.Tish;
if (!Shell) return;
Shell.addAlias('tako3', 'printf "%s%s" http://tako3.com/json/likely/ `pwd`|wget -i -|parse -j //jsonarray|tee tako3|cat -n');
Shell.addCommand("hitori-goto", function(STDIN, ARGV, $0){
if (ARGV.length > 0) {
var callback = function(res){
Shell.println($0 + ": " + res.status + " " + res.statusText);
};
GM_xmlhttpRequest({
method: "POST",
url: "http://hitori-goto.appspot.com/say",
data: "comment=" + encodeURIComponent(ARGV.join(" ")),
headers: { "Content-Type": "application/x-www-form-urlencoded" },
onload: callback,
onerror: callback,
});
Shell.println($0 + ": waiting for response...");
} else {
return Shell.exec("wget http://hitori-goto.appspot.com/rss2|parse //item/title", "");
}
});
})();
エイリアスやコマンドを追加できる。
cd、go/open
cdは引数のURLを開く。go/openは標準入力あるいはファイル内のURLを開く。
googleとかhatenaとか
$ google --code printf
http://www.google.com/codesearch?q=printf
$ hatena id:mayokara384
http://d.hatena.ne.jp/mayokara384/
$ hatena b:id:mayokara384
http://b.hatena.ne.jp/mayokara384/
URLを作って返すだけ。