遅れてきた人によるメモ

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

Mac Tips その13 〜Terminal.app〜

Terminalでなんだったかなーと思ったら…

Terminal.appで補完候補を表示する場合は タブ2回

$ osa[tab][tab]
osacompile    osadecompile  osalang       osascript

※1 何も無い状態でタブ2回押すと「Display all 1747 possibilities? (y or n)」と心の準備を求められる

※2 Shift-Esc, ?の順に押してもタブ2回と同じ効果がある

※3 pathもタブで補完できて、cd /App[tab]で cd /Applications/ が補完され、補完が複数あるときはもう一度タブ押すと候補が表示されます

Terminal.appでどこのコマンド呼び出してるか場所を表示する場合は which

$ which ctags
/usr/local/bin/ctags

※ /usr/bin/ctagsはしょぼいから…

Terminal.appで探したいファイル名がどこの場所にあるか調べる場合は find 場所 -name pattern

$ sudo find /private /Library -name .GlobalPreferences.plist
/private/var/root/Library/Preferences/.GlobalPreferences.plist
/Library/Preferences/.GlobalPreferences.plist

※ 例のように複数指定も可能

Terminal.appで使うコマンドのマニュアルが見たい場合は man

$ man ctags

表示されたマニュアルは、j,kで下上、Ctrl-D,Ctrl-Uで半ページ下上、Ctrl-F, Ctrl-Bで1ページ下上

qで終了

ね、簡単でしょ?

MacVimで辞書を呼び出す話

承前

コマンドラインやvimから言語を指定してDash.appを呼び出すという記事を読みました。私も結構前にDash.appを買って使っているので、早速、.vimrcに入れました。Dashは、open dash://[language]:[word]で呼び出せるとのことですが、Macに入っている辞書も open dict://[word]という形式で呼び出すことができます。どうやら、MacVimでは3本指タップも[Ctrl-Cmd-D]もできないみたいなので、これを使って分からない単語を辞書で調べてみましょう。

効果

f:id:jiroukaja:20130424215845j:plain

使い方は同じで、単語にカーソルがある状態で :Dict とすると、Dictionary search: [word] と表示されます。Returnすると、辞書が呼び出され、検索結果が表示されます。

f:id:jiroukaja:20130424215853j:plain

コードはコチラ

また、:Dict [word]<CR>とすることでも入力できます。ちなみに、open -a /Applications/Dictionary.app dict://[word] が、厳密な意味での呼び出しになります。

Mac Tips その12 〜アプリ毎のショートカットキーを設定する〜

Webページ、お前は何を言っているんだ?

f:id:jiroukaja:20130420222105j:plain

※画像は茶番のための自作自演です

Macには、ユーザーがショートカットキーの割り当てを行う機能があります。たとえば、最近は減りましたがWebページを見ていて文字化けしているサイトがあったりすると、Safariの場合、[View] - [Text Encoding] - [Japanese (Shift JIS)]と選択することでエンコーディングをShift JISに変更できます。たいてい、euc-jpであるJapanese (EUC)かUTF-8にしたら文字化けが直るわけです。

f:id:jiroukaja:20130420205834j:plain

ショートカットキーを設定してみよう

こういう問題は、日本語のWebページ特有の問題なので特別にショートカットキーがあるわけでもなく View 選んで Text Encoding 選んでというのは大変面倒なわけです。

というわけで、今回は、[Japanese (Shift JIS)]と[Japanese (EUC)]と[Unicode (UTF-8)]にショートカットキーをつけてみましょう。

やり方は簡単。環境設定画面でキーボードを選択して[Keyboard Shortcuts] - [Application Suports]にした後、[+]を押して、メニュータイトルに[Japanese (Shif JIS)], [Japanese (EUC)], [Unicode (UTF-8)]とそれぞれ入れてショートカットキーを設定するだけ。

([Safari] - [Services] - [Service Preferences...]からでも表示できます)

f:id:jiroukaja:20130420212727j:plain

余談: Hide Reading Listがうっすらと見えますが、Show&Hide Reading Listは設定を一度設定を変更した後に設定を削除すると、Shift-Cmd-LではなくCmd-Lになってしまうため再設定する必要がありました…

設定が完了したら即反映するので見てみると…

f:id:jiroukaja:20130420213250j:plain

無事、設定されていることが確認できます。

タイトルメニューの入力文字は、場所が深くても文字列さえあっていれば問題ないようです。ただし、アプリによっては階層が違うだけで完全に一致した文字列がある場合があり、そうなると意図していない方にショートカットキーが割り当てられたりします。そういうときは、「下手なメニュー名の設定をすな! 」とアプリ作成者を罵ってあげましょう。

使い方が広がります?

当たり前のことですが、ショートカットキーの設定は Safari に限ったことでなく他のアプリでも設定できます。他には、メニュー画面だけでなく印刷ページにある [Save as PDF...] にもショートカットキーが設定できたので、わりとどこでも設定できるようです(Applicationは、All Applicationsにしました)。

f:id:jiroukaja:20130420220240p:plain

しかしながらメニューに存在していないもの、たとえば「Safariでも Ctrl-[ が、Escキーだったらなー」とかは設定できないので、諦めて KeyRemap4MacBook で設定してあげましょう。

Mac Tips その11 〜冬季限定MacBook Airの充電事情〜

暖かくなりました

 少し前まで寒かったです。最近では暖かくなったため忘れてる人もいるかと思いますが、MacBook Airを充電しようとしてコネクターのケーブルが光らなくなったことがあるかと思います。

この原因についてネットで調べると、10度以下になるとどうやら充電が開始されないみたいな記述が見つかったわけですが、具体的にどこが10度以下なのか気になったので調べてみました。

結果としては、MacBook Air本体ではなくアダプターの方が10度以下になっていると充電が開始されないみたいです。単純に、アダプターをホットカーペットで温めるとういことをやって確かめました。

というわけで、半年以上先の冬にでも活用してください!!

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! な状態になった場合は、ここの設定が影響している可能性をまず疑いましょう。