Google Code Prettify

2010年5月6日

NTEmacs 23.1.Xを使ってみる

Windowsの定番は Meadowであり、今でも十分安定している。 ただ、ベースにしてるのが Emacs 22系なので、ちょっと新しくないかなぁ。。。

今日では本家EmacsでもWindows版バイナリを配布している。Windows特有のInstallerが使いたければ、EmacsW32から入手できる。

結構、安定して使える。かつ、アイコンが奇麗だ。。。

本家バイナリはネイティブのIMEのサポートが弱い気がする。。。と思ったら、有志によってIMEのinlineパッチも作成されいる。また、 VCSの新し目のタグに有用なパッチを当てたバイナリも「NTEmacs Build History 」から入手できる。

なので有り難く使わせてもらいます。
らくちんだ。

設定

NTEmacs内部ではWin32のA系の呼び出し(ファイルI/Oやプロセス生成など)が使われるっぽいので、 現在の言語環境でのコードページに合わせなければ、奇妙な文字化けが発生する。 つまり、ファイル名とコマンド引数(processのdecoding)のcodingは shift_jis/cp932 じゃないとまずい。

と思うのだが、誰か大層語ってくれる人が見当たらないので、本当のところはさっぱり分かりません。。。

なので、「Cygwin 1.7でUTF-8サポートされたぜ!いぇーい!今時は UTF-8 ですが何か?」とは、口が裂けても言えない。。。僕は恨めしくshift_jis/cp932で使いますよ。。。へたれですから。。。

上のサイトや他多数をちょっと参考にして、今現在の次のようにしている。今でもチマチマ書き換えているのでそのうちgithubで晒しとくかなぁ。。。

Homeディレクトリの指定

ホームディレクトリ指定を環境変数HOMEで与える必要があり、Cygwinでのホームディレクトリと同じにすると混乱せずに済む。

Cygwin 1.7と組み合わせる設定

03cygwin.el

IMEの設定 (04ime.el)
言語設定 (05lang.el)
VCS系の設定

cygwinのsubversionやgitを使う場合、ログメッセージが文字化けするので、ちょっと設定が必要。。。

、、、VC-xx.elの実装では、ログメッセージはコマンド引数で受け渡されるようになっている。 一時ファイル経由で無いとWindowsではバケバケになるのだが。。。そのうち直るのかなぁ

まとめ

あと大事な Font 設定ですね。。。次回で。

2010年5月1日

Cocoa Emacs 64bit版を作ってみる

最近、また Emacs にはまっている。

ここ数年は vi やら eclipse やら JeditX やら xcode やらを広く浅く使っていて、 いまいちスッキリしない感じで、まぁ年なのか諦めていた。 Snow Leopardにアップグレードを期に、 ちょっと設定等を手入れしてMacOSX/Windowsで使い出したらすこぶる手になじむ。。。

はて、なんでEmacsを使うのを忘れていたのかんなぁ。。。

そう、当時 Emacs 20か 21 (mule-2.3だったかもしれん、、、)だったかなぁ。 UTF8/Unicodeを使う為にはMule-UCSとかいうパッケージが必要で、 そいつを組み合わせると普通に使えるのだが、起動も動作ももっさりしていまいちだった。。。

今日のEmacsはサクッとUnicode系の一群のcoding-systemが使えて、それなりに軽快に動作する。

良い時代になったなぁ。。。

MacOSX 上の定番は CarbonEmacsで、 かなりしっかりメンテナンスされており、実に安定している。ただ、ベースにしてるのがEmacs22だったり、Carbonベースだったり、32bitバージョンだったり、本当に細かく気になる人が気になる程度。

ふと気づくと 本家 Emacs では既に 64bit Cocoa版が構築でき、かつ日常作業で問題ならないくらいは安定してるらしい(1,2)。また、フォントの等幅調節設定や日本語入力等のinline patchなどが入手が可能で、 ほぼ CarbonEmacs を置き換えて使えるレベルになっている(と思う)。

なので、Cocoa Emacs 64bit を構築してみる。

ソースを取ってくる

うん、一番の難関は Bazaar という分散VCSを使う事かもしれない。。。準オフィシャルなGitレポジトリがあるので、Gitに慣れてる場合はこっちを使うのが吉。僕は、へたれなので git の方を使った。

取り敢えず、 ローカルネットに emacs.git のミラーレポジトリを立てて、そのマシン上でフォークして個人用の共用レポジトリを作る。 その個人用レポジトリから作業マシンに複製を展開する。 また、継続的にupstreamを追っかけるため、ミラーレポジトリもリモートとして登録する。

% ssh server               # ローカルネットの server にログイン
% cd /git
% git clone --mirror git://repo.or.cz/emacs.git
% git clone --bare --reference emacs.git emacs.git emacs-my.git
...
% ssh client               # 作業マシンにログイン
% cd ~/work
% git clone git+ssh://server/git/emacs-my.git emacs
% cd emacs
% git remote add upstream git+ssh://server/git/emacs.git
% git fetch upstream

個人用レポジトリを挟んだのは、バックアップを意図してなんだが、、、git使いはそんな事はしないのかなぁ。。。分からんなぁ。。。

パッチをあてる

続いてMacEmacs JP から inline_patch を取って当てる。

% ssh client               # 作業マシンにログイン
% cd ~/work/emacs
% git checkout -b topic EMACS_PRETEST_23_1_96  # 次いでに topic ブランチも作っとく
% pathc -p0 < emacs-inline.patch 

構築する

あとは、configure/make で問題が無ければ nextstep/Emacs.app の場所で 64bit Cocoa Emacs が構築される。

% ssh client               # 作業マシンにログイン
% cd ~/work/emacs
% eval "$(PATH= /usr/libexec/path_helper -s)"  # PATHをクリーンにする
% ./configure --with-ns
% make install
% open nextstep/Emacs.app                      # Emacsの実行確認

なんともあっけなく構築できた。 ただ、僕は masterブランチの方にパッチを丁寧に当てた物(24.0.50とか)を使っている。すこぶる快適。

定期的追っかける

まぁ、忘れそうなので次いでに書いとく。

ミラーレポジトリは次のコマンドで更新する。

% ssh server               # server にログイン
% cd /git/emacs.git
% git fetch

そして、作業レポジトリで upstream を追っかけるには

% ssh client           # 作業マシンにログイン
% cd ~/work/emacs
% git fetch upstream
% git rebase upstream/master topic    # upstream 先端に rebase
% git push origin :topic              # topicブランチを削除し、
% git push origin topic:topic         # 新しくtopicブランチをプッシュ

いまいち Git の使い方に慣れない/分からないので、間違ってるかもしれん。。。

そういえば、github にも Emacsのミラーレポジトリが上がってるので、そのうち生えてくるかもしれん。。。

それにしても覚える事が次から次と現れて、知恵熱が出っぱなしだなぁ。。。

初期設定のemacs.elはまた次回。

追記 (2010/05/06)

フォント以外の設定は、殆ど定型文っぽいので以下の用に設定した。

フォントの設定は「Emacs23 の フォント設定」を参照

追記 (2010/05/12)

どうもポップアップダイアログが出たとき落ちる問題にはパッチが必要。

2010年3月3日

libvirtd を終了時にGuestOSを保存する方法

libvirt+QEMU/KVM を使った仮想化の運用を続けていると、どうしても気になる事がある。

libvirtd の設定には、自動起動するGuestVMは登録できるのだが、 終了時には有無を言わさず GuestVM を強制終了してしまう事である。

自前で libvirt (0.7.2)を入れているので今のバージョンでは何らかのサポートが入ってかもしれない。 ただ「libvirt: Releases」を見る限り入って無さそうである。

それにQEMU/KVMドライバだけの挙動かもしれない。他とドライバ(Xen等々)だと状況は違うかもしれない。

まぁ。。。そのうち何らかの対応が入るんだろうなぁ。。。

そうは言っても、ホストマシンを終了するときイチイチ確認するのは難儀である(とくにACPIサポートが悪く電源断しないGuestOSタイプとかねぇ)。

さて、QEMUにはVMの状態を保存復帰(save/restore)がサポートされている。コイツとストレージ共有を組み合わせると、ライブマイグレーションが一丁上がりになるので、つい何年か前に小躍りしてる人がたくさんいた気がする。

まぁ普通にサスペンド/レジュームの仕組みなので、コイツをなんとか上手く使うスクリプトを組んでみた。

指定する項目は3つで、それぞれスクリプト冒頭に書かれている。

libvirt-start-stop-vm.sh

...
SAVEVMDIR="/var/lib/libvirt/save"            # 保存するVMの置き場所
LISTVM_SHUTDOWN="linux_sid linux_fedora"     # 終了時 shutdown するもの
LISTVM_SAVE="freebsd_cur netbsd_cur solaris" # 終了時 save するもの
...

やってる事は単純で virsh コマンドを叩いてるだけである。 ただ、LISTVM_なんたらで指定し無かったり、15分以内に正常に電源断しない奴は、 最後に念のためsaveしてある。

コイツを、/etc/init.d/libvirt-binのスクリプトの必要な部分に入れ込むだけ。

うん〜、これでマシンを立ち上げると前回マシンを落とした時の状態のままのSolaris10/FreeBSDが立ち上がるようになった。。。しかし、時刻が合わん。なんか、GuestOSが共通に取れるイベントの仕組みがあるのかなぁ。。。SNMPとかで叩くんかなぁ。。。SSHとかで叩くんかいなぁ。。。順当に cron でntp引っ張ってくるが原始的でいいのかぁ。。。でも、時刻合わせの精度は低いし、常時CPUをちょっとだけ使うのはなぁ。。。ぶつぶつ

あんまり、すっきりしないが個人で使う分には用は足りそうである。

久しぶりの投稿

かなり期間が空いてしまったが、ブログを再開してみようと思う。 2013年3月が直前の投稿だったが、頻繁に更新していた時期が 2011年11月までなので、8年間ぶりとなる。 8年間なにをしていたのかと言えば、2回転職して未だにIT技術者の職を得ている。 その...