Termtterのプロンプトに関するアイディア
というほど大それたものではないのですが……。
Termtterのプロンプトは、コマンドを入力するとき以外は、出ていなくてもいいんじゃないかな、と思ったのが出発点です。
必要なときは、たとえば":"キーなどを入力すると、タイムラインの流れを止めてプロンプトが現れます。コマンドを入力し終わったら、ふたたびタイムラインが流れます。
「日本語入力中にタイムラインが流れて……」というトラブルを避けることができるでしょう。
ショートカット
しかし、上記のような動作をする場合、":"キーのぶん打鍵数が増えるのが業腹ですね(?)。
そこで、よく使うコマンドは、一発で呼び出せるようにするとよいのではないでしょうか。
たとえば、"u"キーを押すと
update >
というようなプロンプトが現れて、いきなりポストする内容を入力する、というようなものです。
さらに、引数をとらないコマンド("exit", "help", etc...)などは、プロンプトを呼ばずに、そのまま実行してしまうのもよさそうです。
とりあえず
百聞は一見になんとやら、上記のような動作をざっくりと実装してみたので、おひまな方は試してみてください。
ktgy's termtter at master - GitHub
動作については、ruby 1.8.7-p174 + Terminal.app + screenという環境で確認をしています。iTermでも大丈夫でした。
デフォルトでは、以下のような設定になっています。
ショートカット・プロンプト
キー | コマンド |
---|---|
: | なし |
d | direct |
D | delete |
f | fib |
F | favorite |
l | list |
o | open |
p | profile |
R | reply |
s | search |
t | retweet |
u | update |
プロンプトを呼んだ後、なにもせずプロンプトから抜けるには、"Control + d"です。
ショートカット・プロンプトの実体は、"curry"コマンドを呼んでからプロンプトを呼んでいる、というだけです。そのため、通常の"curry"コマンドが使えなくなっています(プロンプトからコマンド実行後、必ず"uncurry"されるため)。
ダイレクト・コマンド
キー | コマンド |
---|---|
c | clear |
L | ラインを引く |
q | quit |
r | replies |
? | help |
Esc | screenのcopyモードを呼ぶ(screen上での動作を想定) |
問題点
- たぶんWindowsでは動きません
- Win32APIを使えば可能?
- プロンプトが出ないぶん、動作が分かりづらいかも
- 起動時に、簡易ヘルプのようなものを表示するとか?
- ショートカット・プロンプトでは、タブ補完がうまくいきません
twitterのタイムラインを読み上げる、saykanjiプラグインを書いてみた
saykanjiコマンドがおもしろそうだったので、termtterのsayプラグインを下敷きに、saykanjiプラグインとして仕立ててみました。
とりあえず、Mac OS Xにのみ対応していますが、ちょっと手をいれれば、他のOSへの対応もできそうな気もします。
下準備
SayKanaコマンドとMeCabが必要です。
SayKanaはzipアーカイブをダウンロードして展開、pkgファイルからインストールしてください。
MeCabはソースからインストールする場合はMecabのサイトを参考に、MacPorts経由でのインストールは、以下のような感じでいけると思います。
% sudo port install mecab +utf8
いずれの場合も、UTF-8をあつかえるようにインストールしてください。
使い方、設定など
とりあえず、"~/.termtter/config"で"t.plug 'saykanji'"すれば、タイムラインを読み上げてくれると思います。
### 設定例 # 読み上げスピード。値が大きいほど、スピードが速くなります。 # 100が標準で、50から300までの値をとれます。 config.plugins.saykanji.say_speed = '200' # 指定したユーザを読み上げます。 config.plugins.saykanji.user_to_say = ['p2pquake', 'jihou'] # キーワードを含む投稿を読み上げます。 config.plugins.saykanji.keyword_to_say = ['地震', /^@user_name/] # ユーザ名、キーワードをいずれも設定しなかった場合、すべての投稿を読み上げます。
英語の読み上げ
SayKanaは、英語の読み上げができません。ですから、以下のような形式の辞書を用意することで、対応します。
"あっと","@" "ついったー","twitter" "たんぶらー","tumblr" "ふりっかー","flickr"
辞書は"~/.termtter/tmp/"の中に、"kana_english_dict.csv"という名前で保存してください。文字コードはUTF-8です。
NADの部屋2。にて配布されている、NADのカタカナ英語辞書10.6に同梱されている、「NADのカタカナ語10.6.txt」を流用することもできます(参考:バイリンガルなsaykanjiにしておく - ザリガニが見ていた...。)。その際は、文字コードをUTF-8に変換することを忘れないでください。
英語の読み上げは単語単位ですので、
"ついったったー","twitter user"
などとしても、読み上げてはくれません。
また、ポスト中のユーザIDなども読み上げることができます。たとえば"@yamadaichirou"さんのIDを読み上げるなら
"やまだいちろう","yamadaichirou"
などとします(@は含めないでください)。
ただし、"@yamada_ichirou"さんのように、IDに_(アンダーバー)を含む場合、その部分は単語の区切りと認識されてしまうので
"やまだ","yamada" "いちろう","ichirou"
というような形で、対応してください。
感想
漢字の読み違いなどはあるものの、思っていた以上にちゃんと読んでくれるので、楽しいですね。
とはいえ、のべつまくなしに喋らせるとちょっとうるさいので、実用性を考えるなら、アラート的な使い方がよいでしょうか。
どうでもいいことですが、ぼくがはじめてタイムラインの読み上げをさせたとき、いきなり「ちんちんがいたい」なんてしゃべりはじめて、どうしてくれようかと思いました。twitterは、おそろしいところです。
MeCabについては、Rubyバインディングが用意されているので、そちらを使うのが本当かもしれません。でも、ちょっと面倒そうだったのと、よみがなを得るためだけにそこまでしなくても、ということで今回は使いませんでした。
typable_idプラグインを書いてみた
termtterは大変に便利なのですが、IDを直接指定するタイプのコマンドの入力が面倒だったので、それを補助するプラグインを書いてみました。これは、tig.rbの機能をまねして作ったものです。
typable_id.rb from ktgy's termtter-plugins - GitHub
これはなに?
termtterのタイムラインのstatusごとに、簡単な仮IDを付与してあげることにより、仮IDを入力するだけでstatusを指定できるようにするものです。当初は、completion_procで補完のために使うことを想定していたのですが、typable_id自体がステータスを持つようにしたため、statusに対して何かしたい場合にも使えるようになりました。
ただし、あくまで仮IDですので、流速がはやい場合などは数分で上書きされてしまいます。ですから、「目の前のstatusをサッと指定したい」という目的のみに割り切って使うのがよいでしょう。
デフォルトの仮IDは、規則性や打鍵数の少なさから、訓令式のローマ字にしてみました。カスタマイズできますので、自分の「手クセ」に合ったものにしたり、仮IDの保持数を変えたりできます。
どうつかうの?
このプラグインは単体では何の役にもたちません。このプラグインと連携するコマンドを用意して、はじめて効果を発揮します。
とりあえず、typable_id.rbを"~/.termtter/plugins"に入れて、~/.termtter/configに
config.plugins.stdout.timeline_format = '<90><%=time%></90> <<%=status_color%>><%=status%></<%=status_color%>> <90><%=id%>[<%=Termtter::Client.typable_id_convert(id)%>]</90>' plugin 'typable_id'
と記述すると、タイムラインが以下のように表示されるとおもいます。
(12:34:56) screen_name: ここに投稿内容が 1234567890[ka]
末尾の[ka]がこの投稿の仮IDです。たとえば、
> command ka
と入力してやると、1234567890というIDのstatusに対してcommandが実行される、というようなイメージです。
また、
> command ka
と入力したところで[Tab]を押下することにより
> command 1234567890
に補完されるという使いかたも、termtterらしくていいですね(上にも書きましたが、最初はこういう使いかたを想定して作りはじめました)。
サンプル
これだけではしょうがないで、サンプルとしてstatusに含まれるurlを開くプラグインを書いてみました。
typable_idと連携するopen_urlプラグインを書いてみた
typable_idでstatusを指定して、そのstatusに含まれるURLを開く、というプラグインです。"open_uri"メソッドはuri-openプラグインからそのままコピーしたので、Debian環境でのバグもそのまま引き継いでしまっているとおもいます(手元に環境がないので、テストできていません)。
また、typable_idプラグインがないと動作しません。*1依存関係など、ちゃんと処理するべきだとおもうのですが、うまいやりかたがおもいつきませんでした。
open_url.rb from ktgy's termtter-plugins - GitHub
つかいかた
(12:34:56) screen_name: http://www.google.com 1234567890[ka]
上記のような投稿があったとして、
> open_url ka
で、http://www.google.comが開きます。また、
> open_url ka
と入力して[Tab]を押下すると
> open_url 1234567890
に展開します。そのまま[Return]で、やっぱりhttp://www.google.comが開きます。
*1:追記:typable_idがなくても動くようにしました
retweetプラグインを書いてみた
クライアントの違いや文化の違いなどもあってか、ReTweetを積極的に行う日本人ユーザは少なかった印象がありましたが、最近わりとみかけるような気がします。
ということで、retweetプラグインです。
retweet.rb ktgy's termtter-plugins - GitHub
基本フォーマットは、わりと一般的だとおもわれる、"RT @screen_name: text"という形にしてみました。もちろん、好きなようにカスタマイズすることができます。
gitをインストールしてみた。
せっかくコードを書くようになったので、バージョン管理システムを使ってみることにしました。
ひとくちにバージョン管理といってもいろいろありますが、最近はあちらこちらでgitおよびgithubの話題をみかけるというのもあって、gitにしてみました。「はやりモノ」というのは、情報が手にはいりやすい、という利点もありますね。
ということで、今回はこちらの記事を参考にさせていただきました。
はじめてのgithub - blog.katsuma.tv
以下はリンク先の記事をなぞったものなので、「これからgitをインストールしよう」という方は、リンク先の記事をご覧になることをおすすめします。
インストール
% sudo port -d install git-core
MacPortsが入っていれば、まずはこれだけで入ります。
variants各種は、必要になったらあらためて入れてみることにします。
とりあえず、
% git version
してみて、
git version 1.6.2.2
と表示されたので、大丈夫のようですね。
忘れないうちに、nameとemailを登録しておきます。
% git config --global user.name "ktgy" % git config --global user.email ktgy1016@gmail.com
githubの登録
せっかくgitをつかうのですから、githubにも登録しましょう。
先に、Gravatarへの登録(アイコン画像がほしい場合)と、SSH鍵の作成(まだ作っていない場合)を済ませておいたほうがスムーズかもしれません。
SSH鍵は
% ssh-keygen
で作成して、
% cat ~/.ssh/id_rsa.pub|pbcopy
とすることで、公開鍵をクリップボードにコピーできます。
githubの登録は、Freeのプランにしました。
レポジトリの作成
ぼくが書いたコードは、このBlogで公開したものくらいなので、それをまとめたレポジトリを作ってみました。*1
githubからの公開レポジトリの作成はこちらから。
"termtter-plugins"という名前で作ってみます。
すると、その後にするべき作業が提示されるため、それに従って作業します。
"~/git"というディレクトリを作って、その中にローカルレポジトリを作る、という形にしてみます。
% mkdir -p ~/git/termtter-plugins % cd ~/git/termtter-plugins % git init
としたうえで、"~/git/termtter-plugins"内に管理したいファイル置きます。そして、
% git add * % git commit -m 'first commit' % git remote add origin git@github.com:ktgy/termtter-plugins.git % git push origin master
で、こうなりました。
ktgy's termtter-plugins at master - GitHub
ひとまず今回はここまで。
*1:これらは、termtter本体をforkして、それにcommitする形にするのがよいのでしょうか? そのあたりは、またおいおい