my-lisp の読み込み手順
- 概要
- init.el で load-path に追加する
- init.el で require する
- provide がない場合の読み込み方法
- 安全な読み込み方法
- 推奨する init.el 追記例
- キー設定例
- 読み込み確認
- コマンドラインで起動確認する
- よくあるエラー
- 推奨配置
- メモ
\
概要
このディレクトリには、自作 Emacs Lisp を置きます。
想定ディレクトリは以下です。
~/.emacs.d/site-lisp/my-lisp/
現在の例では、以下のファイルを読み込みます。
my-labai.el
my-org-pukiwiki.el
my-org-unfill-aware.el
my-qrcode.el
my-replace-zen-to-ascii.el
my-yatex-review-highlight.el
init.el で load-path に追加する
まず、=init.el= の先頭付近に以下を追加します。
;; ------------------------------------------------------------
;; local lisp
;; ------------------------------------------------------------
(add-to-list 'load-path (expand-file-name "~/.emacs.d/site-lisp/my-lisp"))
既に以下のようにして、=~/.emacs.d/site-lisp/= 以下のサブディレクトリを
自動的に load-path へ追加している場合は、この設定だけでも動作します。
(cd "~/.emacs.d/site-lisp/")
(if (fboundp 'normal-top-level-add-subdirs-to-load-path)
(normal-top-level-add-subdirs-to-load-path))
(cd "~")
ただし、自作 Lisp の場所を明示した方が分かりやすいので、以下を追加しておく ことを推奨します。
(add-to-list 'load-path (expand-file-name "~/.emacs.d/site-lisp/my-lisp"))
init.el で require する
init.el に以下を追加します。
;; ------------------------------------------------------------
;; my-lisp
;; ------------------------------------------------------------
(require 'my-labai)
(require 'my-org-pukiwiki)
(require 'my-org-unfill-aware)
(require 'my-qrcode)
(require 'my-replace-zen-to-ascii)
(require 'my-yatex-review-highlight)
ただし、各 .el ファイルの末尾に以下のような provide が必要です。
(provide 'my-org-unfill-aware)
例えば、=my-replace-zen-to-ascii.el= の末尾には以下が必要です。
(provide 'my-replace-zen-to-ascii)
provide がない場合の読み込み方法
もし provide がない古い Lisp ファイルがある場合は、=require= ではなく
load を使います。
(load "my-labai")
(load "my-org-pukiwiki")
(load "my-org-unfill-aware")
(load "my-qrcode")
(load "my-replace-zen-to-ascii")
(load "my-yatex-review-highlight")
ただし、今後は各ファイル末尾に provide を追加して、=require= で読み込む
形式に統一する方が良いです。
安全な読み込み方法
ファイルが存在する場合だけ読み込むには、以下のようにします。
;; ------------------------------------------------------------
;; my-lisp
;; ------------------------------------------------------------
(add-to-list 'load-path (expand-file-name "~/.emacs.d/site-lisp/my-lisp"))
(dolist (lib '(my-labai
my-org-pukiwiki
my-org-unfill-aware
my-qrcode
my-replace-zen-to-ascii
my-yatex-review-highlight))
(when (locate-library (symbol-name lib))
(require lib)))
この方法では、ファイルが見つからない場合は無視されます。
ただし、設定ミスに気づきにくくなるため、普段使いでは単純に require する方が
おすすめです。
推奨する init.el 追記例
以下を init.el の local lisp 設定の後ろあたりに追加します。
;; ------------------------------------------------------------
;; my-lisp
;; ------------------------------------------------------------
(add-to-list 'load-path (expand-file-name "~/.emacs.d/site-lisp/my-lisp"))
(require 'my-labai)
(require 'my-org-pukiwiki)
(require 'my-org-unfill-aware)
(require 'my-qrcode)
(require 'my-replace-zen-to-ascii)
(require 'my-yatex-review-highlight)
キー設定例
Org の改行削除
my-org-unfill-aware.el 用のキー設定例です。
(bind-key "C-c u a" 'my-org-unfill-aware-ascii)
(bind-key "C-c u j" 'my-org-unfill-aware-japanese)
(bind-key "C-c u u" 'my-org-unfill-aware-auto)
(bind-key "C-c u A" 'my-org-unfill-aware-ascii-copy)
(bind-key "C-c u J" 'my-org-unfill-aware-japanese-copy)
(bind-key "C-c u C" 'my-org-unfill-aware-auto-copy)
全角英数字・上付き下付き数字の ASCII 化
my-replace-zen-to-ascii.el 用のキー設定例です。
(bind-key "C-c h" 'replace-zen-to-ascii-region)
(bind-key "C-c H" 'replace-zen-to-ascii-region-copy)
Org から PukiWiki 変換
my-org-pukiwiki.el に定義されている関数名に合わせて設定します。
例:
;; 関数名は my-org-pukiwiki.el の定義に合わせて調整する
;; (bind-key "C-c p" 'my-org-pukiwiki-export-to-buffer)
;; (bind-key "C-c P" 'my-org-pukiwiki-copy-to-clipboard)
QR code 表示
my-qrcode.el に定義されている関数名に合わせて設定します。
例:
;; 関数名は my-qrcode.el の定義に合わせて調整する
;; (bind-key "C-c q" 'my-qrcode-region)
読み込み確認
Emacs 起動後、以下を評価します。
(locate-library "my-org-unfill-aware")
以下のようなパスが返れば、=load-path= の設定は成功です。
"/Users/takahiro/.emacs.d/site-lisp/my-lisp/my-org-unfill-aware.el"
また、関数が定義されているか確認するには、以下を評価します。
(fboundp 'my-org-unfill-aware-auto)
(fboundp 'replace-zen-to-ascii-region)
t が返れば読み込み成功です。
コマンドラインで起動確認する
GUI を起動せずに init.el の読み込み確認をするには以下を実行します。
emacs --batch -l ~/.emacs.d/init.el
エラーがなければ読み込みは概ね成功です。
よくあるエラー
Cannot open load file
例:
Cannot open load file: No such file or directory, my-org-unfill-aware
原因は、=load-path= にディレクトリが入っていないことです。
対処:
(add-to-list 'load-path (expand-file-name "~/.emacs.d/site-lisp/my-lisp"))
Required feature was not provided
例:
Required feature ‘my-org-unfill-aware’ was not provided
原因は、ファイル末尾に provide がないことです。
対処:
(provide 'my-org-unfill-aware)
をファイル末尾に追加します。
Symbol's function definition is void
例:
Symbol's function definition is void: my-org-unfill-aware-auto
原因は、関数が定義されていない、またはファイルが読み込まれていないことです。
対処:
(require 'my-org-unfill-aware)
を確認します。
推奨配置
最終的には以下のような構成にします。
~/.emacs.d/
├── init.el
└── site-lisp/
└── my-lisp/
├── my-labai.el
├── my-org-pukiwiki.el
├── my-org-unfill-aware.el
├── my-qrcode.el
├── my-replace-zen-to-ascii.el
└── my-yatex-review-highlight.el
メモ
normal-top-level-add-subdirs-to-load-path を使っている場合、
~/.emacs.d/site-lisp/my-lisp/ は自動的に load-path に入るはずです。
しかし、自作 Lisp の管理を明確にするため、次の1行は入れておく方が安全です。
(add-to-list 'load-path (expand-file-name "~/.emacs.d/site-lisp/my-lisp"))