一般的によく求められる処理をLisp式で実装した例をいくつか挙げます。
load-path にディレクトリを追加します。これにより、Emacs に同梱されていない
Lisp ライブラリをこのディレクトリに配置し、M-x load-library
でロードできるようになります。Emacs 用 Lisp
コードライブラリ を参照してください。
(add-to-list 'load-path "/path/to/lisp/libraries")
(setq c-tab-always-indent nil)
ここでは、値が通常「true」のときはtとなり、それ以外の「false」のときはnilとなる変数があります。
(setq-default case-fold-search nil)
これによりデフォルト値が設定され、当該変数のローカル値を持たないすべてのバッファで有効になります(ローカル変数を参照)。case-fold-search
を setq
で設定すると、現在のバッファのローカル値にのみ影響が及びますが、これは初期化ファイルで意図する動作ではないと思われます。
(setq user-mail-address "cheney@torture.gov")
Messageモードなどの各種Emacsパッケージは、メールアドレスを知る必要がある際にuser-mail-addressを参照します。メールヘッダフィールドを参照してください。
(setq-default major-mode 'text-mode)
なお、text-mode
が使われているのは、これがテキストモードに入るためのコマンドだからです。直前のシングルクォートによってこの記号は定数となります。そうでなければ、text-mode は変数名として扱われてしまいます。
(set-language-environment "Latin-1")
(line-number-mode 0)
(add-hook 'text-mode-hook 'auto-fill-mode)
(setopt selection-coding-system 'utf-8)
(load "foo")
load の引数が相対ファイル名であり、‘/’ や ‘~’
で始まらない場合、load は load-path 内のディレクトリを検索します(Emacs用Lispコードライブラリを参照)。
(load "~/foo.elc")
ここでは完全なファイル名が使用されているため、検索は行われません。
myfunction の定義を Emacs に探させる:
(autoload 'myfunction "mypackage" "Do what I say." t)
ここでは、文字列 "Do what I say."
が関数のドキュメント文字列となります。これを autoload
の定義で指定することで、パッケージがロードされていない状態でもヘルプコマンドで参照できるようになります。最後の引数 t は、この関数がインタラクティブであることを示します。つまり、M-x
myfunction RET
と入力するか、キーにバインドすることで、対話的に呼び出すことができます。関数がインタラクティブでない場合は、t を省略するか、nil を使用してください。
make-symbolic-link を実行します(Init ファイルでのキーの再バインド を参照)。
(keymap-global-set "C-x l" 'make-symbolic-link)
または
(keymap-set global-map "C-x l" 'make-symbolic-link)
変数としての値ではなく、記号 make-symbolic-link
を指すためにシングルクォートが用いられている点に、改めて注目してください。
(keymap-set lisp-mode-map "C-x l" 'make-symbolic-link)
next-line が実行されているすべてのキーを、代わりに
forward-line が実行されるように再定義します。
(keymap-substitute global-map 'next-line 'forward-line)
(keymap-global-unset "C-x C-v")
キーを未定義にする理由の一つは、それをプレフィックスにできるようにするためです。単に C-x C-v anything を定義すれば C-x C-v はプレフィックスになりますが、C-x C-v については、まず通常の非プレフィックスとしての定義を解除する必要があります。
(modify-syntax-entry ?\$ "." text-mode-syntax-table)
narrow-to-region を使用できるようにする。
(put 'narrow-to-region 'disabled nil)
通常、ユーザーはEmacsがすべてのシステムで同じように動作することを望みます。そのため、すべてのプラットフォームで同じinitファイルを使用するのが適切です。しかし、Emacsのカスタマイズに使用している関数が、一部のプラットフォームや古いバージョンのEmacsでは利用できないことがあります。このような状況に対処するには、次のように、その関数や機能が利用可能かどうかを判定する条件式の中にカスタマイズ内容を記述します。
(if (fboundp 'blink-cursor-mode)
(blink-cursor-mode 0))
(if (boundp 'coding-category-utf-8)
(set-coding-priority '(coding-category-utf-8)))
関数が定義されていない場合に発生するエラーは、単に無視しても構いません。
(ignore-errors (set-face-background 'region "grey75"))
存在しない変数に対する setq は一般的に無害であるため、それらに条件式は不要です。
use-package を使用してパッケージを自動的に読み込み、設定する。
(use-package hi-lock
:defer t
:init (add-hook 'some-hook 'hi-lock-mode)
:config (use-package my-hi-lock)
:bind (("M-o l" . highlight-lines-matching-regexp)
("M-o r" . highlight-regexp)
("M-o w" . highlight-phrase)))
これにより、一部のコマンドや変数が最初に使用された際に hi-lock
がロードされ、3つのキーがそのコマンドにバインドされるほか、hi-lock のロード後に my-hi-lock パッケージ(おそらく hi-lock
をさらにカスタマイズするもの)がロードされます。use-package
の機能については専用のマニュアルに詳細が記載されています。use-package
ユーザーマニュアル を参照してください。