| 1 | [[PageOutline]] |
| 2 | = Emacs ガイド(案)- vine-default について = |
| 3 | |
| 4 | == system-wide な設定 == |
| 5 | |
| 6 | Emacs を起動すると、site-start.el を読み終われば、 |
| 7 | すぐに ~/.emacs.el を読み込みます。 |
| 8 | site-start.el は Vine Linux の distribution-wide な設定ファイルのため、 |
| 9 | 4.2 以前で system-wide な設定を施すためには、 |
| 10 | RPMパッケージがアップデートされるたびに site-start.el を編集する必要がありました。 |
| 11 | |
| 12 | そこで 5.0 では、 |
| 13 | 直接 site-start.el を変更しなくても、 |
| 14 | system-wide な設定をできるようにしました。 |
| 15 | |
| 16 | system-wide な設定ファイルは、 |
| 17 | Emacs のメジャーバージョンが XX の場合、 |
| 18 | /etc/emacs/emacs-XX-local.el |
| 19 | に配置されています。 |
| 20 | Emacs-XX を起動したとき、 |
| 21 | もし /etc/emacs/emacs-XX-local.el が存在すれば、 |
| 22 | site-start.el の一番最後に読み込まれます。 |
| 23 | したがって、distribution-wide な設定よりも emacs-XX-local.el が優先されます。 |
| 24 | |
| 25 | |
| 26 | == Vine Linux のデフォルト設定:vine-default == |
| 27 | |
| 28 | このドキュメントは [http://ml.vinelinux.org/vineseed/msg00320.html VineSeed:17162] を改編して作成しました。 |
| 29 | |
| 30 | Vine Linux の Emacs 23 では、 |
| 31 | Emacs 上で動作するアプリケーションのパッケージをインストールしたら、 |
| 32 | ユーザ初期設定ファイル ~/.emacs.el に何も設定を記述しなくても、 |
| 33 | そのアプリケーションがある程度使えるように、 |
| 34 | あらかじめ設定を用意し、その設定を自動的に読み込むようにしています。 |
| 35 | この Emacs における Vine Linux のデフォルト設定を vine-default と呼ぶことにします。 |
| 36 | |
| 37 | === 使い方 === |
| 38 | |
| 39 | vine-default は、/usr/share/emacs-23.x/site-lisp 以下に格納されています。 |
| 40 | * vine-default-base.el:Emacs の基本的な設定 |
| 41 | * vine-default-faces.el:Emacs のフォントやカラーの設定 |
| 42 | * ''package''/vine-default-''package''.el:''package'' の設定 |
| 43 | |
| 44 | Emacs を起動すると、デフォルトで vine-default の boolean が t になっているので、 |
| 45 | vine-default を読み込みます。 |
| 46 | |
| 47 | もし vine-default をすべて無効にしたい場合は、 |
| 48 | ~/.emacs.el に |
| 49 | {{{ |
| 50 | (setq vine-default nil) |
| 51 | }}} |
| 52 | を設定します。 |
| 53 | この場合は、メニューバーと言語ロケール以外は何も設定されていません。 |
| 54 | |
| 55 | vine-default のうち、いくつかの設定を無効にすることができます。 |
| 56 | 各 vine-default は、vine-default-''name'' の boolean が定義されていて、 |
| 57 | デフォルトでは t になっています。 |
| 58 | |
| 59 | 例えば、vine-default-base, vine-default-faces, |
| 60 | vine-default-yatex, vine-default-mew を無効にしたい場合は、 |
| 61 | ~/.emacs.el に |
| 62 | {{{ |
| 63 | (setq vine-default-base nil |
| 64 | vine-default-faces nil |
| 65 | vine-default-yatex nil |
| 66 | vine-default-mew nil |
| 67 | ) |
| 68 | }}} |
| 69 | を設定します。 |
| 70 | |
| 71 | いくつかのEmacs Lispパッケージのみを有効にしたいときは、一旦すべての vine-default を無効にした上で、いくつかの vine-default を有効にしてください。 |
| 72 | |
| 73 | 例えば、vine-default.yatex, vine-default-tamago のみを有効にしたい場合は、 |
| 74 | ~/.emacs.el に |
| 75 | {{{ |
| 76 | (setq vine-default nil) |
| 77 | |
| 78 | (requires 'vine-default-yatex) |
| 79 | |
| 80 | (requires 'vine-default-tamago) |
| 81 | }}} |
| 82 | を設定します。 |
| 83 | |
| 84 | |
| 85 | === 設定されている vine-default の閲覧 === |
| 86 | |
| 87 | Emacs 上からインストールされている elisp パッケージにあらかじめ設定されている vine-default の設定を閲覧できます。 |
| 88 | |
| 89 | Emacs 上で |
| 90 | {{{ |
| 91 | M-x show-vine-default |
| 92 | }}} |
| 93 | を実行すると、起動している Emacs のバージョンに対応した vine-default の設定を閲覧できます。 |
| 94 | |
| 95 | |
| 96 | === 高度な使い方 === |
| 97 | |
| 98 | vine-defaultでの設定を上書きしたい場合はフックを使います。 |
| 99 | |
| 100 | 例えば、vine-default で set-frame-font には次のように「Monospace 12」が設定されてたとします。 |
| 101 | {{{ |
| 102 | (if window-system |
| 103 | (set-frame-font "Monospace 12")) |
| 104 | }}} |
| 105 | |
| 106 | これを ~/.emacs.el で変更したい場合は after-vine-default-setup-hook をフックしてください。 |
| 107 | {{{ |
| 108 | (add-hook 'after-vine-default-setup-hook |
| 109 | (lambda () |
| 110 | (if window-system |
| 111 | (set-frame-font "Monospace 10")))) |
| 112 | }}} |
| 113 | |
| 114 | 上記はあくまで一例として紹介しましたが、 |
| 115 | フォントの設定を変更したい方は、 |
| 116 | 現実的には、vine-default-faces 自体を使わないと思われますので、 |
| 117 | ~/.emacs.el に |
| 118 | {{{ |
| 119 | (setq vine-default-faces nil) |
| 120 | |
| 121 | (unless vine-default-faces |
| 122 | (if window-system (set-frame-font "DejaVu Sans Mono 10"))) |
| 123 | }}} |
| 124 | のように、vine-default-faces を無効にしておいてフォントの設定をしても良いです。 |
| 125 | |
| 126 | |
| 127 | また、各 vine-default で設定されていない項目についてはフックせずに、 |
| 128 | そのまま ~/.emacs.el に記述しても有効です。 |
| 129 | |
| 130 | vine-default で何が設定されているのかをよく理解していない場合は、 |
| 131 | とりあえず after-vine-default-setup-hook へフックしてしまっても問題ありません。 |
| 132 | |
| 133 | そのため、別のファイル .emacs-misc.el にまとめてしまい、 |
| 134 | 以下のようにして ~/.emacs.el でフックして読み込ませてしまっても良いです。 |
| 135 | {{{ |
| 136 | (add-hook 'after-vine-default-setup-hook |
| 137 | (lambda () |
| 138 | (load (expand-file-name "~/.emacs.misc.el") nil t nil) |
| 139 | )) |
| 140 | }}} |
| 141 | |
| 142 | この仕組みの詳細については「vine-default の下での ~/.emacs.el の設定」セクションを参照してください。 |
| 143 | |
| 144 | |
| 145 | === IME === |
| 146 | |
| 147 | Vine Linux の Emacs 上における IME は、 |
| 148 | X 上におけるそれと連動して、環境変数 EMACS_IME により設定されます。 |
| 149 | |
| 150 | もし EMACS_IME と異なる IME を使いたい場合は、 |
| 151 | skk を例にすると、~/.emacs.el に |
| 152 | {{{ |
| 153 | (setq emacs-ime "skk") |
| 154 | }}} |
| 155 | を設定します。 |
| 156 | |
| 157 | |
| 158 | === Vine Linux 4 の .emacs.my.el === |
| 159 | |
| 160 | Vine Linux 4.2 までの ~/.emacs.el には、 |
| 161 | ユーザ用初期化ファイル ~/.emacs.my.el があれば、 |
| 162 | それを読み込む仕組みがありました。 |
| 163 | |
| 164 | Vine Linux 5.x では、vine-default に移行したため、.emacs.my.el を読み込む仕組みは廃止しました。 |
| 165 | |
| 166 | もし過去の .emacs.my.el を流用したい場合は、 |
| 167 | 以下のように after-vine-default-setup-hook にフックして、 |
| 168 | ~/.emacs.my.el を読み込ませることができます。 |
| 169 | {{{ |
| 170 | (add-hook 'after-vine-default-setup-hook |
| 171 | (lambda () |
| 172 | (if (file-exists-p (expand-file-name "~/.emacs.my.el")) |
| 173 | (load (expand-file-name "~/.emacs.my.el") nil t nil)) |
| 174 | )) |
| 175 | }}} |
| 176 | ただし、Emacs 23 と Emacs 22 以前は随分仕様が変わっているので、 |
| 177 | Vine Linux 4の Emacs 22 などで使っていた ~/.emacs.my.el をそのまま流用できるとは限りません。 |
| 178 | |
| 179 | |
| 180 | === 仕組み === |
| 181 | |
| 182 | vine-default は、各デフォルト設定を読み込む *-init.el を、 |
| 183 | vine-default-setup 内で読まれる vine-default-setup-hook にひっかけて一旦ストックしておき、 |
| 184 | after-init-hook にひっかけた vine-default-setup を実行することにより、 |
| 185 | Vine Linux のデフォルト設定が読み込まれます。 |
| 186 | |
| 187 | 具体的には、site-start.el と *-init.el に以下のような関数とフックを定義しています。 |
| 188 | {{{ |
| 189 | ;;; Emacs default settings for Vine Linux |
| 190 | (defcustom emacs-ime (getenv "EMACS_IME") |
| 191 | "A variable of default Input Method Editor" |
| 192 | :type 'string) |
| 193 | (if (null emacs-ime) |
| 194 | (setq emacs-ime "scim")) |
| 195 | |
| 196 | (defcustom vine-default t |
| 197 | "A boolean for all Vine Linux default settings" |
| 198 | :type 'boolean) |
| 199 | (if (equal (getenv "LOGNAME") "root") |
| 200 | (setq vine-default nil)) |
| 201 | |
| 202 | (defcustom vine-default-base t |
| 203 | "A boolean for vine-default-base" |
| 204 | :type 'boolean) |
| 205 | |
| 206 | (defcustom vine-default-faces t |
| 207 | "A boolean for vine-default-faces" |
| 208 | :type 'boolean) |
| 209 | |
| 210 | (defvar vine-default-setup-hook nil |
| 211 | "*List of functions to be called at vine-default-setup") |
| 212 | |
| 213 | (defvar after-vine-default-setup-hook nil |
| 214 | "*List of functions to be called at the end of vine-default-setup") |
| 215 | |
| 216 | (defun vine-default-setup () |
| 217 | "a function for setup to default configurations of Vine Linux." |
| 218 | (if vine-default |
| 219 | (progn |
| 220 | (if vine-default-base (require 'vine-default-base)) |
| 221 | (if vine-default-faces (require 'vine-default-faces)) |
| 222 | (run-hooks 'vine-default-setup-hook) |
| 223 | (run-hooks 'after-vine-default-setup-hook) |
| 224 | ) |
| 225 | ) |
| 226 | ) |
| 227 | |
| 228 | (add-hook 'after-init-hook 'vine-default-setup) |
| 229 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
| 230 | |
| 231 | (mapc 'load (directory-files "/etc/emacs-23.0.92/site-start.d" t "\\.el\\'")) |
| 232 | }}} |
| 233 | |
| 234 | Emacs の関連パッケージに対しては、 |
| 235 | 例えば YaTeX の場合は、 |
| 236 | 50yatex-init.el に以下のような設定を追加しています。 |
| 237 | {{{ |
| 238 | (defcustom vine-default-yatex t |
| 239 | "A boolean for vine-default-yatex" |
| 240 | :type 'boolean) |
| 241 | |
| 242 | (add-hook 'vine-default-setup-hook |
| 243 | (lambda() |
| 244 | (if vine-default-yatex |
| 245 | (require 'vine-default-yatex)))) |
| 246 | }}} |
| 247 | |
| 248 | vine-default-yatex.el には、YaTeX のデフォルト設定を記述し、 |
| 249 | (provide 'vine-default-yatex) を提供するようにします。 |
| 250 | |
| 251 | |
| 252 | ==== vine-default の下での ~/.emacs.el の設定 ==== |
| 253 | |
| 254 | vine-default の下での Emacs の設定は、 |
| 255 | 大きくわけて以下の 3 つの設定パートに分かれています。 |
| 256 | |
| 257 | a. vine-default |
| 258 | b. vine-default が上書きしない設定 |
| 259 | c. vine-default が上書きする設定 |
| 260 | |
| 261 | (a) は ~/.emacs.el を読み込んだ直後に、 |
| 262 | /usr/share/emacs-23.x/site-lisp 以下の vine-default-*.el を然るべき順序で読み込まれます。 |
| 263 | |
| 264 | (b), (c) は、必要であれば ~/.emacs.el に(あるいは、.emacs.el から読み込む別の *.el に)設定します。 |
| 265 | |
| 266 | (b) を直接 ~/.emacs.el に設定して構いませんが、 |
| 267 | (c) を直接 ~/.emacs.el に設定していると、 |
| 268 | (a) により vine-default が優先されてしまいます。 |
| 269 | |
| 270 | 例えば、以下のように ~/.emacs.el にフォントを設定していても、 |
| 271 | 後から読まれる vine-default-faces.el により「Monospace 12」に上書きされていまいます。 |
| 272 | {{{ |
| 273 | (if window-system |
| 274 | (set-frame-font "Monospace 10")) |
| 275 | }}} |
| 276 | このような vine-default を上書きする設定は、after-vine-default-setup-hook をひっかけます。詳細は「高度な使い方」セクションを参照してください。 |
| 277 | |
| 278 | |
| 279 | == Emacs Lisp パッケージ == |
| 280 | |
| 281 | ここでは、Emacs Lisp パッケージの作成および emacs flavor の挙動について説明します。 |
| 282 | |
| 283 | Vine Linux の Emacs は、 |
| 284 | Debian で採用している Emacs Lisp パッケージ管理の独自システムを採用しています。 |
| 285 | |
| 286 | Emacs Lisp パッケージをインストールしたときに、 |
| 287 | *.el から現在インストールされている Emacs の flavor に対応した *.elc を |
| 288 | 自動的に生成(バイトコンパイル:byte-compile)し、 |
| 289 | 必要なパスの設定やリソースの読み込みを行います。 |
| 290 | さらに、Vine Linux の場合は vine-default の設定も同時に施されます。 |
| 291 | |
| 292 | 逆に、Emacs Lisp パッケージをアンインストールしたときには、 |
| 293 | 通常のパッケージと同様にパッケージ自体の削除に加えて、 |
| 294 | *.elc の削除も同時に行います。 |
| 295 | |
| 296 | === パッケージ構成 === |
| 297 | |
| 298 | === spec ファイル === |
| 299 | |
| 300 | === ''package''-{install,remove}.sh === |
| 301 | |
| 302 | === ''package''-init.el === |
| 303 | |
| 304 | ''package''-init.el は、 |
| 305 | site-start.el から然るべき順序で読み込まれるように、addflavor 時に |
| 306 | /usr/share/emacs/site-lisp/''package''/''package''-init.el |
| 307 | から |
| 308 | /etc/emacs-''flavor''/site-start.d/NN''package''-init.el |
| 309 | へシンボリックリンクが張られます。 |
| 310 | |
| 311 | === vine-default-''package''.el === |
| 312 | |
| 313 | vine-default-''package''.el は、addflavor 時にバイトコンパイルしません。 |