first commit
This commit is contained in:
@@ -0,0 +1,6 @@
|
|||||||
|
*.elc
|
||||||
|
*.eln
|
||||||
|
.DS_Store
|
||||||
|
*~
|
||||||
|
\#*\#
|
||||||
|
.#*
|
||||||
+309
@@ -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
|
||||||
Reference in New Issue
Block a user