タイトル/名前 | 更新者 | 更新日 |
---|---|---|
添付ファイル/030827002904_elisp.tar.gz | msakamoto-sf | 2009-04-26 20:14:10 |
Emacs/文字コード | msakamoto-sf | 2009-04-26 16:01:56 |
Emacs/モードライン(mode-line-format) | msakamoto-sf | 2009-04-26 15:49:20 |
Emacs/メニューバー・ツールバーの非表示 | msakamoto-sf | 2009-04-26 15:16:34 |
Emacs/ナローイング(選択範囲で○○する) | msakamoto-sf | 2009-04-26 15:02:56 |
Emacs/EmacsLispロードパス(load-path)の調整 | msakamoto-sf | 2009-04-26 14:43:58 |
Emacs/Infoファイルの追加 | msakamoto-sf | 2009-04-26 14:24:49 |
Emacs/M-xで始まる便利コマンド | msakamoto-sf | 2009-04-26 14:15:04 |
Emacs/コマンド履歴の呼び出し | msakamoto-sf | 2009-04-26 14:02:32 |
Emacs/バッファを読み込み専用に | msakamoto-sf | 2009-04-26 13:48:11 |
Emacs 20以降は多国語化されています。
しかしその反面、Mule関連の書籍で紹介されている文字コード変換系列のキーバインドやコマンドが軒並み使えなくなってます。
正確にはキーバインドやコマンド名が変更されています。
よく使うものについて簡単に紹介します。
まず「今どの文字コードを使用しているか」の確認です。
モード行右下に "EE-" や "EEE" と表示されている部分(C-x C-b のバッファ一覧ではEEJになったり)が、左から順に
を表しています。
"E" なら euc-jp , "S" なら shift_jis を意味します。
各文字コードを変更するには、以下のキーバインドを使います。
C-x RET l set-language-environment C-x RET c universal-coding-system-argument C-x RET C-\ set-input-method C-x RET X set-next-selection-coding-system C-x RET x set-selection-coding-system C-x RET p set-buffer-process-coding-system C-x RET k set-keyboard-coding-system C-x RET t set-terminal-coding-system C-x RET f set-buffer-file-coding-system
通常は最後の3つを使います。この3つはinternational/muleパッケージに属していて、Emacs由来とmule由来が混ざっています。
1.バッファファイルの読み書き(mode-lilne:X+Terminal)
取得:変数 buffer-file-coding-system(emacs由来)
設定:buffer-file-coding-systemを直接変更するか、set-buffer-file-coding-system関数(mule由来)で変更する。
キー:C-x RET b
2.キーボード入力(mode-line:Terminalのみ)
取得:関数keyboard-coding-system(mule由来)
設定:set-keyboard-coding-system(mule由来)
キー:C-x RET k
補足:これはencoded-kbd-mode (minor) が有効になっている必要がある。
3.端末入出力(mode-line:Terminalのみ)
取得:関数terminal-coding-system(emacs由来)
設定:set-terminal-coding-system(mule由来)
キー:C-x RET t
補足:set-terminal-coding-system内では結局、set-terminal-coding-system-internal関数(emacs由来)を起動している。
整理すると、X上でのファイルとバッファの文字コードを指定したい場合は
C-x RET f set-buffer-file-coding-system
を使います。
ターミナルから使っていて、キーボード入力と画面出力の文字コードを設定したい場合は
C-x RET k set-keyboard-coding-system C-x RET t set-terminal-coding-system
を使います。
文字コード周りはGoogleで調べると色々先達の苦労を知ることができますので、詳しくはそちら。
参考:"mode-line-format をダイエットさす"
http://homepage1.nifty.com/blankspace/emacs/mode-line.html
aproposで"mode-line-format"で適当に調べて、自分好みに調整したのが下記mode-line-formatになります。
(line-number-mode t) ;; display line number (column-number-mode t) ;; display column number ;; mode-line-format customization (setq-default mode-line-format '("-" (line-number-mode "L%l-") (column-number-mode "C%c-") (-3 . "%p") "-" mode-line-mule-info mode-line-modified " " mode-line-buffer-identification " %[(" mode-name mode-line-process "%n" ")%]-%-" )) (setq-default default-mode-line-format mode-line-format)
本当は現在バッファの「総行数」も表示させたかったのだけれど、mode-line-formatで使用できる変数に該当するのが無かったので諦めました。
あと、mode-line-mule-info 変数の表示形式が nox とXで違っています。
X上だと "E" or "S" 一文字であったり、デフォルトエンコーディングの場合は何も表示されず、そのまま次のmode-line変数を表示します。 つまり、1文字しかありません。
しかしターミナルから起動する場合は3文字です。
これに関しては、mode-line-mule-infoをaproposしてみると判明しました。これの中身は
coding system for saving or writing the current buffer coding system for keyboard input (if Emacs is running on terminal) coding system for terminal output (if Emacs is running on terminal)
という順番になっています。
つまり後ろのキーボード入力・端末出力のエンコーディングは端末上で動作する場合のみ表示され、Xの場合は表示されないのが元々の仕様です。
というわけで、mode-line-mule-info 変数の表示形式が nox とXで違うのは仕様と言うことでスルーしました。
個人の趣味に依るところが大きい話です。
個人的に、Emacsではメニューバーやツールバーを全く使いません。メニューバーもX上でならまだしも、ターミナルから起動した時にすら表示されるのは邪魔です。
また、キーバインドやキー入力をミスするとビープ音がなる時があり、これも消したい。
そういう場合の.emacs.el設定を一部掲載します。
(cond ((eq window-system 'x) ;; when running on X (set-scroll-bar-mode t) ;; enable X scroll bar (tool-bar-mode -1) ;; disable tool bar )) (setq visible-bell t) ;; enable visual bell (menu-bar-mode -1) ;; disable menu bar (on terminal or X)
sakuraエディタを初めとするWindows上で動作する一般的なテキストエディタでは、「選択範囲に限定して」置換する機能があります。これはプログラミング時に非常に便利で、vimにも搭載されています("V" or C-v で範囲選択した状態で":"にすると、開始-終了が選択範囲になったコマンド入力モードになります)。
Emacsでそれを行うには、「ナローイング」という機能を使います。
詳しい説明は以下のURLを参照して下さい。
http://www.math.s.chiba-u.ac.jp/~matsu/lisp/emacs-lisp-intro-jp_7.html
基本的な使い方としては、まず範囲を選択するにはC-@でリージョン選択を開始した後、範囲選択後
C-x n n
or
M-x narrow-to-region
を実行します。
初回実行時には「本当に実行しますか?」と聞かれます。y or yesで実行され、以降は質問されません。
すると、選択範囲外のテキストが一切見えなくなります。
なぜ初回実行時に質問されるかというと、ナローイングを知らない初心者にとっては混乱を招くからです。
この状態で検索や置換を行うと、表示されている範囲のみが対象になります。これで「選択範囲内での検索・置換」を行えます。
ナローイングを解除するには widen コマンドを実行します。
M-x widen
or
C-x n w
C-x n はnarrowing 系のプレフィクス・キーで、n がナローイング、wがwidenning と覚えればキー・マップもわかりやすいでしょう。
なお、自分で作成した関数をナローイング対応させる場合の注意点については上述のURLを参照して下さい。簡単にまとめると、save-restriction, save-excursion という二つの特殊形式(special format)を使用して「一時的に」ナローイングを解除して、処理終了後に戻すようにする必要があるかも知れません。
例えば "~/sample.el" というLispソースをロードし、Emacs起動時に評価・実行するには、以下の一文を.emacs.elに設定します。(またはLispモードで評価させます)
(load "sample")
実際には、その前にLispソースを探索するディレクトリを設定する必要があります。
load-path 変数にこんな感じで、対象ディレクトリを追加します。
(setq load-path (append (list nil (expand-file-name "~/") (expand-file-name "~/site-lisp")) load-path))
load-pathリストに、ホームディレクトリとその中のsite-lispディレクトリを追加しています。
さらに、nilを追加するとカレントディレクトリも探索対象になります。
expand-file-nameはホームディレクトリを表す "~" をフルパスに展開します。これにより、間違いなくホームディレクトリを指示できます。
load関数をもう少し詳しく解説します。
(load filename (optional) missing-ok nomessage nosuffix must-suffix)
(load "sample")
を詳しく説明すれば、
という設定でsample.elc or .el をロード、評価しなさい、という意味になります。
メジャーモードのEmacsLispなどでは、Infoモードで閲覧可能なinfoファイルが添付されている場合があります。以下では、後からインストールしたEmacsLispのinfoファイルを"M-x info"から閲覧可能にする為の原理や手順をまとめてみました。
M-x infoのinfoモードでは、Infoファイル(foo.info等)の存在するディレクトリのリストを次の順で生成します。
最初に 1. が読み込まれ、Infoモードの起動時にそれをもとにInfo-directory-listが構築されます。
では実際にM-x infoで表示される一連の「メニュー」はどこに記述されているのか。それは、Infoディレクトリリストに登録されているディレクトリ中の「dir」ファイルです。
例えば「/usr/share/info」ディレクトリが登録されていたとすると、「/usr/share/info/dir」ファイルに件のメニューがInfoモード特有のフォーマットで記述されています。
このフォーマットは次のように記述されます。
^_ File: dir Node: Top This is the top of the INFO tree * Menu: Texinfo documentation system User Install Documents * Mew: (mew). Mail Client On Emacs. * Mew(Japanese): (mew.jis). Mail Clinet On Emacs(Japanese Ver).
最初の「^_」から「Texinfo ... system」までは、"M-x info" で表示するための「おまじない」と考えて下さい。
「User Install ...」からが、本論です。最初の「User...」の部分はカテゴリーとして認識される部分で、M-x info なら下線+太字表示されている部分です。
続いて「* Mew:」。ここで、いわゆる「Infoファイルへのリンク」が設定されます。
アスタリスク 半角空白 表題 コロン 半角空白
です。
次の「(mew)」が、「使用するInfoファイルの指定」です。末尾の".info"は省略可能なようです。
この例だと、実際は「mew.info」ファイルが参照されるようになっています。
半角括弧始まり Infoファイル名から.infoを省いたもの 半角括弧終わり ピリオド
がフォーマットです。最後のピリオドを忘れないで下さい。
ファイル名の部分は、パス指定も可能です。
最後のフィールドは説明文になります。
以上のような内容のdirファイルを、Info-default-directory-listに登録されているディレクトリ中に配置します。最終的にそれらのdirファイルはマージされ、M-x infoで表示される形式に整えられます。
;; Emacs and Other Info files (require 'info) (setq Info-default-directory-list (cons (expand-file-name "/home/foobar/external/info/") Info-default-directory-list))
添付ファイルは、/home/foobar/external/info/dirファイルです。
同ディレクトリ中にDDDやMewのinfoファイルが存在するイメージです。
Emacsでは M-x に続いて実行可能なコマンドがたくさんあります。その内で良く使っていた幾つかを紹介。
全てはここから始まると言っても過言ではありません。
M-x help
ヘルプの種類それ自体の一覧が新しいバッファで開かれます。
ヘルプの種類毎にキーバインドがリストされ、エコー領域には
Type one of the options listed, or SPACE or DEL to scroll:
と表示され、ヘルプの種類に応じたキーバインドかスクロールを求めています。
"b" でキーバインドの一覧を確認できます。
"i" でInfoマニュアルを開くことが出来ます。
Infoマニュアルのナビゲーションを簡単にまとめます。
シェルモードの起動 :
M-x shell
その場でシェル実行 :
M-x shell-command or M-!
M-x revert-buffer
M-x list-options
表示までに時間がかかる場合があります。
sを押すとその変数の値をその場で変更。
xを押すとその変数が t と nil で交互にトグル。
M-x byte-compile
で、ソースファイルの場所を入力する。
拡張子が.elcというファイルが、ソースと同じ場所に生成される。
M-x apropos RET 変数名・関数名・コマンド名(正規表現可)
適合する変数名・関数名・コマンド名のリストが表示される。
望みのものにカーソルを合わせれば、詳細情報が表示される。
検索のときとか。テキストの途中で検索を始めたけど、やっぱ先頭からしたいときなど。
Emacsコマンドの履歴呼び出し :
C-x ESC ESC
前の履歴へ :
ESC p
次の履歴へ :
ESC n
RETでそのコマンドを再実行できます。