Warning: reference to free variable `org-directory'
とりあえず、Emacs を起動すると horizontal に画面が分割され、分割された下側に Compile-Log として上記のエラーが表示されていました。今までは、Emacs を起動するたびに C-x 1 を入力して Compile-Log を見なかったことにするなどして対応してきましたが、流石に毎回 C-x 1 を入力するのも面倒になってきたので直すことにしました。
とりあえず、グーグルで "Warning: reference to free variable `org-directory'" と検索してみると、なんと anything.el をインストールしたときの自分のページしか検索に引っかかりませんでした。。。
自分のための日記: anything.el のインストール
こんなエラー出してるの、オレだけなんだろうなぁ。。。
(´・Д・`;)
org-directory ってことは、多分、org-mode に関係する設定なんだろうと予測。anything.el をインストールした後に、org-mode の設定でエラーが出たので、とりあえず、org-mode の設定と anything.el の設定の順番を変更してみる。
- 変更前
; for org mode (add-to-list 'auto-mode-alist '("\\.org\\'" . org-mode)) (global-set-key "\C-cl" 'org-store-link) (global-set-key "\C-ca" 'org-agenda) (global-set-key "\C-cb" 'org-iswitchb) (global-font-lock-mode 1) (transient-mark-mode 1) (add-hook 'org-mode-hook (lambda () (setq truncate-lines nil))) (setq org-agenda-files (list "~/org")) (setq org-deadline-warning-days 0) (add-to-list 'load-path (expand-file-name "~/.emacs.d/auto-install")) (require 'auto-install) (setq auto-install-directory "~/.emacs.d/auto-install/") (auto-install-compatibility-setup) (require 'recentf-ext) (require 'anything-startup)
(require 'recentf-ext) (require 'anything-startup) ; for org mode (add-to-list 'auto-mode-alist '("\\.org\\'" . org-mode)) (global-set-key "\C-cl" 'org-store-link) (global-set-key "\C-ca" 'org-agenda) (global-set-key "\C-cb" 'org-iswitchb) (global-font-lock-mode 1) (transient-mark-mode 1) (add-hook 'org-mode-hook (lambda () (setq truncate-lines nil))) (setq org-agenda-files (list "~/org")) (setq org-deadline-warning-days 0) (add-to-list 'load-path (expand-file-name "~/.emacs.d/auto-install")) (require 'auto-install) (setq auto-install-directory "~/.emacs.d/auto-install/") (auto-install-compatibility-setup)
すると、どうでしょう。org-mode の設定が完全に読み込まれなくなってしまいました。Messages を確認すると以下のエラーが出ていることが分かりました。
File error: Cannot open load file, recentf-ext
recentf-ext が読み込めないとのことで、よくよく .emacs ファイルを見てみると、recentf-ext は ~/.emacs.d/auto-install 内に入っていることを思い出しました。
ということで、今回は、load-path の設定のあとに recentf-ext を読み込むように設定。
; for org mode (add-to-list 'auto-mode-alist '("\\.org\\'" . org-mode)) (global-set-key "\C-cl" 'org-store-link) (global-set-key "\C-ca" 'org-agenda) (global-set-key "\C-cb" 'org-iswitchb) (global-font-lock-mode 1) (transient-mark-mode 1) (add-hook 'org-mode-hook (lambda () (setq truncate-lines nil))) (setq org-agenda-files (list "~/org")) (setq org-deadline-warning-days 0) (add-to-list 'load-path (expand-file-name "~/.emacs.d/auto-install")) (require 'recentf-ext) (require 'anything-startup) (require 'auto-install) (setq auto-install-directory "~/.emacs.d/auto-install/") (auto-install-compatibility-setup)
すると、どうでしょう!!今回は、なんのエラーも表示されることなく、emacs を起動できました!!
因みに、以下のように、anything-startup と auto-install の require する順番を変更すると、最初の問題点である warning が表示されることを確認しました。
Warning: reference to free variable `org-directory'
原因は、よく分かっていませんが、
(require 'auto-install) (require 'anything-startup)
こうすると、
Warning: reference to free variable `org-directory'
この warning が emacs 起動時に表示されるということです。
という記事を書くなどしていたら、もっと華麗な方法で warning を消す方法を見つけてしまいました。
emacsにanythingを導入した時に出る警告 - まーのメモ
(defvar org-directory "")
org-directory は、org-mode の変数で (defvar org-directory "") とすることで warning を回避できるようです。
確かに以前の設定に戻し、(require 'anything-startup) の前に (defvar org-directory "") を設定しておくと、warning が表示されなくなることが確認できました。。。。。
じゃぁ、なんでオレの設定は、(defvar org-directory "") ってしてないのに動いているんだ!?
( ̄Д ̄;)
(require 'auto-install) の前に (require 'anything-startup) を呼ぶようにしただけで動いているんだが、これでいいんだろうか?今度は、動いていることに対して不安になってきた。
とりあえず、動いているのでヨシとしよう。。。emacs はどうやって設定したらいいのか、設定に失敗した場合、どうやって原因を探ったらいいのか、がよく分からないなぁ。。。emacs の所為というより自分の勉強不足なんだけれども。
それにしても、「defvar で回避できる」って記事にしてた人のブログは参考になるなぁ。色々と参考になる記事が上がっているので、rss reader に登録しました!!
まーのメモ
それではー。
0 件のコメント:
コメントを投稿