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と組み合わせる設定
IMEの設定 (04ime.el)
;; 日本語入力を賢くしたい | |
;; GNU/Linux で egg-anthy を使う設定 | |
(if (eq system-type 'gnu/linux) | |
(set-language-info "Japanese" 'input-method "japanese-anthy")) | |
;; Cocoa inline_path 対応 | |
(if (featurep 'ns) | |
(set-language-info "Japanese" 'input-method "MacOSX")) | |
;; NTEmacs IME 対応 | |
(when (featurep 'w32-ime) | |
;; W32-IME の初期化 | |
(setq-default w32-ime-mode-line-state-indicator "[--]") | |
(setq w32-ime-mode-line-state-indicator-list '("[--]" "[あ]" "[--]")) | |
(dolist (args '((y-or-n-p nil nil) (yes-or-no-p nil nil) | |
(universal-argument t nil) (read-string nil nil) | |
(read-from-minibuffer nil nil) (read-key-sequence nil nil) | |
(map-y-or-n-p nil nil) (read-passwd t t))) | |
(apply 'wrap-function-to-control-ime args)) | |
(setq w32-ime-on-cursor-color "blue") | |
(setq w32-ime-off-cursor-color "black") | |
(add-hook 'w32-ime-on-hook | |
'(lambda () (set-cursor-color w32-ime-on-cursor-color))) | |
(add-hook 'w32-ime-off-hook | |
'(lambda () (set-cursor-color w32-ime-off-cursor-color))) | |
(add-hook 'minibuffer-setup-hook | |
'(lambda () | |
(if (ime-get-mode) | |
(set-cursor-color w32-ime-on-cursor-color) | |
(set-cursor-color w32-ime-off-cursor-color)))) | |
(w32-ime-initialize) | |
(set-language-info "Japanese" 'input-method "W32-IME")) |
言語設定 (05lang.el)
;; | |
;; 日本語環境で UTF-8 をメインにする設定 | |
;; | |
;; 日本語環境 | |
(set-language-environment 'Japanese) | |
(cond | |
;; Windows系で対応 | |
((memq system-type '(cygwin windows-nt)) | |
(prefer-coding-system 'shift_jis-dos) | |
;;(prefer-coding-system 'cp932-dos) | |
;;(prefer-coding-system 'utf-8-unix) | |
;; NTEmacs内部ではWin32のA系の呼び出しが使われるっぽいので、 | |
;; 現在の言語環境でのコードページが固定で使われるのかぁ? | |
;; locale-coding-system 以外では文字化けは避けられないと思う。 | |
(when locale-coding-system | |
;; ファイル名はロケール依存 | |
(setq default-file-name-coding-system locale-coding-system) | |
;; IMEパッチで必要らしい。 | |
(set-keyboard-coding-system locale-coding-system)) | |
) | |
;; UTF8サポートありならば、優先してUTF-8を使う | |
((memq 'utf-8 coding-system-list) | |
(prefer-coding-system 'utf-8-unix) | |
(setenv "LANG" "ja_JP.UTF-8") | |
) | |
) | |
;; 常に新規ファイルは utf-8-unix を使いたい | |
(if (memq 'utf-8 coding-system-list) | |
(setq-default buffer-file-coding-system 'utf-8-unix)) | |
;; |
VCS系の設定
cygwinのsubversionやgitを使う場合、ログメッセージが文字化けするので、ちょっと設定が必要。。。
;; | |
;; VCS (PCL-CVS/PSVN/etc) の設定 | |
;; | |
;; VCは自動的にリンクを辿って、かわりに本当のファイルを訪問 | |
(setq vc-follow-symlinks t) | |
;; VC-DIR を PCL-CVS -status に近づける | |
(when (>= emacs-major-version 23) | |
(add-hook 'vc-dir-mode-hook | |
'(lambda () | |
(define-key vc-dir-mode-map "a" 'vc-register) | |
(define-key vc-dir-mode-map "c" 'vc-next-action) | |
))) | |
;; for CVS | |
(setq cvs-diff-flags '("-u")) | |
;; for Subversion | |
(when (locate-library "psvn") | |
(autoload 'svn-status "psvn" nil t)) | |
(setq svn-status-hide-unmodified t) | |
;; for Git / git-coreのcontribにある | |
(when (locate-library "git") | |
(autoload 'git-status "git" nil t) | |
(autoload 'git-blame-mode "git-blame" nil t)) | |
;; for MaGit | |
(when (locate-library "magit") | |
(autoload 'magit-status "magit" nil t)) | |
;; for Subversion | |
;; サーバ内部ではログメッセージの文字コードはUTF-8になってる。 | |
;; なので、Windowsでクライアント等のASCII/UTF-8の文字コード以外の場合、 | |
;; Subversionに文字コードを教える必要(コマンドスイッチ)がある。 | |
;; なぜかコマンド引数のエンコードは、coding-system-for-write | |
;; または default-process-coding-system の decoding で変換される。 | |
(when (eq system-type 'windows-nt) | |
(cond | |
;; SJISロケール | |
((not my-prefer-utf8-for-cygwin) | |
;; vc-svn.el用 | |
(setq vc-svn-checkin-switches '("--encoding" "Shift_JIS")) | |
;; psvn.el 用 | |
(setq svn-status-default-commit-arguments '("--encoding" "SJIS")) | |
(setq svn-status-svn-process-coding-system 'shift_jis) | |
(setq svn-status-svn-file-coding-system 'shift_jis) | |
) | |
;; UTF8 | |
(t | |
;; vc-svn.el 用 | |
(defadvice process-file | |
(around my-process-file) | |
(let ((coding-system-for-write 'shift_jis)) ;; ここが一番分からん | |
ad-do-it)) | |
(defadvice vc-svn-checkin | |
(around my-vc-svn-checkin activate) | |
(ad-activate-regexp "my-process-file") | |
ad-do-it | |
(ad-deactivate-regexp "my-process-file")) | |
;; 今現在の環境(Cygwn1.7.4/LANG=ja_JP.UTF-8)では、 | |
;; なぜかこれだけが上手くいくなぜ? | |
;; だれが SJIS->UTF8への変換を行っているのか? | |
;; | |
;; psvn.el 用 | |
(setq svn-status-svn-process-coding-system 'utf-8) | |
(setq svn-status-svn-file-coding-system 'utf-8) | |
) | |
) | |
;; vc-git.el 用 (vc-git-checkin自体が小さいので置き換えた、、、) | |
(defadvice vc-git-checkin | |
(around my-vc-git-checkin activate) | |
(let ((files (ad-get-arg 0)) | |
(comment (ad-get-arg 2)) | |
(fname (make-temp-file "vc-git-"))) | |
(let ((buffer-file-coding-system 'utf-8-unix)) | |
(with-temp-file fname (insert comment))) | |
(vc-git-command nil 0 files "commit" "-F" fname "--only" "--") | |
(delete-file fname) | |
)) | |
) | |
;; もう少し整理できそうなんだが、、、 |
、、、VC-xx.elの実装では、ログメッセージはコマンド引数で受け渡されるようになっている。 一時ファイル経由で無いとWindowsではバケバケになるのだが。。。そのうち直るのかなぁ
まとめ
あと大事な Font 設定ですね。。。次回で。
0 件のコメント:
コメントを投稿