Links†
emacs / XEmacs 共通†
表示関連†
(setq frame-title-format (format "emacs@%s : %%f" (system-name)))	; タイトルバーの表示書式にファイル名を入れる
Time-stamp†
; Time-stamp
; http://homepage.mac.com/zenitani/elisp-j.html#time-stamp
(require 'time-stamp)
(setq time-stamp-start "Last updated: <")	; 開始文字列の設定。通常は "Time-stamp: <>"
;; 日本語で日付を入れたくないのでlocaleをCにする
(defun time-stamp-with-locale-c ()
  (let ((system-time-locale "C"))
    (time-stamp)
    nil))
(if (not (memq 'time-stamp-with-locale-c write-file-hooks))
    (add-hook 'write-file-hooks 'time-stamp-with-locale-c))
; (setq time-stamp-format "%3a %3b %02d %02H:%02M:%02S %Z %:y")
(setq time-stamp-format "%04y/%02m/%02d %02H:%02M:%02S %Z")	; YYYY/MM/DD HH:MM:SS JST
文字数を数える†
- 対象領域を選択し、
M-x: count-lines-region またはM-= とする。
- 行数と文字数が表示される。文字数は、全角も半角もそれぞれ1文字として扱われる。
isearch で、カーソルの位置にある単語を検索対象にする†
shell-mode で制御文字を処理する†
; shell-mode で制御文字を処理する。
(autoload 'ansi-color-for-comint-mode-on "ansi-color"
          "Set `ansi-color-for-comint-mode' to t." t)
(add-hook 'shell-mode-hook 'ansi-color-for-comint-mode-on)
ファイルを read-only で開く†
C-x C-r
バックアップファイルを作らないようにする†
(setq make-backup-files nil)  ; *.~ とかのバックアップファイルを作らない
(setq auto-save-default nil)  ; .#* とかのバックアップファイルを作らない
選択領域を [DEL] で一気に消せるようにする†
; (setq delete-selection-mode t)
(delete-selection-mode)
HTML文書編集での自動補完†
- yahtmlを使う(yahtmlは、YaTeXに付属しているもの)。
- 参考リンク
色設定†
emacs only†
{menu|tool}-barを消す†
(tool-bar-mode 0)		; tool bar を表示しない
(menu-bar-mode 0)		; menu bar を表示しない
(which-function-mode 1)	; 現在の関数名をモードラインに表示
前のウインドウに戻る†
; XEmacsにはあるが、emacsにはない(!)
; http://matome.replore.com/index.php?title=Emacs_Lisp%E3%81%BE%E3%81%A8%E3%82%81
; xemacsに合わせて、関数名を backward-other-window に変更。
; (defun other-window-backward (&optional n)
(defun backward-other-window (&optional n)
  "Select nth previous window."
  (interactive "P")
  (other-window (- (prefix-numeric-value n))))
起動済みのemacs にファイルを渡す (emacsclient)†
カレンダーで日本の祝日を表示する†
- M-x: calendar で表示するカレンダーで日本の祝日を表示する方法。
- japanese-holidays.el を入手する
- 設定
- enmacs 起動時に cl-lib が見つからないと怒られた場合
cscope†
- タグシステムの一つ
- debian では、 cscope パッケージに入っている
- この他、 emacs で使用するのに xcscope.el を使う。そのために cscope-el パッケージを導入する
tag の生成†
$ cscope-indexer -r
xcsxope.el で見る†
`cscope-minor-mode' Minor Mode Bindings:
key             binding
---             -------
C-c             Prefix Command
C-c s           Prefix Command
C-c s A         cscope-unset-initial-directory
C-c s B         cscope-display-buffer-toggle
C-c s C         cscope-find-called-functions
C-c s D         cscope-dired-directory
C-c s E         cscope-edit-list-of-files-to-index
C-c s G         cscope-find-global-definition-no-prompting
C-c s I         cscope-index-files
C-c s L         cscope-create-list-of-files-to-index
C-c s N         cscope-next-file
C-c s P         cscope-prev-file
C-c s S .. C-c s T              cscope-tell-user-about-directory
C-c s W         cscope-tell-user-about-directory
C-c s a         cscope-set-initial-directory
C-c s b         cscope-display-buffer
C-c s c         cscope-find-functions-calling-this-function
C-c s d         cscope-find-global-definition
C-c s e         cscope-find-egrep-pattern
C-c s f         cscope-find-this-file
C-c s g         cscope-find-global-definition
C-c s i         cscope-find-files-including-file
C-c s n         cscope-next-symbol
C-c s p         cscope-prev-symbol
C-c s s         cscope-find-this-symbol
C-c s t         cscope-find-this-text-string
C-c s u         cscope-pop-mark
参考リンク†
gtags / global の利用†
- タグシステムの一つ
- debian では、 global パッケージに入っている
tag の生成†
$ gtags [options] [path]
$ gtags -f <files>
$ gtags -v
- gtags には、etags と違って append mode が存在しないため、xargs でマルチスレッド化して実行するのは不可かもしれない。
- -f <file> を指定しない場合、gtags はカレント以下のディレクトリを走査してタグ情報を生成する。
- tag の生成処理が終わると、実行したディレクトリ配下に、下記4つのファイルが作られる:
GPATH GTAGS GRTAGS GSYMS 
emacs の設定†
(setq default-case-fold-search nil)  ; 大文字・小文字を区別させる
; "\M-p" が prefix-command に喰われていて使えないので、全て "\C-\M-" のシリーズにしている
(global-set-key "\C-\M-t" 'gtags-find-tag)     ;関数の定義元へ
(global-set-key "\C-\M-r" 'gtags-find-rtag)    ;関数の参照先へ
(global-set-key "\C-\M-s" 'gtags-find-symbol)  ;変数の定義元/参照先へ
(global-set-key "\C-\M-p" 'gtags-find-pattern)
(global-set-key "\C-\M-f" 'gtags-find-file)    ;ファイルにジャンプ
(global-set-key [?\C-,] 'gtags-pop-stack)   ;前のバッファに戻る
参考リンク†
etags (ctags for Emacs)の利用†
tag の生成†
- まずは、 Tag file を生成する。emacs パッケージには etags.emacs** なコマンドが付属している場合があるので、それがあればそちらを使う。
- Tag file は TAGS というファイル名で生成される。
$ etags.emacs23 `find | grep -i "\.c$\|\.cc\|\.cpp$\|\.cxx$\|\.h$" 
- ただ、ファイル数が多い場合にはコマンドラインバッファの上限を超えてしまい、全てのファイルを処理できないことが予想される。この問題は xargs を使って解消することが出来る。
 以下に、そのためのスクリプトを示す。
 下記の例では、 xargs の -P オプションも併用し、マルチスレッドで動作するようにしている。 THREAD_NUM は CPUの数もしくは Core 数に合わせる。#!/bin/bash
TAGS_FILE=TAGS
CMD_ETAGS=etags.emacs23
THREAD_NUM=4
rm -f ${TAGS_FILE};
find | grep -i "\.c$\|\.cc\|\.cpp$\|\.cxx$\|\.h$" | xargs -P ${THREAD_NUM} -I {} ${CMD_ETAGS} -a {} # 対象となるソース・ヘッダを etags に引数で渡す- 全てのファイルを渡すのにコマンドバッファが足りなくなってしまう場合(=ファイル数が多い場合や個々のパス名が長い場合など)でも全てのファイルを渡せるよう、xargs を使って etags にファイル名を渡すようにしている。
- コマンドバファが足りなくなった場合、 xargs は複数回 etags を呼ぶ。この場合、 etags が append モードで動作しないと etags は呼ばれる度に TAGS ファイルを上書きしてしまうので注意すること(そのため上記では append モードにするため "-a" を付けて etags を呼んでいる)。
 
emacs に TAGS ファイルを読みこませる†
M-x: tags-reset-tags-tables 一旦リセットする
M-x: visit-tags-table 明示的に TAGS ファイルを読み込む
- emcs から操作する(下記)
| Key binding | command | description | 
|---|
 | M-. | find-tag | クラスや関数を探す |  | C-u M-. |  | 次の検索結果候補を表示する |  | C-u – M-. |  | 前の検索結果候補を表示する |  | M-* |  | 元の場所に戻る |  | C-x 4 . | find-tag-other-window | タグ(名前)の定義箇所を探し別ウィンドウに表示 |  | C-x 5 . | find-tag-other-frame | タグ(名前)の定義箇所を探し別フレームに表示 |  
 
ctags-exuberant†
- install 後、実行ファイルは /usr/bin/ctags-exuberant に配置される。システムによっては /usr/bin/ctags に symlink されることもある。
TAGS file の生成†
$ ctags-exuberant -e -R [path]
- emacs からの使い方は、etags と基本的に同じ
emacs から TAGS の生成を行えるようにする†
参考リンク†
ebrowse (ebrowse for Emacs)の利用†
Links†
モードラインに現在カーソルが位置している関数の関数名を表示する†
gdb-mode†
- gdb-mode のコマンド
| bindings | description | remark | 
|---|
 | C-x C-a C-t | ソースコードの現在のカーソル位置に break point を設定する |  |  | C-h m | EmacsのGDBモードの機能に関する説明を表示 |  |  | M-s | Step実行。関数なら入って止まる |  |  | C-x C-a C-s |  | M-n | GDBのnextコマンドのように、 関数呼び出しをすべてスキップして、 現在の関数内の次のソース行まで実行 |  |  | C-x C-a C-s |  | M-i | GDBのstepiコマンドのように、 1命令を実行 |  |  | C-x C-a C-i |  | M-x gdb-nexti | GDBのnextiコマンドを使って、 次の命令まで実行 |  |  | C-c C-f | GDBのfinishコマンドのように、 選択されたスタック・フレームを終了するまで実行を継続 |  |  | M-c | GDBのcontinueコマンドのように、 ユーザ・プログラムの実行を継続 |  |  | M-u | GDBのupコマンドのように、 数値引数によって示される数だけ上位のフレームに移動 |  |  | M-d | GDBのdownコマンドのように、 数値引数によって示される数だけ下位のフレームに移動 |  |  | C-x & | カーソルの位置にある数値を読み取り、 GDBのI/Oバッファの末尾に挿入 |  |  | C-x C-a C-r | 次の break point まで実行 |  |  | C-x C-a C-f | 現在のカーソル位置まで実行 |  |  
 
XEmacs only†
fume-mode†
;=========================================================
; fume-mode (XEmacs only)
(defun function-menu-mode()
  (interactive)
  (fume-mode t)
  (fume-add-menubar-entry t)) ; モード行に現在カーソルがある関数の名前を表示
(global-set-key "\C-\M-l" 'function-menu-mode)	; function-menu-mode に入る
using Unicode†
emacsでは使えるのに、何故かXEmacsのdefaultでは使えないUnicode. 使えるようにするには、以下をinit.elに追記する:
(require 'un-define)
(unless (emacs-version>= 21 5 6)
  (require 'mule-ucs-unicode "unicode"))
(set-coding-category-system 'utf-8 'utf-8)
(set-coding-priority-list '(utf-8))
(load "term/keyswap")
(global-set-key [backspace] 'backward-delete-char)
(keyboard-translate ?\C-h 'backspace)
(global-set-key [delete] 'delete-char)
ホイールマウスのスクロールを有効にする†
(autoload
  'mwheel-install "mwheel" "Enabal mouse wheel support.")
(mwheel-install)
多言語入力†
ドイツ語†
- M-x set-input-method german
- ウムラウトは以下のキー入力にて。ちなみに z と y が入れ替わるので、慣れてない人は注意!
| Character | Key binding | 
|---|
 | ä | C-x 8 " a |  | ü | C-x 8 " u |  | ö | C-x 8 " o |  
 
チェコ語†
- M-x set-input-method czech
| Character | Key binding | 
|---|
 | č | + c |  | Č | + C |  | ě | + e |  | Ě | + E |  | ř | + r |  | Ř | + R |  | ň | + n |  | Ň | + N |  | ď | + d |  | Ď | + D |  | ť | + t |  | Ť | + T |  | á | = a |  | Á | = A |  | é | = e |  | É | = E |  | í | = i |  | Í | = I |  | ó | = o |  | Ó | = O |  | ů | + |  | Ů | ~ U |  | ú | - u |  | Ú | - U |  
 
html-mode†
キーバインド†
| key | command | description | remark | 
|---|
| C-c C-j | html-line | 改行+ <br>挿入 |  | 
| C-c C-h | html-paragraph | <p> 挿入 |  | 
| C-c C-a | sgml-attributes |  |  | 
| C-c C-b | sgml-skip-tag-backward | 一つ前の開始タグまで戻る(?) |  | 
| C-c C-d | delete-tag | タグ単位で消す |  | 
| C-c C-f | sgml-skip-tag-foward | 1つ先の終了タグまで飛ぶ(?) |  | 
| C-c / | sgml-close-tag | 終了タグを挿入する |  | 
| C-c <1-6> | html-headline-<1-6> | h1-h6 の開始・終了タグを挿入する |  | 
| C-c C-c - | html-horizontal-rule | <hr> タグを挿入する |  | 
| C-c C-c c | html-checkboxes | '<input type="checkbox" name="' を挿入する |  | 
| C-c C-c h | html-href-ancor | '<a href="' を挿入する |  | 
| C-c C-c i | html-image | 対話的に img タグを挿入する |  | 
| C-c C-c n | html-name-anchor | '<a name="' を挿入する |  | 
| C-c C-c o | html-ordered-list | 番号リストの開始タグを挿入する |  | 
| C-c C-c r | html-radio-button | ラジオボタンを挿入する |  | 
| C-c C-c u | html-unordered-list | 番号なしリストの開始タグを挿入する |  | 
| C-c DEL | sgml-delete-tag | カーソルの後ろのタグを消す |  |