(2005.12.11. 記)
(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 の方が無難かな、と。
(global-font-lock-mode t)
環境変数 TERM を xterm-color にしておく。~/.bash_profile
に次の行を追加。
set TERM xterm-color; export TERM
あるいは、ローカルでターミナルで使う時は、ターミナルの環境設定で「ターミナルタイプ ($TERM) を次に設定する」を xterm-color
にしてもよい。
これで C mode などではシンタックスカラーリングが有効になるのだが、8色の原色しか使わないので、見づらくなることもある。色を変える方法もあるのかも知れないが、とりあえずこのままで使っている。
長い行を折り返して表示しているときにカーソルを上下に移動すると、行ではなく段落ごとに移動してしまう。これは不便なので、画面上の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 を見ても明記されていないような気がするのだが…
10.2 付属のターミナル版 emacs はキーボード入力の最上位ビットを落としてしまうようで、そのまま使うと日本語の表示はできるが入力が化けてしまう。Emacs を立ち上げるときに stty raw; emacs
とするとよい。以下のシェルスクリプトを ~/Applications
あたりに emacs
という名前で入れておく。
#!/bin/sh stty raw; /usr/bin/emacs "$@"; stty -raw
^Z でサスペンドしたあと fg
で復帰させるとおかしくなるので、stty raw; fg
とする。