From 313acdec27933d3189bc84a9fafea5f4d269dc3c Mon Sep 17 00:00:00 2001 From: Takahiro OHKUBO Date: Fri, 3 Jul 2026 09:07:12 +0900 Subject: [PATCH] first commit --- .gitignore | 6 ++ Readme.org | 309 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 315 insertions(+) create mode 100644 .gitignore create mode 100644 Readme.org diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..ed6ead8 --- /dev/null +++ b/.gitignore @@ -0,0 +1,6 @@ +*.elc +*.eln +.DS_Store +*~ +\#*\# +.#* \ No newline at end of file diff --git a/Readme.org b/Readme.org new file mode 100644 index 0000000..9777839 --- /dev/null +++ b/Readme.org @@ -0,0 +1,309 @@ +\ +#+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