CocoaEmacsその後
フルスクリーン化以外にもいじりたくなったのでそれぞれブランチを切った。
- feature/fullscreen - 今まで作業していたフルスクリーン化対応ブランチ
- fix/shift_modifier_with_ime - IME経由で入力するときShiftなんちゃらがIMEを素通りするのを直すブランチ
という感じになっています。 master はこれらの統合ブランチになってますので使ってる人いたら注意です。
使いながらちょいちょいいじっていて、昨日からの更新としては
- フルスクリーン時に裏にノーマルなウィンドウが残ってしまっていたのを修正
- 日本語入力時に Shift なんちゃらが IME をとおらずそのまま Emacs に渡されてしまっているのを修正
という感じになっております。
CocoaEmacsのフォント設定
現状こんな感じ。以前書いたCarbonEmacsの設定と大して変わってない。unicode コードセットで表示される文字が増えていたのでそれに対応した程度。
(create-fontset-from-fontset-spec
(concat
"-*-fixed-medium-r-normal--12-*-*-*-*-*-fontset-tobi"
",ascii:-apple-codingfonttobi-medium-r-normal--16-120-72-72-m-120-*-*"
",japanese-jisx0208:-apple-osaka-*"
",katakana-jisx0201:-apple-osaka-*"
",unicode:-apple-osaka-*"
",chinese-big5-1:-apple-apple ligothic medium-*"
))
(set-default-font "fontset-tobi")
ascii 用につかってる CodingFontTobi は proggyfonts.com から。
もちろんビットマップ表示にするため
$ defaults write org.gnu.Emacs AppleAntiAliasingThreshold 16
としている。
(setq mac-allow-anti-aliasing nil)
は Snow Leopard では効かないみたいだ。
フルスクリーン Cocoa Emacs
emacs23 が正式にリリースされ、ちまたではウィンドウシステムが Cocoa になったぞ、とか 64bit 対応だぞ、とか multitty だぞ、と盛り上がっていますが、 個人的にほとんど興味のないまま今日まできました。というのも CocoaEmacs はフルスクリーンにできないという僕にとっては致命的な問題があったからです。
というのも最近は Emacs をフルスクリーンにし縦二分割で使ういわゆる imakado スタイルを実践しているため、それができない CocoaEmacs は眼中になかったのでした。
そんなわけでずっと CarbonEmacs を使ってきたのですが、 Snow Leopard に移行したのを機に CocoaEmacs に移行し、さらについでにフルスクリーン化できるようにしてみています。 github でやってます。
現状でも若干不具合がありますが、使える段階にはなっていると思います。
ビルドは
$ git clone git://github.com/typester/emacs.git
$ cd emacs
$ ./configure --with-ns
$ make bootstrap
$ make install
こんな感じにすると、nextstep
ディレクトリ以下に Emacs.app
ができます。フルスクリーンにするには
M-x ns-toggle-fullscreen
でいけます。キー割り当てておくと便利です。
対応環境は定かではありませんが、OS X 10.4 と 10.6 で動作確認しております。
また 10.6 の場合のみ、フルスクリーン時に隠れているメニューバーや Dock 領域にマウスカーソルを移動させると自動的に表示されるようになっています。 CarbonEmacs と違い Dock も自動で表示されるので個人的に非常に便利です。10.6 からの新 API のため、10.5 以前ではフルスクリーン時にメニューバー、Dock は強制オフになります。
既知の不具合として外部ウィンドウでフルスクリーン化して戻そうとすると落ちるというのが報告されており調査中です。 それ以外は便利に使用できています。この文章もフルスクリーン CocoaEmacs で書いています ;)
またこのハックをしたことで elisp から C や Objective-C のコードを呼ぶ方法がわかったのでいろいろ夢がひろがりんぐというところです。
my clmemo設定
このメモは clmemo.el で書いてるわけだけど、もっと個人的なメモとるように、MacBookにもインストールしてみた。
で、僕のつかってる clmemo のフォーマットは、タイトル行に書いた時間をいれる、本文は Markdown というような物になっていて、この時間を入れるためにこんなパッチを当てていた。
けど今見てみたらそんなパッチ当てる必要もないことがわかった。
こんな感じ、
(require 'clmemo)
(setq clmemo-file-name "~/clmemo.txt")
(setq clmemo-time-string-with-weekday t)
(setq clmemo-subtitle-char "[")
(setq clmemo-subtitle-punctuation-char '(" [" . "]"))
(defadvice clmemo-get-title (after clmemo-get-title-with-time () activate)
(setq ad-return-value (concat (format-time-string "%H:%M ") ad-return-value)))
でやればこのメモのフォーマットになる。いいね!
clmemo.el のソースも昔は意味不明だったけど今はだいたいわかるし。やっぱり emacs つかうなら elisp 理解できないと損というか、もったいないなぁ。ということがわかった。
古いバッファを自動で消したい!!#2
昨日のやつに言及いただいた。
midnight.el で毎日 0 時に古いバッファを削除する - (rubikitch loves (Emacs Ruby CUI))
標準添付の midnight.el とかどうだろうか。
まさにこれがやりたかった。ありがとうございます!
で、設定ファイル書かなくても全部 customize だけでできるみたい。
customize-group midnight
して midnight-mode
を on
にすれば OK。ノーマルバッファの削除間隔はデフォルトだと3日だが、ちょっと短いのでそこも 7 とかに変更した。
あとはまぁデフォルトで良いかな。
古いバッファを自動で消したい!!
気がつくとemacsのバッファがすごい数になっていて補完などが重くなるのである程度たまったら自動で古い物(しばらくvisitしてない物)を自動的に削除するようなものが欲しい。
とりあえずぼくのelisp力ではあんまり難しいことはできないので
(defun kill-old-buffers ()
(interactive)
(let ((count 0))
(dolist (b (buffer-list))
(incf count)
(if (> count 100)
(or (buffer-modified-p b)
(kill-buffer b))))))
とかいうのを書いてとりあえずはしのぐことにした。これは最後に使ったバッファ100個のこし、それ以前のバッファで修正フラグがたってないものを全部殺すというもの。
(buffer-list)
でとれるリストは anything などのように故意に最後に自分を突っ込んでる物以外はだいたい最後に訪問した順にくるようになってると思うのでまぁだいたいこれでやりたいことはできている感じ。
100個より古いバッファとかもうほとんど参照しないよね。必要になったら開き直せば全然かまわない。
lleval.el
YappoLogs: danさんのllevalをもっと便利にするラッパー作った
一時はcodepadの1/100くらいの利便性まで下がってしまって心配しましたが、80倍便利になってぼくたちのDan the APIが帰って来ました。
ということで、emacs からたたけるようにしてみました。
先日作成した codepad.el と同じようなインターフェースになっていて、M-x lleval-buffer
でバッファをllevalする、M-x lleval-region
で選択したリージョンを lleval する、となっています。
言語はメジャーモードから自動判別されます。
codepad よりレスポンスがはやくて快適ですね!
Enjoy!
codepad.el も書いた
昨日つくった dan-perl.el なんだけど、
404 Blog Not Found:Ajax - perlを実行するAPI
きっかけは、Codepadへの不満。PerlのVersionが5.8.0と古すぎる上、HTMLベースだと再利用がちょっと大変。というわけで別の車輪を再発明したわけです。上のサンプルを見てのとおり、perlの範囲内であればcodepadより自由な環境が楽しめます。
ということなんだけど、実際のところはなんだか codepad よりも自由度が低いような気がします。。。 use できても実際に使おうとするとエラーになるモジュールが多いし。codepad だったら perl 以外もいけるし。
というわけで codepad でよくね!ということで emacs インタフェースを作ってみました。
M-x codepad-run-buffer
とかするとカレントバッファをcodepadに投げてその実行結果を表示します。codepadでの言語はメジャーモードから自動的に判別するようになっています。
ほか、選択したリージョンを実行する codepad-run-region や プロンプトでワンライナーを入れる codepad-run などの関数があります。
言語をメジャーモードから取得するより自分で指定できるようにした方が良いのかもとか、実行したあとブラウザで結果ページを表示したほうがいいかもとか、いろいろありますがとりあえずこんなもんで。
CarbonEmacsの背後のWindowを切り替える
そろそろ野球のシーズンですね。フルスクリーンEmacsの裏にメディアプレーヤーを置くとなかなか快適ということを発見しました。
しかし、単純に裏に表示しているだけなため、Firefoxを開いたあとEmacsに戻ったりするとEmacsの裏の画面がFirefoxになってしまっていてイラッとします。
そこでこんな elisp で emacs の裏の画面を好きなアプリケーションにすぐに設定できるようにしてみました。
(do-applescript "activate application \"VLC\"
activate application \"Emacs\"")
快適。
ところで、これをもっと汎用的にして、VLC の部分を anything で選択きたら全画面 emacser にはものすごく便利なのかも。