遅れてきた人によるメモ

遅れてきた人は危険がいっぱい

Mac Tips その10 〜ログイン画面のトラックパッドのクリックをタップにしたかった…〜

ログイン画面のトラックパッドが辛抱ならん

Macのログイン時のカーソル移動速度が気になってしまったので調べたらAppleコミュニティー(Mouse Speed at Login)にあったのですが、OS X Mountain Lionでは使えなかったです。ログイン画面での、トラックパッドの速度を設定する"com.apple.trackpad.scaling"の値がどこを参照しているのか分かりませんでした。/var/root/Library/Preferences/.GlobalPreferences.plist を参照していると思ったのですが、ここを変更しても変わらず。というわけで、Macのログイン画面のここが気に入らない! をあげると、2点

  • トラックパッドの速度が遅すぎる
  • トラックパッドのクリックをタップにしたい
調べてみたところ、速度を上げる方法は分からなかったのですが、トラックパッドのクリックをタップに変更する方法は、ここにありました。 

Terminalにて、

$sudo defaults write com.apple.driver.AppleBluetoothMultitouch.trackpad Clicking -int 1

とすれば、無線のトラックパッドは、次からログイン時に反映されてタップするだけでクリックになります。この設定は、/var/root/Library/Preferences/com.apple.driver.AppleBluetoothMultitouch.trackpad.plist にあるClickingに1が変更されます。iMacで使っていたトラックパッドではうまく言ったのですが、残念なことにMacBook Airのトラックパッドはタップが有効になりませんでした。もう少し調査しようかと思います…

ご存知の方がいたらご一報を。

MacでClozure CLを使ったGUIの作成 〜その1 サンプルを動かしてみよう〜

久々すぎて自分がどんなテンションで書いていたか忘れました。

唐突にMacintosh Common Lisp(MCL)について

 Macintosh Common Lispは、Macで動くCommon Lispの実装です。2009年にオープンソースになって、Clozure CLが派生しました。MCLについては、『プログラミング言語Lisp入門からマルチメディアまで』をパラパラめくるとMacに特化されたトピック盛りだくさんで面白いのですが、当然、OS X Mountain Lionなんかでは動かないので歴史的資料みたいなことになってます。 

Clozure CLでGUI

Macでアプリケーションを作りたいと思った場合は、Xcodeを使ってObjective-Cが一番楽だと思います。しかし、Common Lispで作ってみたいという思ったりするわけで、今回は、MCLの派生であるClozure CLに添付されたサンプルを使ってGUIを呼び出して喜んでみるのが目的です。ついでに、いちいちLispを使って呼び出すのは面倒なので、アプリ作成までやっていきたいと思います(Clozure CLのバージョンは1.9です)。

色々制限はあると思いますが。Common LispGUIつきのMacのアプリを作成するには、多分これが一番楽だと思います。

Mac限定なのは、名目的に汎用性のあるCommonQtを使おうとしたけどClozure CLでは動かなかったし、QtのGUIが好きじゃなかったからです。

さっそく動かしてみる 

f:id:jiroukaja:20130414221405j:plain

今回はClozure CLに入っているexamplesの中のCurrencyConverterを動かしてみましょう。MacVimのSlimvで試したところですが、SilmeでもTerminalでもいいと思います。Clozure CL ver.1.9をHomebrewでいじらずに入れた場合は、/usr/local/Cellar/clozure-cl/1.9/ccl/examples/cocoa/currency-converter/にあります。

上のコード(2つのうち上)をccl64で実行すると、同じディレクトリにCurrencyConverter.appが作成されます。最後まで実行するとccl64は終了して60MB弱のファイルができます。

ちなみに、2番目であるccl::build-applicationのキーワードに「:directory #P"/Users/ユーザー名/Desktop/"」を追加したものを実行するとデスクトップに作成されます。

f:id:jiroukaja:20130414222546j:plain

ccl::build-applicationのキーワードに、nibファイルというものをでてきましたが、アプリ画面の表示を設定するファイルでXcodeで作るものです。Xcodeでnibファイルを作成する場合、直接nibファイルを作成することはできないみたいなので、一度、xibファイルを作成して、それをエクスポートすることでnibファイルが作成できます。また、アプリのContentsを見ると、OpenMCLという単語が出てきますが、Clozure CLと同じものと受け取っていいみたいです。

CurrencyConverter.appを開いてみるとアプリが表示されます。22ドルを円換算(98.8924051)してみました。

f:id:jiroukaja:20130415000030j:plain

解説が本家サイトのBuilding the Applicationにありますが、場所が違ったりして動かなかったり、(require :COCOA)がなかったりしますので注意してください。

cf. 5.6. The Application Builder

ロードしたcurrency-converter.lispの中身を見ると、objc:defmethodで、Objective-Cのmethodを#/に続ける形で定義しているのが分かります。ccl::build-applicationは、/usr/local/Cellar/clozure-cl/1.9/ccl/cocoa-ide/build-appcation.lispにあるので、これを眺めてもいいかもしれません。

cf. 14.6. Defining Objective-C Methods

問題点は、単純なアプリでも60MB弱あるということでしょうか。Objective-CとClozure CLとの連携がどのようになっているのかよくわかっていないので、今後、何か分かったらアップしたいと思います。Common LispファイルでObjective-Cの補完候補をどうやって出そうかな。

MacVimでKeyRemap4MacBook使って日本語入力を制御する話

入力キーを変更する方法

入力キーの設定をいじる場合、

  • そのアプリ内の設定で変更する
  • OS標準の設定で変更する

という2種類が基本なわけですが、

  • キー入力を制御するアプリをかまして入力そのものを変化させる

という方法もあります。最後の手段は、本当に最終手段なためあまり好きではないのですが、アプリ内で設定が存在していなかったり、OS標準の設定で変更できない場合のような、にっちもさっちもいかなくなったときに便利なことがあります。MacVimでことえりの制御が難しそうだったのと、OS標準の設定は、アプリとして継承していないと。MacのOS標準の変更する場合はこちら。OS標準の方の変更は、StandardKeyBinding.dictを編集するのが面倒になってきたので、~/Library/KeyBindings/DefaultsKeyBinding.dictを作って、必要なものだけ追加するようにしました。

KeyRemap4MacBook

KeyRemap4MacBookは、入力されたキーを受け取って、それを解釈後、定義にあるキー入力に変更してくれるというもの。Aとタイプしたら、Bを押したように変更してくれるし、B, Cと複数のキーを入力したかのようにもしてくれる。また、特定のアプリ(only)によっては、Dと入力したように振り分けたり、特定のアプリ以外(not)など、割と融通がきいてくれる。他にも、キーを押し続けた際のタメと入力間隔も制御できたり、入力デバイスごとに制御できたりと、独裁者のごとく振る舞うことができます。

MacVim諸々の設定

KeyRemap4MacBookをインストールしたら、右上に四角いマークが表示されます。その「Open KeyRemap4MacBook Preferences...」を選択後、Misc & Uninstallタブに、Custum Setting --> Open private.xml があるので、そこに独自設定を入力すればいいです。private.xmlの書き方は、英語のマニュアルが分かりやすいし、Githubでも作者の方がコードを公開してるので、そこらへんを調べたらよいかと思います。

とりあえず、MacVimで日本語入力(Hiragana入力)になっているとき、escキー or Ctrl-[ をタイプしたら、ノーマルモードかつ英数入力(Romaji入力)になる設定(太字箇所)を作ってみました。

<?xml version="1.0"?>
<root>
  <item>
    <name>Change the Input Method Mod Shift-Ctrl-J, Shift-Ctrl-;</name>
    <identifier>option.IME</identifier>
    <autogen>--KeyToKey-- KeyCode::J, ModifierFlag::CONTROL_L | ModifierFlag::SHIFT_L, KeyCode::JIS_KANA</autogen>
    <autogen>--KeyToKey-- KeyCode::SEMICOLON, ModifierFlag::CONTROL_L | ModifierFlag::SHIFT_L, KeyCode::JIS_EISUU</autogen>
  </item>
  <item>
    <name>MacVim Setting</name>
    <identifier>option.MacVim_Setting</identifier>
    <only>VI, TERMINAL</only>
    <autogen>
      --KeyToKey--
      KeyCode::ESCAPE, KeyCode::JIS_EISUU, KeyCode::ESCAPE
    </autogen>
    <autogen>
      --KeyToKey--
      KeyCode::BRACKET_LEFT, ModifierFlag::CONTROL_L, KeyCode::JIS_EISUU, KeyCode::ESCAPE
    </autogen>    
  </item>
  
  <item>
    <name>Vim Keybinding on Mac OS X Mountain Lion</name>
    <identifier>option.Exchange_Ctrl-[_to_ESC</identifier>
    <autogen>--KeyToKey-- KeyCode::BRACKET_LEFT, ModifierFlag::CONTROL_L, KeyCode::ESCAPE</autogen>
  </item>
 
  <item>
    <name>DefaultKeyBindings Emacs on Mac OS X Mountain Lion</name>
    <not>VI, TERMINAL</not>
    <identifier>option.DefaultKeyBindings</identifier>
    <autogen>--KeyToKey-- KeyCode::B, ModifierFlag::CONTROL_L, KeyCode::CURSOR_LEFT</autogen>
    <autogen>--KeyToKey-- KeyCode::N, ModifierFlag::CONTROL_L, KeyCode::CURSOR_DOWN</autogen>
    <autogen>--KeyToKey-- KeyCode::P, ModifierFlag::CONTROL_L, KeyCode::CURSOR_UP</autogen>
    <autogen>--KeyToKey-- KeyCode::F, ModifierFlag::CONTROL_L, KeyCode::CURSOR_RIGHT</autogen>
    <autogen>--KeyToKey-- KeyCode::M, ModifierFlag::CONTROL_L, KeyCode::RETURN</autogen>
    <autogen>--KeyToKey-- KeyCode::H, ModifierFlag::CONTROL_L, KeyCode::DELETE</autogen>
  </item>
 </root>

とりあえず、太字にした箇所が、MacVimで日本語入力がオンになっていた場合。そこだけ抜き出して上書き保存してChange KeyタブのReroadXMLボタンをクリックして読み込むと「MacVim Setting」なる何も考えてなさそうメニューが出てくるのでそこにチェック入れたら即反映されます。ほかのは、OS標準だと Ctrl-[ に :cancelOperation を設定しても、アプリ全てに反映されるというわけではないため escキーに強制的に変換してしまおう、というのとFinderとかでも、Ctrl-n, p, f, bが最低限使えるにようにしたかったのでそういう設定を追加しただけです。KeyRemap4MacBookにもオプションがあるので、そちらを使用する場合は、削除してください。本当は、hjklで移動したいのですが、他のキー押しながら移動することに抵抗があったため、Mac標準でいいや…になりました。ここら辺、このアプリのこの場所では、〜したいみたいなことができないため、不便ですね。

注意事項

アプリで設定できることは極力アプリで設定した方がいいです。また、<only>, <not>がありますが、そのキー入力を完全に変えてしまうものなので、KeyRemap4MacBookでの設定は必要最低限にすべきです。アプリで、〜 is not working! な状態になった場合は、ここの設定が影響している可能性をまず疑いましょう。

htmlファイル、MacVimときどきSafari

htmlファイルをMacVimで編集しながらSafariで確認しつつ作業をすすめるには、どうしたらいいんだろうと思ったので少し調べてみた。

nnoremap <leader>] :!open -a Safari %<CR><CR>  追記(2012/12/14) これは間違い!

これでファイル(%)編集中に、ノーマルモードで \] とタイプするとSafariで表示されるようになります。\] にしたのは、キーが近かったというだけなので、たいした意味はないです。一番後ろの<CR>は、<CR>が1つだとPress ENTER or Type command to continue が表示されるから。Safariの箇所を、firefoxとかchromeとかにすればいいです。

以上、解散!

余談: tyruさんのopen-browser.vimを入れているので、

let g:openbrowser_open_commands=["open -a Safari"]  追記(2012/12/14) これも間違い!

とした後に、:OpenBrowser % とかでどうにかなるかと思ったのだけど、テスト段階のuriで .htmlをMacVimに関連付けていたらMacVimで開いてしまったりuriの処理が面倒そうなため諦めました。

 

mattnさんのzencoding-vimが大活躍。

■追記 2012/12/14

tyruさんからコメントをいただき、twitterでも教えていただきました

まず、open-browserで自分自身を開く場合は、:OpenBrowser %で開けます。ただし、通常は何も設定していないとg:openbrowser_open_vim_commandvsplitが設定されていてVimで開いてしまうため、

let g:openbrowser_open_filepath_in_vim = 0

を設定して、vimで開かないようにする必要があります。次に、.htmlをMacVimに関連付けて設定すると、openだけではMacVimで開いてしまう(何もアクションが起きない)ため、

let g:openbrowser_open_rules = {'open' : 'open -a Safari {shellescape(uri)}&'}

を設定しました。g:openbrowser_open_rulesで、open -a Safariとするとのが、正しいやり方のようです。ここらへんの使い方がよく分からなったので参考にどうそ。というわけで、tyruさんにほとんど教えてもらったものを総合すると、

let g:openbrowser_open_filepath_in_vim = 0
let g:openbrowser_open_rules = {'open' : 'open -a Safari {shellescape(uri)}&'} nnoremap[ :silent OpenBrowser %

このようになります。

tyruさんありがとうございました!

Mac Tips その9 〜Safari6 アドレスバー表示辞めました〜

■結論

色々試した結果、Safariはアドレスバーを含むツールバーの非表示

  • View > Hide Toolbar (Option+Cmd+T)
  • View > Hide Bookmarksbar (Shift+Cmd+B)
  • View > Hide Tab bar (Shift+Cmd+T)

に至ったのですが、なぜそこに至ったかを書いてみたいと思います。

 

■発生した問題点

  • Empty Pageで検索するとアドレスバーにカーソルのフォーカスが残る

これに尽きます。なぜこれが問題かというと、Mac Tips その6で取り上げたブラウザでの検索方法の設定で楽になってもまだ若干面倒くさいからです。

たとえば、「遅れてきた人によるメモ」をカーソルで選択して Shift+Cmd+.(ドット) で検索すると、Empty Pageに検索語句が渡されて検索されるらしく、そうなるとなぜかアドレスバーにカーソルのフォーカスが残ります。たとえば「1画面移動するSpaceバーがすぐ押せない!」ってことになりとても不便です。

※Shift+Cmd+.はMac Tips その6で設定したショートカットキー

f:id:jiroukaja:20121014132545j:plain

私の場合、vimlike-onsafariを入れてjkjkしてるため、もっと切実だったりします。

 

■押してだめなら引いてみろ

最初は押して解決しようというわけで、アドレスバーにカーソルがあった場合、どうやってウインドウにカーソルを持っていくかを考えていたのですが、Tabキーでの移動だとウインドウ内にテキストボックスがあったらそこにカーソルが移ってしまってSpace押しても1画面移動とか、画面のリンク先になってない箇所をクリックしてアドレスバーのフォーカスを解除とか、筋の悪そうなものしかなかった。

押してだめだったので、気分転換でView(表示)欄をいじっていてアドレスバーを消すに至りました。

 

■ こんなんで大丈夫なの?

f:id:jiroukaja:20121014133214j:plain

アドレスバーもツールバーもブックマークバーもタブバーも表示されていないSafariです。検索したいときやアドレスを入力したいときは、Cmd+Lでアドレスバーが表示されます。

f:id:jiroukaja:20121014133354j:plain

しかし、ユーザーが Cmd+L をしない限りアドレスバーは表示されないため、

Shift+Cmd+. で検索してもアドレスバーにフォーカスがあたることはありません。

f:id:jiroukaja:20121014134941j:plain

これで、Spaceでもjkjkでもすぐにできます。

やったね。

 

■余談: 非表示という考え方

最近は、携帯電話やiPadのような比較的画面が小さなものが普及して「本当に必要な表示情報とは何か?」が共通認識になり始めているかと思います。実際、私にとっては、アドレスバーを含むツールバーやブックマークバーは、志向の範囲外では非表示であっても構わないという結論に至ったわけです。表示したければ、Cmd+L, Option+Cmd+Tで表示できるし。常に表示するものこそ、真っ先にコストとして考えないといけないものだと思います。

Safariに関して分散してしまってるから1つにまとめてみようかな。

Mac Tips その8 〜Safari6 Extensions〜

■Safari6yよりSafari5の方が…

Mac Tips その6は、Safari5.1でMountain LionからはSafari6がインストールされるようになっています。基本的には拡張機能Safari Extensionsは引き継いで使用できるのですが、Safari6では、Safari Omnibarが使えなくなりました。

需要はあると思ったので動向を見守っていたのですが進展もなく、いい加減、この不便な現状をどうにかしたいと思ったので、とりあえずSafari Extentionsから探してみることに…

■KeySearch

f:id:jiroukaja:20121003033006p:plain

すんなり見つかりました代替手段。このKeySearchをインストールすると虫眼鏡ボタンが表示されます。クリックすると検索バーが出現しますが、検索にこれは使いません

f:id:jiroukaja:20121003033219p:plain

右のギア --> Setting で表示されるウインドウの[Enable KeySearch via address bar]にチェックがついていると、アドレスバーに「キーワード 検索語」とすれば検索されます。

KeySearchサイトトップのスクリーンショットには存在していないので、追加された機能だと思います。

f:id:jiroukaja:20121003033534p:plain

右のギア --> Edit Keywords で、keywordが設定できます。ここで設定をします。検索タームが「@@@」であること以外は、Safari Omnibarでの設定と変わりありません。

f:id:jiroukaja:20121003034831p:plain

Keywordsウインドウ左下のギアから、Import Keywordsを選択すると、コピペで導入できるらしいです。Import keywords fromでは、一番下のKeySearchを選択して下のものをペーストすると、Importできるらしい。

たとえば、上のKeywordの設定だとSafariのアドレスバーに「a common lisp」と入力すると、amazon.co.jpで「common lisp」を検索してくれます。Cmd+lを使ってアドレスバーに移動して検索。便利だね。

ただし、Safari Omnibarでは、アドレスバーに「a 」と入力したら「|Amazon.co.jp|」のように変換されるけど、SearchKeyでは現在のところそういうことは起こらず。ちょっとさびしいね。

 [
    {
        "keyword": "default",
        "name": "default",
        "url": "http://search.yahoo.co.jp/search?p=@@@&ei=UTF-8",
        "enabled": true,
        "shortcut": ""
    },
    {
        "keyword": "r",
        "name": "reddit",
        "url": "http://www.reddit.com/search?q=@@@",
        "enabled": true,
        "shortcut": ""
    },
    {
        "keyword": "wiki",
        "name": "Wikipedia",
        "url": "http://en.wikipedia.org/w/index.php?search=@@@",
        "enabled": true,
        "shortcut": ""
    },
    {
        "enabled": true,
        "keyword": "ac",
        "name": "Amazon.com",
        "url": "http://www.amazon.com/s/field-keywords=@@@",
        "shortcut": ""
    },
    {
        "enabled": true,
        "keyword": "t",
        "name": "Twitter Realtime",
        "url": "http://realtime.search.yahoo.co.jp/search?&p=@@@&ei=UTF-8",
        "shortcut": ""
    },
    {
        "enabled": true,
        "keyword": "a",
        "name": "Amazon.co.jp",
        "url": "http://www.amazon.co.jp/s/field-keywords=@@@",
        "shortcut": ""
    },
    {
        "enabled": true,
        "keyword": "h",
        "name": "HyperSpec",
        "url": "http://www.lispworks.com/cgi-bin/search.cgi?q=@@@&cmd=Search%21&t=-D--HB-",
        "shortcut": ""
    }
]

■余談

Keywordsウインドウ左下のギアで、「Import Keywords」でも「Export Keywords」でもない箇所をクリックしてしまうと真っ白なウインドウが表示されてしまうバグに遭遇。そんなときは、Cmd+,で環境設定表示してExtensionsタブのKeySearchにある「Enable KeySearch」のチェックを一度外してつけ直すと元に戻ります。

Mac Tips その7 〜多重ウインドウめぐり〜

どうもMacだとブラウザでは、新規に開くときタブよりも新規ウインドウの方が好きです。そうなるとウインドウの移動ショートカットを考えないといけなくなるので、今更ながら重い腰をあげて調べてみました。

環境設定 > Keyboard Shortcutsタブ > Keyboard &Text Input項目 > Move focus to next window

これが該当項目らしい。

f:id:jiroukaja:20120817000936p:plain

*初期設定だとCmd+F1が設定されています。

ファンクションキーって使えないよねー というわけで、Ctrl+Tにしちゃいました。

これは、別にSafariに限ったことではなくFinderとか知らない間に多重ウインドウになってしまっているものでも使用可能。理由は特にないです。単にタブっぽい気分になりたかっただけです。

[余談]ちなみにCtrl+Tは、Macでは文字入力の際、カーソル左1つ隣と2つ隣の文字を入れ替えます。おそらく、単語入力で「as」を「sa」とうってしまった後にでも使ったりするのでしょう。日本語では出番なさそうですね。