type t (* void *)

ソフトウエアのこととか

Emacs: Emacsのelispの共有がうまくいかない

ツイッター上で延々VMの全画面表示がフィットしないとか、自転車が車にぶつけられて移動手段がママチャリになってつらぽよとか、Emacsが上手いこと動いてくれないとか段々何もかもが僕の邪魔をしているような衝動にかられてアレな感じです。

丸一日アニメを見ながらEmacsDropboxをいじってたのですが、elispの共有が上手いこといかないのですよねー。

 やりたいこと

  • Emacsの設定・elispを全てDropbox上にアップしたい
  • elispは手動でも入れたいしEmacs24からデフォで入っているelpaを活用したい
  • なるべく手早くやりたい

まぁインターネット上の情報源を当たって、設定ファイルをDropbox上に置きローカルからはそれをロードするだけにすることは簡単に出来た。

emacsとzshの設定ファイルをDropboxで共有する - minus9dの日記 を参考にした。

;;load-pathを追加

(setq load-path

      (append

       (list (expand-file-name "~/Dropbox/.emacs.d/elisp")) load-path))

 

(setq load-path

      (append

       (list (expand-file-name "~/Dropbox/.emacs.d/elpa")) load-path))

 

;;設定ファイルの本体を読み込み

 

(load "~/Dropbox/.emacs.d/common.el")

で、Dropbox上のcommon.elには各種キーバインドの設定とかを書いておくと。

 

問題はelispの方。Emacs24を起動させた後、例えばelpaでインストールしたhelmを起動させようとすると

Symbol's function definition is void: internal--before-with-selected-window 

 というメッセージが出てしまう。まぁhelm-updateを呼ぼうとしているらしい。

elpaでインストールしたバージョンが古かったのか。

 

さてさて、どうしてこんなことになるのだろうか考えてもよくわからない。

elispに対してはパスも恐らく通ってるし。

考えたところ、elpaでインストールしたelispは自分でrequire書いてないよなぁということに気づく。

まずelpaで何をやっているのか把握せねば。

EmacsWiki: ELPA によると、Emacsはinit.elをロードした後に‘package-initialize’という関数を呼び出して、elpaを使ってインストールしたelispをロードしているよう。

つまり、package-initializeが共有できてないからこういう自体が発生するわけみたい。

恐らくだけど。

 

さて、package-initializeはどこにあってどうやって作られのだろうか。もうちょっと調べてみないとなぁ…。

それとももっと簡単な共有の方法があるのだろうか…。もうなんか疲れた。

ぜひご存じの方は教えてください。お願いします。