さあタブバーを捨ててウィンドウパネルを使おう

「えーまじタブバー!?キモーイ!タブバー使っていいのはGoogle Chromeユーザーまでだよねー!キャハハハハハ!!」と女子高生に言われた気がしたので先進的なOperaユーザーのみなさんはウィンドウパネルの使い方を学びましょう。

ウィンドウパネルにはタブバーが全く敵うことのない機能が備わっているのです。

タブを検索できる

これだけでウィンドウパネルの大勝利です。躊躇せずにアルファバージョンをインストールしてしまうようなOperaユーザーともなれば、開いているタブの数は常時100を超えるという統計があります。その100の中から目的のタブを開くときあなたはどうやって選択しますか?まさか、いちいちタブの名前を自分で探して選択するんですか。それは愚行です。時間の無駄です。さあウィンドウパネルを使いましょう。ウィンドウパネルのクイック検索を使えば開いているタブ一覧からタイトルおよびURLで検索できます。開いているタブが100個を超えていようが余裕です。複数のウィンドウに分かれていようが余裕です。全てはウィンドウパネルが解決してくれます。




ウィンドウ分けたりしねーしタブスタッキングあるから整理できるし、などと言っちゃうにわかOperaユーザーにはウィンドウを分けることでセッションの管理が楽になるという利点を説きましょう。セッションはウィンドウごとに分けて保存できます。何かひとつのことについて調べるときはとりあえず新しいウィンドウを開きそのウィンドウはそのテーマ専用にしてしまい、ひと通り調べたあとにそのウィンドウをセッションに保存しておくと、後日調べるときにそのセッションを開くところから始めればいいので同じような検索を繰り返す必要がなくなります。ああ、もちろんウェブの情報はいつ消えるかわからないので、本当に必要なものはEvernoteなりなんなりに保存しておくべきですが。

ウィンドウパネルの凶悪な罠と回避方法あるいはより洗練させる設定

ウィンドウパネルの優れた機能を知ったあなたはもうすでにウィンドウパネルを表示させているかもしれませんがここで注意すべきことがあります。それは、ウィンドウ-タブツリーのウィンドウの部分にフォーカスが当たっているとき(下図)に、
Command w
( Windowsユーザーなら
Control w
) を入力するとウィンドウが閉じられるというものです。一気に100個以上のタブが閉じられるのです。こうなったらもう
Command z
を押して復帰させることもできません。Operaさんまじ鬼畜っす。

Operaさんの鬼畜っぷりは今に始まったことではないので甘んじて受け入れるとして、なにか回避する方法はないのでしょうか。もちろんあります。Operaさんまじ懐深いっす。

キーボードショートカットの設定を変更しましょう。ショートカットを追加する箇所はWindows Panelです。ここに
w Command
( Windows ユーザーなら
w Control
) を追加して標準の挙動を上書きします。アクションとしてはなんでもいいのですが、ぼくはとりあえず害を与えそうもない
Open all items
を指定してます。重要なのはウィンドウパネル内で有効なアクションを指定しすることです。 追記
Backspace
でもウィンドウが閉じてしまうので同様になにか設定したほうがいいです。

さて、上記の設定を行えばとりあえず問題は回避できます。が、ついでなのでもうちょっと便利にしておきましょう。タブ移動を行う場合、ウィンドウパネルのクイック検索で適当に入力して対象を絞ったあとで選択して表示するというのが基本的な操作になります。この一連の操作をスマートに行えるようにしましょう。

まずはフォーカスを当てるアクションです。以下のアクションを適当なキーにマッピングしましょう。追加する箇所はApplicationです。

Focus panel, "windows" & Focus next widget & Focus panel, "windows" & Focus previous widget
ウィンドウパネルが標準のレイアウトの場合は上記のアクションで問題ないのですが、レイアウトを変更してクイック検索がウィンドウツリーの上にない場合は
Focus next widget
Focus previous widget
の部分を適宜変更する必要があります。

あと、なんで2回もFocus panelが出てくるんだろうと思うかもしれませんが、これでいいのです。理由をちゃんと書くのが面倒なので省略しますが、簡単に言うと以下のアクションだとうまくクイック検索にフォーカスが当たらないことがあるからです。

Focus panel, "windows" & Focus previous widget
ちなみにマッピングですが、ぼくは
;
に当てています。Vimコマンドラインモードに移るときと同じキーマッピングですね。


さて、最後にAdvanced > Tree Widgetにもショートカットを追加します。クイック検索で候補を絞ったあとツリーにフォーカスを移すためには
Tab
を押すので、そのまま
Tab
を連打して選択するページを移動させられたほうが便利だろうという考えです。
Tab
に対しては以下を設定します。
Next item | Go to start
そして
Tab Shift
に対しては以下を設定します。
Previous item | Go to end
これで
Tab
を押したら下へ、
Tab Shift
を押したら上へフォーカスが移るようになります。
Go to start
Go to end
がついているのは、例えば一番下まで行ったときには一番上に移動して欲しいからです。


これで、
;
を入力してウィンドウパネルのクイック検索にフォーカスを当てて、適当に単語を入力して候補を絞ったあとで、
Tab
でツリーにフォーカスを当て、そのまま
Tab
を連打して目的のタブまでフォーカスが移ったら
Enter
を押して表示させる、といった一連の操作でタブが100個以上ある環境でも容易に目的のタブを表示させることができるようになりました。やりましたね!

Operaへの要望

  • クイック検索で実際に表示しているページの内容からも検索したい
  • タブスタッキングでまとめたタブをまとめて別ウィンドウに移したい
  • クイック検索でMigemo検索したい

おわりに

えーまじタブバー!?キモーイ!タブバー使っていいのはGoogle Chromeユーザーまでだよねー!キャハハハハハ!!

Twitter for Mac の URL スキームまとめ

適当に入力して見つけたもの

twitter://post?message=hoge tweet作成ウィンドウを開きhogeと入力
twitter://timeline timelineを表示
twitter://mentions mentionsを表示
twitter://messages DMを表示
twitter://search?query=hoge hogeで検索した結果を表示

ちなみに Twitter for Mac から上記の文字列を含む tweet をポストしようとするとエラーになるので注意。上記の文字列だけでなく twitter://aa など twitter:// に続けて適当な2文字が連続しているとエラーになる模様。

これ↑をポストしようとするとこう↓なる。

ついでに。Twitter for Mac で見ると上記の文字列はちゃんとリンクになってクリックできようになっている。で、例えば twitter://mentions をクリックするとちゃんと mentions に切り替わるのでちょっと面白い。twitter://post?message=hoge をクリックするとちゃんと tweet 作成ウィンドウが開く。残念ながら hoge/// とよくわらかないスラッシュが3つくっつけど。何に使えるわけはないけど。

unite-alias 作った

寒いね。冬だね。寒い冬は家にこもって unite の source でも作ろうね。

さて、今回は unite-alias という source を作りました。これは、既存の source について引数つきで別名を与えるというものです。何を言っているのかよくわからないですね。実例を挙げましょう。

使い方

.vimrc には以下のように alias を記述します。

let g:unite_source_alias_aliases = {
\   'memo' : {
\     'source': 'file_rec',
\     'args': '~/Dropbox/memo',
\   },
\ }

このように設定しておくと

:Unite memo

としたときに、実際には file_rec に対して args として ['~/Dropbox/memo'] を渡した状態として実行され、その結果が候補として表示されます。ただし候補に表示される source の名前は memo となります。

作った目的

単純に
:Unite memo
としたときに
~/Dropbox/memo
以下を列挙して欲しかっただけです。完全に専用で unite-memo を作っても良かったんですが、もうちょっと汎用的に使えるようにこのような形にしてみました。

もう少し付け加えると、実は memo ディレクトリを開く key mapping も設定しているのですが、案外 key mapping はすぐに忘れてしまうので、わかりやすい名前なら覚えておけるだろうという魂胆です。source にしてしまえば :Unite と入力してタブを押せば名前が補完されるから覚えておく必要も無いですしね。

誤算

args を有効に利用している source が今のところ file_rec しか無いんじゃないか疑惑。まあぼくは今のところ特定ディレクトリに対して file_rec が使えれば十分なので問題ないわけだけど。他の source で args をどのような役割で使うことができたら便利なのかも思いつかないし。

あと、gather_candidates するときに file_rec の gather_candidates を実行する必要があって、そのために file_rec source を取得したかったんだけど、その方法がおそらく無かった。結局 unite.vim のソースの一部をコピーしたりしたけどあまり良くない感じ。これは改善を考える。

unite-mark 作った

vim 史上最も熱い冬をみなさんはどのようにして過ごしていますか? そうですね、熱さの発生源である unite.vim の source 作りに励んでいますよね。
vimscript はよくわからないのですが面白そうだったので unite の source として vim の mark を扱う unite-mark を作成しました。

unite-mark

vim の mark を unite で扱います。

:Unite mark 
とすればカレントバッファにある mark 一覧が表示されます。選択して
すれば mark のある行までジャンプします。


デフォルトで列挙される mark は
[a-z]
だけです。
[A-Z0-9]
>{}[]()
などは列挙しません。これらの mark を列挙したい場合は .vimrc で
g:unite_source_mark_showall = 1
としておく必要があります。このオプションはデフォルトでは 0 になっています。
指定方法が変わりました。以下のように表示したい mark を直接指定します。
g:unite_source_mark_marks = 'abcABC012'
このオプションのデフォルト値は
'abcdefghijklmnopqrstuvwxyz'
です。tyru さんありがとうございました。

作ってみた感想

vimscript がよくわからんというどうしようもない点を除けば unite の source を作るのは簡単でした。もっとも今回はすごくシンプルな内容だったわけですが。

実装に関する不満
具体的なコードの話でいえば、カレントバッファの mark を取得するために
execute 'buffer #'
でバッファを切り替えてからループを回して終わったら unite バッファに戻るために再度
execute 'buffer #'
とやっているあたりがださい。もうちょっとなんとかできないのかと思う。何か方法があるのかもしれないけれど思いつけない程度の知識しかないのが悔やまれる。vimscript を勉強しようと思った。あと、そもそも mark の内容を取得する方法自体よくわからなかった。
:marks
に対応するような function があるかと思って探したけど無かった。残念だった。

まとめ

unite.vim すごい! vimscript わからん!

Opera for Mac の右クリックメニューの「ファイルを開くアプリケーション(Open With)」から MobileSafari を追放する方法

Opera で適当なウェブページを開いているときに「ファイルを開くアプリケーション」のメニューはなかなか便利でぼくは主に Evernote にウェブページを保存するために使っているんですが、あれですよね、MobileSafari とか表示されても困りますよね。いや困らないけど邪魔ですよね。ちなみにUIを英語にしていたら"Open With"と表示さているやつです。

どうせ使わないのに MobileSafari が表示されていてなんかなあ、の図です。

さあ、MobileSafari を「ファイルを開くアプリケーション」から追放しましょう

消すにはMobileSafari.appのInfo.plistを編集する必要があります。

Info.plist を見つける

MobileSafari.app 自体は /Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator4.0.sdk/Applications/ とかにあります。バージョンが違っている場合もあるでしょう。複数バージョン存在している場合もあるでしょう。あったらあるだけ全部消してしまいましょう。

MobileSafari.app が見つかったら、MobileSafari.app を右クリックして「パッケージの内容を表示」します。そこにInfo.plist があります。ただし、ここで単純に Info.plist を開いて編集して保存しようとしても、そのディレクトリおよびファイルに対して書き込みの権限が無いので編集できません。そこでとりあえずデスクトップに Info.plist をコピーしてから編集してそれを元のディレクトリにコピーして上書きします。これが一番簡単な方法だと思います。あと、念のために Info.plist のバックアップは取っておきましょうね。

Info.plist を編集する

さて一番重要な編集する内容ですが、URL types から URL shemes に http と https をもつアイテム自体を削除します。おそらく Item 0 がその項目になっているはずです。下の図で選択されている Item 0 を削除しましょう。再度書きますが一応もとの Info.plist のバックアップは取っておきましょうね。

削除したら

上記の項目を削除して保存したら Info.plist を元のディレクトリに戻しましょう。このときに権限のないディレクトリおよびファイルに書き込むためにパスワードを聞かれるので入力します。

MobileSafari が追放できたか確認してみましょう

さて、Info.plist を上書きしたあとで Opera を再起動すれば見事に「ファイルを開くアプリケーション」から MobileSafari が消えているのが確認できると思います。やりましたね!

万が一もとに戻したくなったら

バックアップを取っておいた Info.plist で上書きしましょう。それで元に戻ります。バックアップ重要ですね。

ぼくがMacBook Airを買った理由

先日、MacBook Airを買わない理由を書きましたが、MacBook Air買いました。よくわからないですね、人間って。さて、理由を書いていきます。

理由1 キーボードがへぼいけど欲しかった

MacBook Airのキーボードはへぼいんですが、そんなの関係なくMacBook Air欲しかったのです!もうちょっと詳しく書くと、店で触るのと実際に机のや膝の上において使うときでは使用感が異なるので、ひょっとしたら満足できる可能性もあるのです。だからキーボードのへぼさは関係ないのです。MacBook Air欲しかったのです。

理由2 CPUとメモリがしょぼいけど欲しかった

MacBook AirのCPUとメモリはしょぼいんですが、そんなの関係なくMacBook Air欲しかったのです!もうちょっと詳しく書くと、SSDのスペックがすごくいいらしいのでCPUとメモリのしょぼさを和らげてくれる可能性もあるのです。だからCPUとメモリのしょぼさは関係ないのです。MacBook Air欲しかったのです。

理由3 ぼくはiPadを持っていないけど欲しかった

ぼくはiPadを持っていませんが、そんなの関係なくMacBook Air欲しかったのです!もう書くのめんどくさいんですけど、MacBook Air欲しかったのです。

まとめ

キーボードがへぼくてスペックがしょぼいMacBookを買いました!11インチです!

裏まとめ

うひょー!!