clmemoを複数ファイルでやる
SKK導入してて思ったのは、新しい情報がまったくない、ということだ。
まぁ2013年にもなってSKK導入しようなんて変なやつはいないってのもあるだろうけど、こういうの最近はみんなtwitterとかに流しておわっちゃうっていうパターンが多いからだと思う。 なのでやっぱりこのようにいろいろ作業したことを残すことは重要だなーと思いなおして、先日からやたらエントリが多いわけですw
それでまぁもっと細目にclmemoつけていくかなーと思ったわけだけど、いま使ってる clmemo.el
は、1つのメモファイルしかサポートしていない。 個人的に使うだけだったらそれで十分なんだけど、僕みたいにclmemoをこうして公開してしまっている場合、プライベートなメモもつけられると良い。
ので、
(defun clmemo-with-file (memofile)
(interactive "Fclmemo file: ")
(let ((clmemo-file-name memofile))
(call-interactively 'clmemo)))
というような関数を書いた。これを clmemo
の代わりに呼びだせば、memofile
で指定したファイルが代わりに使われるのでウマー、というわけだ。
まぁ、いまのところあんまりプライベートなメモってないんだけど、evernoteでやってたタスク管理なども、最近あまりevernoteが信用ならなくなってきたこともあり、Emacsでやろうかなと思ったので、ちょっとそういう感じでプライベートclmemoも運用してみようと思う。
ddskkでも確定キーの挙動をAquaSKKライクに
カナモードからq押さないとひらがなモードに戻れないのは不便なので、AquaSKKと同じように C-j
(僕は C-o
) で カナ→かな になるようにしたい。
調べてみると、 skk-rom-kana-rule-list
というのに、かな・カナモード用のキーマップがあるので、それに対して自分で修正したバージョンのfuncを skk-kakutei-key
に登録してあげれば良いみたいな雰囲気。
そこで、
(defun my:skk-kakutei-key (arg)
(interactive "P")
(if skk-henkan-mode
(skk-kakutei arg)
(skk-j-mode-on)))
というような、変換中だったら普通に確定キーとして動くけど、それ以外だったらかなに戻す、という動作をするカスタム関数を定義して、それを、
(add-to-list 'skk-rom-kana-rule-list
'(skk-kakutei-key nil my:skk-kakutei-key))
してあげればOK。 skk-rom-kana-rule-list
というのは (require 'skk-setup)
しただけだとまだないので、 (require 'skk-vars)
も必要だった。
最終的な設定はこちら:
https://github.com/typester/emacs-config/blob/master/conf/init/init-ddskk.el
はー、しかしこれで、AquaSKK/uim-skk/ddskk 全部で同じ感じで入力できる環境がようやくできた。 miyagawaさんのpodcastで、yak率という言葉がでてきたけど、SKK導入のyak率は相当なものだなぁ。
ddskkをやっぱり使う
AquaSKKがEmacs上でも使えるから、ddskkとか使わないなぁと書きましたが、まちがいだった。
C-c C-o
のような、キーでも、C-o
をAquaSKKにとられてしまうのでだいぶつらい。 なので一度けしたddskkを再度インストール。
設定はとりあえずこんなかんじで:
;; key
(define-key global-map (kbd "C-x C-o") 'skk-mode)
(setq skk-kakutei-key (kbd "C-o"))
(setq mac-pass-control-to-system nil)
;; skkserv
(setq skk-server-host "127.0.0.1")
(setq skk-server-portnum 1178)
;; user dic
(setq skk-jisyo-code 'utf-8)
(setq skk-jisyo (concat (getenv "HOME") "/Dropbox/skk/skk-jisyo.utf8"))
共有辞書はskkserv経由でAquaSKKをつかう。 ユーザー辞書も文字コードをutf-8にすればAquaSKKと同じものが使える?っぽいのでAquaSKKと同じファイルを指定。 キーも他の環境に併せて C-o
に。
こっちは、uim-skkとちがってユーザー辞書もAquaSKKと同じものが使えるから、学習結果も無駄にならなくて良い感じである。
唯一、カナモードのときに C-o
を押してもひらがなモードに戻らないのが不便。 これはelispフックするかなんかすれば簡単に変更できそうだからそのうち知らべよう。
SandS
SKK導入してShiftキー酷使してつらいなー、と言っていたら、antipopさんに、SandSをおすすめされたので、試してみている。
MacでSandSするのはKeyRemap4MacBookを使うと簡単だ。
しかしどうしても手が勝手に小指でshiftキーを押してしまうので、一時的に両サイドのshiftキーは無効になるようにした。
このSandS、SKKでの日本語入力はまぁすぐに慣れるとおもうが、いままで手に染み込んだショートカットキーはだいぶ苦戦しそうだ。
例えばEmacsでのundoは、C-_
だが、押すキーは C-S--
である。 これはなかなか、キーを手で覚えているから、これをスペースにおきかえるということがすぐに思いだせなくて非常に難しい。 こういうのはまぁ無理に矯正しないでもいい気もするが、どうしようかなぁ。
あとEmacsを使っていると致命的につらいのが M-<
である。 MacでSandSで、っていう環境でこの場合押すキーは、Cmd-Space-,
だ。おしにくい!
これはIRCでぼやいていたら、handlenameさんが、「sequential_commandつかってるからM-<とか押さないですよ〜(ドヤァ」みたいな雰囲気のことを言っていた。 たしかにこれは便利そうなので使ってみよう1
Emacsの設定を見直し、 el-get の distributed セットアップに統一
いままで秘伝のタレのような設定を使い続けていたのだが、どうもしばらく使っているとEmacsがCPUを非常に食うようになってくる。 flymakeの設定かなー?とかほかにもいろいろ怪しげなところを削ってみたりしたがわからず、だましだまし使っていた。
そういう理由もあってEmacs設定をリセットしたいと思っていたので、Emacs実践入門や Advent Calendar を読んでいたら el-get というパッケージマネージャがなかなかよさそうだと思った。
これ、存在自体はまえから知っていたけど秘伝のタレベースな自分は使わないだろうなーとスルーしていた物だが、 ドキュメント(info)を読んでみると思った以上によさげだと言うことが分かった。 Mac 使ってる人にわかりやすくいうなら Emacs 用の homebrew という感じ。
なかでも 6.3 Distributed Setup
で紹介されてる方法を使うと、他の環境に設定を持って行ったときも初回起動時にパッケージをよしなにインストールしてくれて自動的に同じ環境にしてくれる。これはなかなか便利。
というわけで作り直した設定がこちら、まだ perl と clmemo 周りの最小限の設定しかないけれども。
~/.emacs.d/
以下に置かなくても動くようにつくってあるので、
$ git clone git://github.com/typester/emacs-config.git
# no-window の場合
$ emacs -q -l emacs-config/init.el
# Cocoa の場合
$ /Applications/Emacs.app/Contents/MacOS/Emacs -q -l emacs-config/init.el
とするともりもりパッケージのセットアップが始まって(時間はかかるけど)僕と同じ設定で Emacs を試せる状態になるはず。
Emacs24 前提と、 el-get のために git コマンドが exec-path
に必要。
このように非常にカジュアルに人の設定を試せるのはかなり革命的。 (もちろん複数の環境で設定を同期するのにも革命的)
なのでみんながこれ前提でセットアップしてくれたら最高だなーと思いますのでこれを読んでる Emacs ユーザーの方々におかれましては el-get ベースな設定を一考していただければ幸いでございます。
flymakeのタイムアウト設定
flymakeで読んでいるシンタックスチェックコマンドが無限ループに陥って困り、@fujiwaraに相談したところ。daemontoolsについてくるsoftlimitコマンドでタイムアウトするようにするといいと教えてもらった fujiwara++
$ softlimit -t 1 perl -e 'while(1){}'
zsh: cpu limit exceeded softlimit -t 1 perl -e 'while(1){}'
便利ですね。とりあえずperlのflymake設定を
(defun flymake-perl-init ()
(let* ((temp-file (flymake-init-create-temp-buffer-copy
'flymake-create-temp-inplace))
(local-file (file-relative-name
temp-file
(file-name-directory buffer-file-name))))
(list "softlimit" (list "-t" "3" "perl" "-wc" local-file))))
みたいにしておいた。まぁ perl -wc
で無限ループとか滅多にないと思いますが。
Emacsデビューはこの本で決まり! - Emacs実践入門
Emacs界の松岡修造ことtomoyaさんが素敵なEmacs本を書かれたので紹介。
Emacsとはなにか? から始まり、インストール、基本的な使い方、カスタマイズ方法といったことが体系的にまとめられたとても良い本。
すでにEmacsユーザーの方は一通り読むことで自分の中で足りない知識を補完することができるし、体系的にまとめられたものを読むことでEmacs脳がかなり整理されるのでぜひ一読することをおすすめする。
そしてEmacsユーザーではないけれど興味があるという人にこそ、この本を薦めたい。そういう人に対してこの本は最適な入門書になっていると思う。 一通り読み終わったあとは自分のマイEmacsを育てる土台ができていることでしょう。
Emacsデビューはこの本で!
Emacs を Lion のフルスクリーン表示に対応させてみた
git の emacs-23 ブランチに対するパッチ:
作ってみたものの、今までのフルスクリーンのほうがデスクトップの背景が Emacs な感じで便利。 っていうわけでお蔵入りかなぁ。
CocoaEmacs おかしいところ
anything-config.el も無事なおり、Shiftのバグなおして日本語入力も快適になり、あとはまぁだいたいいい感じに使えるようになった(現状では) CocoaEmacs だけど一点だけおかしいところがある。
僕は結構 Emacs の customize 機能をヘビーユーズしてて(コーディングしてて気に入らない色設定とか出てきたらその場ですぐ customize-face する)これで色設定はほぼ調整してるのだけど、customize するのをすべての Emacs で同じものを使うのは微妙なので、
(setq custom-file "~/.emacs.d/conf/cocoa-emacs-99customize.el")
のようにして、 customize の保存先を Emacs 毎に変えている。
のだけどこれが、init-loader
のフェーズで (load custom-file)
しても設定が適用されないという現象に悩まされている。
立ち上がったあとに手動で (load custom-file)
するとロードされる。。なぞ。
しょうがないので、
(defun reload-custom-file ()
(interactive)
(load custom-file))
こんなの作っておいて起動後手動で実行している。不毛だけどまぁ Emacs たちあげっぱだからいいかなぁ。。
elispエラーった時の追い方
(setq debug-on-error t)
しておいて、eval-bufer
。StackTrace 出るのでそれを見る。
Emacs 23 にしたら anything-config.el が Invalid depth in char-table
とかいって死ぬようになったけど原因わからなくてこまってたけどこれやったら ~/.emacs.d/anything-c-adaptive-history
のロードに失敗してるのがわかった。消したらなおりました。imakado++