Friday, April 22, 2011

Emacs 起動時の Warning: reference to free variable `org-directory' について

anything.el をインストールして以来、Emacs 起動時に出ていた以下のエラーについて、出ないように修正したので報告します。

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 に登録しました!!

まーのメモ

それではー。

No comments:

Post a Comment