Files
my-lisp/Readme.org
T
2026-07-03 09:07:12 +09:00

310 lines
7.9 KiB
Org Mode
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
\
#+TITLE: my-lisp の読み込み手順
#+AUTHOR: Takahiro Ohkubo
#+LANGUAGE: ja
#+OPTIONS: toc:2 num:nil ^:nil
* 概要
このディレクトリには、自作 Emacs Lisp を置きます。
想定ディレクトリは以下です。
#+begin_src sh
~/.emacs.d/site-lisp/my-lisp/
#+end_src
現在の例では、以下のファイルを読み込みます。
#+begin_src sh
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
#+end_src
* init.el で load-path に追加する
まず、=init.el= の先頭付近に以下を追加します。
#+begin_src emacs-lisp
;; ------------------------------------------------------------
;; local lisp
;; ------------------------------------------------------------
(add-to-list 'load-path (expand-file-name "~/.emacs.d/site-lisp/my-lisp"))
#+end_src
既に以下のようにして、=~/.emacs.d/site-lisp/= 以下のサブディレクトリを
自動的に =load-path= へ追加している場合は、この設定だけでも動作します。
#+begin_src emacs-lisp
(cd "~/.emacs.d/site-lisp/")
(if (fboundp 'normal-top-level-add-subdirs-to-load-path)
(normal-top-level-add-subdirs-to-load-path))
(cd "~")
#+end_src
ただし、自作 Lisp の場所を明示した方が分かりやすいので、以下を追加しておく
ことを推奨します。
#+begin_src emacs-lisp
(add-to-list 'load-path (expand-file-name "~/.emacs.d/site-lisp/my-lisp"))
#+end_src
* init.el で require する
=init.el= に以下を追加します。
#+begin_src emacs-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)
#+end_src
ただし、各 =.el= ファイルの末尾に以下のような =provide= が必要です。
#+begin_src emacs-lisp
(provide 'my-org-unfill-aware)
#+end_src
例えば、=my-replace-zen-to-ascii.el= の末尾には以下が必要です。
#+begin_src emacs-lisp
(provide 'my-replace-zen-to-ascii)
#+end_src
* provide がない場合の読み込み方法
もし =provide= がない古い Lisp ファイルがある場合は、=require= ではなく
=load= を使います。
#+begin_src emacs-lisp
(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")
#+end_src
ただし、今後は各ファイル末尾に =provide= を追加して、=require= で読み込む
形式に統一する方が良いです。
* 安全な読み込み方法
ファイルが存在する場合だけ読み込むには、以下のようにします。
#+begin_src emacs-lisp
;; ------------------------------------------------------------
;; 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)))
#+end_src
この方法では、ファイルが見つからない場合は無視されます。
ただし、設定ミスに気づきにくくなるため、普段使いでは単純に =require= する方が
おすすめです。
* 推奨する init.el 追記例
以下を =init.el= の local lisp 設定の後ろあたりに追加します。
#+begin_src emacs-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)
#+end_src
* キー設定例
** Org の改行削除
=my-org-unfill-aware.el= 用のキー設定例です。
#+begin_src emacs-lisp
(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)
#+end_src
** 全角英数字・上付き下付き数字の ASCII 化
=my-replace-zen-to-ascii.el= 用のキー設定例です。
#+begin_src emacs-lisp
(bind-key "C-c h" 'replace-zen-to-ascii-region)
(bind-key "C-c H" 'replace-zen-to-ascii-region-copy)
#+end_src
** Org から PukiWiki 変換
=my-org-pukiwiki.el= に定義されている関数名に合わせて設定します。
例:
#+begin_src emacs-lisp
;; 関数名は 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)
#+end_src
** QR code 表示
=my-qrcode.el= に定義されている関数名に合わせて設定します。
例:
#+begin_src emacs-lisp
;; 関数名は my-qrcode.el の定義に合わせて調整する
;; (bind-key "C-c q" 'my-qrcode-region)
#+end_src
* 読み込み確認
Emacs 起動後、以下を評価します。
#+begin_src emacs-lisp
(locate-library "my-org-unfill-aware")
#+end_src
以下のようなパスが返れば、=load-path= の設定は成功です。
#+begin_example
"/Users/takahiro/.emacs.d/site-lisp/my-lisp/my-org-unfill-aware.el"
#+end_example
また、関数が定義されているか確認するには、以下を評価します。
#+begin_src emacs-lisp
(fboundp 'my-org-unfill-aware-auto)
(fboundp 'replace-zen-to-ascii-region)
#+end_src
=t= が返れば読み込み成功です。
* コマンドラインで起動確認する
GUI を起動せずに =init.el= の読み込み確認をするには以下を実行します。
#+begin_src sh
emacs --batch -l ~/.emacs.d/init.el
#+end_src
エラーがなければ読み込みは概ね成功です。
* よくあるエラー
** Cannot open load file
例:
#+begin_example
Cannot open load file: No such file or directory, my-org-unfill-aware
#+end_example
原因は、=load-path= にディレクトリが入っていないことです。
対処:
#+begin_src emacs-lisp
(add-to-list 'load-path (expand-file-name "~/.emacs.d/site-lisp/my-lisp"))
#+end_src
** Required feature was not provided
例:
#+begin_example
Required feature my-org-unfill-aware was not provided
#+end_example
原因は、ファイル末尾に =provide= がないことです。
対処:
#+begin_src emacs-lisp
(provide 'my-org-unfill-aware)
#+end_src
をファイル末尾に追加します。
** Symbol's function definition is void
例:
#+begin_example
Symbol's function definition is void: my-org-unfill-aware-auto
#+end_example
原因は、関数が定義されていない、またはファイルが読み込まれていないことです。
対処:
#+begin_src emacs-lisp
(require 'my-org-unfill-aware)
#+end_src
を確認します。
* 推奨配置
最終的には以下のような構成にします。
#+begin_example
~/.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
#+end_example
* メモ
=normal-top-level-add-subdirs-to-load-path= を使っている場合、
=~/.emacs.d/site-lisp/my-lisp/= は自動的に =load-path= に入るはずです。
しかし、自作 Lisp の管理を明確にするため、次の1行は入れておく方が安全です。
#+begin_src emacs-lisp
(add-to-list 'load-path (expand-file-name "~/.emacs.d/site-lisp/my-lisp"))
#+end_src