Emacs 利用メモ

(2005.12.11. 記)

1. 日本語の入力・表示を可能にする

(set-default-coding-systems 'euc-jp) (set-keyboard-coding-system 'euc-jp) (set-terminal-coding-system 'euc-jp) (set-buffer-file-coding-system 'euc-jp) (set-language-environment 'Japanese)

 「ターミナル」の「ターミナルインスペクタ」の設定で、「エミュレーション」の「非ASCII文字をエスケープする」はチェックをオフ、「ディスプレイ」の「ワイドグリフを使用する」「ワイドグリフを2桁とカウントする」はオン、文字セットエンコーディングは「日本語(EUC)」にしておく。UTF-8 の方が今風だが、まあ EUC の方が無難かな、と。

2. 表示を色付きにする

(global-font-lock-mode t)

 環境変数 TERM を xterm-color にしておく。~/.bash_profile に次の行を追加。

set TERM xterm-color; export TERM

 あるいは、ローカルでターミナルで使う時は、ターミナルの環境設定で「ターミナルタイプ ($TERM) を次に設定する」を xterm-color にしてもよい。

 これで C mode などではシンタックスカラーリングが有効になるのだが、8色の原色しか使わないので、見づらくなることもある。色を変える方法もあるのかも知れないが、とりあえずこのままで使っている。

3. 折り返し行がある時のカーソル上下移動

 長い行を折り返して表示しているときにカーソルを上下に移動すると、行ではなく段落ごとに移動してしまう。これは不便なので、画面上の1行分ずつ移動させるようにしたい。

(defun screen-column () "Get the screen column position" (save-excursion (let ((my-column (current-column))) (vertical-motion 0) (- my-column (current-column))))) (defun next-screen-line () "next screen line" (interactive) (if truncate-lines (next-line 1) (if (not (eq last-command 'next-screen-line)) (setq goal-screen-column (screen-column))) (vertical-motion 0) (vertical-motion 1) (move-to-column (+ (current-column) goal-screen-column)))) (defun previous-screen-line () "previous screen line" (interactive) (if truncate-lines (previous-line 1) (if (not (eq last-command 'next-screen-line)) (setq goal-screen-column (screen-column))) (vertical-motion 0) (vertical-motion -1) (move-to-column (+ (current-column) goal-screen-column))) (setq this-command 'next-screen-line)) (defun beginning-of-screen-line () "beginning of screen line" (interactive) (vertical-motion 0)) (defun end-of-screen-line () "end of screen line" (interactive) (vertical-motion 1) (if (not (eobp)) (backward-char 1))) (defvar goal-screen-column nil) (global-set-key "¥C-p" 'previous-screen-line) (global-set-key "¥C-n" 'next-screen-line) ;;(global-set-key "¥C-e" 'beginning-of-screen-line) ;;(global-set-key "¥C-a" 'end-of-screen-line) (global-set-key [up] 'previous-screen-line) (global-set-key [down] 'next-screen-line)

 (vertical-motion 0) で現在の画面上の行の左端に移動する、という動作を利用しているのだが、これはちゃんとドキュメントされた仕様なのかな? Emacs Lisp Reference を見ても明記されていないような気がするのだが…

4. 10.2 付属の emacs で日本語を使う

 10.2 付属のターミナル版 emacs はキーボード入力の最上位ビットを落としてしまうようで、そのまま使うと日本語の表示はできるが入力が化けてしまう。Emacs を立ち上げるときに stty raw; emacs とするとよい。以下のシェルスクリプトを ~/Applications あたりに emacs という名前で入れておく。

#!/bin/sh stty raw; /usr/bin/emacs "$@"; stty -raw

 ^Z でサスペンドしたあと fg で復帰させるとおかしくなるので、stty raw; fg とする。