wiki:Emacs

Version 29 (modified by munepi, 9 years ago) (diff)

--

Emacs

VineSeed

5.x

次期 5.0 に対応する予定の emacs-23, emacs22-22.x に関する情報を集めています。

  • emacs : emacs-23.x, デフォルト
  • emacs22 : emacs-22.3
  • emacs21 : orphaned
  • emacs23 : orphaned, emacs-23.x で replace

TODO

  • Vine Linux 向けの Emacs Policy が必要?

Emacs23

  • emacs23.spec
    • %files の /usr/share/emacs-23.0.92{,etc} が重複 -> 動作に影響ないので [pending???]
    • altenative の優先度 (emacs: 40, emacs22: 30) [done]
  • prereq_ge() macro v.s. Requires(XXX) tags
    • 現状:%define prereq_ge() %(LC_ALL="C" rpm -q --queryformat 'PreReq:%%{NAME} >= %%{VERSION}' %1| grep -v "is not")
    • Requires(XXX), XXX = {post, postun, pre, preun, ...}
  • etcskel の emacs 関連
  • vine-default の調整
    • vine-default-base.el: 要調整
    • vine-default-faces.el: faces の調整はしない。-> フォントのみにしました [done]
    • vine-default-mouse.el: 不要だと思う。[obsolete]
    • vine-default-misc.el: vine-default-base.el に書けば十分。[obsolete]
  • system-wide な設定 -> /etc/emacs/emacs-XX-local.el [done]
    • before-init-hook にひっかけるべき?
  • /etc/emacs-XX/site-start.d/NN*-init.el のシンボリックリンク化 [done]
  • 関連パッケージの vine-default 対応
    • yatex [done]
    • wl [done]
    • mew [done]
    • tamago [done]
    • anthy [done]
    • skk [done]
    • wnn7egg [done]
    • IIIMECF [done]
      • ATOK X3 において vine-default-IIIMECF.el 要調整 [done]
    • php-mode [done]
    • po-mode [done]
    • migemo [done]
    • scim-bridge-el [done]
    • uim
    • w3m-el
    • riece
    • liece
    • ...
  • vine-default の設定を簡単に閲覧できるものが必要!?例えば…、
    • showvdefaultemacs <version> なスクリプトを作成 [done]
    • Emacs からは M-x show-vine-default で showvdefaultemacs の結果を表示 [done]

Emacs22

  • etcskel/.emacs22.el を用意する?
  • vine-default を入れる? [done]
    • デフォルトで文脈依存な文字幅を wide character としてしまう? -> vine-default-faces.el にて対応 [done]

Emacs ガイド(案)- vine-default について

system-wide な設定

Emacs を起動すると、site-start.el を読み終われば、 すぐに ~/.emacs.el を読み込みます。 site-start.el は Vine Linux の distribution-wide な設定ファイルのため、 4.2 以前で system-wide な設定を施すためには、 RPMパッケージがアップデートされるたびに site-start.el を編集する必要がありました。

そこで 5.0 では、 直接 site-start.el を変更しなくても、 system-wide な設定をできるようにしました。

system-wide な設定ファイルは、 Emacs のメジャーバージョンが XX の場合、 /etc/emacs/emacs-XX-local.el に配置されています。 Emacs-XX を起動したとき、 もし /etc/emacs/emacs-XX-local.el が存在すれば、 site-start.el の一番最後に読み込まれます。 したがって、distribution-wide な設定よりも emacs-XX-local.el が優先されます。

Vine Linux のデフォルト設定:vine-default

このドキュメントは  VineSeed:17162 を改編して作成しました。

Vine Linux の Emacs 23 では、 Emacs 上で動作するアプリケーションのパッケージをインストールしたら、 ユーザ初期設定ファイル ~/.emacs.el に何も設定を記述しなくても、 そのアプリケーションがある程度使えるように、 あらかじめ設定を用意し、その設定を自動的に読み込むようにしています。 この Emacs における Vine Linux のデフォルト設定を vine-default と呼ぶことにします。

使い方

vine-default は、/usr/share/emacs-23.x/site-lisp 以下に格納されています。

  • vine-default-base.el:Emacs の基本的な設定
  • vine-default-faces.el:Emacs のフォントやカラーの設定
  • package/vine-default-package.el:package の設定

Emacs を起動すると、デフォルトで vine-default の boolean が t になっているので、 vine-default を読み込みます。

もし vine-default をすべて無効にしたい場合は、 ~/.emacs.el に

(setq vine-default nil)

を設定します。 この場合は、メニューバーと言語ロケール以外は何も設定されていません。

vine-default のうち、いくつかの設定を無効にすることができます。 各 vine-default は、vine-default-name の boolean が定義されていて、 デフォルトでは t になっています。

例えば、vine-default-base, vine-default-faces, vine-default-yatex, vine-default-mew を無効にしたい場合は、 ~/.emacs.el に

(setq vine-default-base nil
      vine-default-faces nil
      vine-default-yatex nil
      vine-default-mew nil
    )

を設定します。

いくつかのEmacs Lispパッケージのみを有効にしたいときは、一旦すべての vine-default を無効にした上で、いくつかの vine-default を有効にしてください。

例えば、vine-default.yatex, vine-default-tamago のみを有効にしたい場合は、 ~/.emacs.el に

(setq vine-default nil)

(requires 'vine-default-yatex)

(requires 'vine-default-tamago)

を設定します。

設定されている vine-default の閲覧

Emacs 上からインストールされている elisp パッケージにあらかじめ設定されている vine-default の設定を閲覧できます。

Emacs 上で

M-x show-vine-default

を実行すると、起動している Emacs のバージョンに対応した vine-default の設定を閲覧できます。

高度な使い方

vine-defaultでの設定を上書きしたい場合はフックを使います。

例えば、vine-default で set-frame-font には次のように「Monospace 12」が設定されてたとします。

(if window-system 
    (set-frame-font "Monospace 12"))

これを ~/.emacs.el で変更したい場合は after-vine-default-setup-hook をフックしてください。

(add-hook 'after-vine-default-setup-hook
	  (lambda ()
	    (if window-system 
		(set-frame-font "Monospace 10"))))

上記はあくまで一例として紹介しましたが、 フォントの設定を変更したい方は、 現実的には、vine-default-faces 自体を使わないと思われますので、 ~/.emacs.el に

(setq vine-default-faces nil)

(unless vine-default-faces
  (if window-system (set-frame-font "DejaVu Sans Mono 10")))

のように、vine-default-faces を無効にしておいてフォントの設定をしても良いです。

また、各 vine-default で設定されていない項目についてはフックせずに、 そのまま ~/.emacs.el に記述しても有効です。

vine-default で何が設定されているのかをよく理解していない場合は、 とりあえず after-vine-default-setup-hook へフックしてしまっても問題ありません。

そのため、別のファイル .emacs-misc.el にまとめてしまい、 以下のようにして ~/.emacs.el でフックして読み込ませてしまっても良いです。

(add-hook 'after-vine-default-setup-hook
	  (lambda ()
	    (load (expand-file-name "~/.emacs.misc.el") nil t nil)
	    ))

この仕組みの詳細については「vine-default の下での ~/.emacs.el の設定」セクションを参照してください。

IME

Vine Linux の Emacs 上における IME は、 X 上におけるそれと連動して、環境変数 EMACS_IME により設定されます。

もし EMACS_IME と異なる IME を使いたい場合は、 skk を例にすると、~/.emacs.el に

(setq emacs-ime "skk")

を設定します。

Vine Linux 4 の .emacs.my.el

Vine Linux 4.2 までの ~/.emacs.el には、 ユーザ用初期化ファイル ~/.emacs.my.el があれば、 それを読み込む仕組みがありました。

Vine Linux 5.x では、vine-default に移行したため、.emacs.my.el を読み込む仕組みは廃止しました。

もし過去の .emacs.my.el を流用したい場合は、 以下のように after-vine-default-setup-hook にフックして、 ~/.emacs.my.el を読み込ませることができます。

(add-hook 'after-vine-default-setup-hook
	  (lambda ()
	    (if (file-exists-p (expand-file-name "~/.emacs.my.el"))
		(load (expand-file-name "~/.emacs.my.el") nil t nil))
	    ))

ただし、Emacs 23 と Emacs 22 以前は随分仕様が変わっているので、 Vine Linux 4の Emacs 22 などで使っていた ~/.emacs.my.el をそのまま流用できるとは限りません。

仕組み

vine-default は、各デフォルト設定を読み込む *-init.el を、 vine-default-setup 内で読まれる vine-default-setup-hook にひっかけて一旦ストックしておき、 after-init-hook にひっかけた vine-default-setup を実行することにより、 Vine Linux のデフォルト設定が読み込まれます。

具体的には、site-start.el と *-init.el に以下のような関数とフックを定義しています。

;;; Emacs default settings for Vine Linux
(defcustom emacs-ime (getenv "EMACS_IME")
  "A variable of default Input Method Editor"
  :type 'string)
(if (null emacs-ime)
    (setq emacs-ime "scim"))

(defcustom vine-default t
  "A boolean for all Vine Linux default settings"
  :type 'boolean)
(if (equal (getenv "LOGNAME") "root") 
    (setq vine-default nil))

(defcustom vine-default-base t
  "A boolean for vine-default-base"
  :type 'boolean)

(defcustom vine-default-faces t
  "A boolean for vine-default-faces"
  :type 'boolean)

(defvar vine-default-setup-hook nil
  "*List of functions to be called at vine-default-setup")

(defvar after-vine-default-setup-hook nil
  "*List of functions to be called at the end of vine-default-setup")

(defun vine-default-setup ()
  "a function for setup to default configurations of Vine Linux."
  (if vine-default
      (progn
	(if vine-default-base (require 'vine-default-base))
	(if vine-default-faces (require 'vine-default-faces))
	(run-hooks 'vine-default-setup-hook)
	(run-hooks 'after-vine-default-setup-hook)
	)
    )
  )

(add-hook 'after-init-hook 'vine-default-setup)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

(mapc 'load (directory-files "/etc/emacs-23.0.92/site-start.d" t "\\.el\\'"))

Emacs の関連パッケージに対しては、 例えば YaTeX の場合は、 50yatex-init.el に以下のような設定を追加しています。

(defcustom vine-default-yatex t
  "A boolean for vine-default-yatex"
  :type 'boolean)

(add-hook 'vine-default-setup-hook
	  (lambda()
	    (if vine-default-yatex
		(require 'vine-default-yatex))))

vine-default-yatex.el には、YaTeX のデフォルト設定を記述し、 (provide 'vine-default-yatex) を提供するようにします。

vine-default の下での ~/.emacs.el の設定

vine-default の下での Emacs の設定は、 大きくわけて以下の 3 つの設定パートに分かれています。

  1. vine-default
  2. vine-default が上書きしない設定
  3. vine-default が上書きする設定

(a) は ~/.emacs.el を読み込んだ直後に、 /usr/share/emacs-23.x/site-lisp 以下の vine-default-*.el を然るべき順序で読み込まれます。

(b), (c) は、必要であれば ~/.emacs.el に(あるいは、.emacs.el から読み込む別の *.el に)設定します。

(b) を直接 ~/.emacs.el に設定して構いませんが、 (c) を直接 ~/.emacs.el に設定していると、 (a) により vine-default が優先されてしまいます。

例えば、以下のように ~/.emacs.el にフォントを設定していても、 後から読まれる vine-default-faces.el により「Monospace 12」に上書きされていまいます。

(if window-system 
    (set-frame-font "Monospace 10"))

このような vine-default を上書きする設定は、after-vine-default-setup-hook をひっかけます。詳細は「高度な使い方」セクションを参照してください。

Emacs Lisp パッケージ

ここでは、Emacs Lisp パッケージの作成および emacs flavor の挙動について説明します。

Vine Linux の Emacs は、 Debian で採用している Emacs Lisp パッケージ管理の独自システムを採用しています。

Emacs Lisp パッケージをインストールしたときに、 *.el から現在インストールされている Emacs の flavor に対応した *.elc を 自動的に生成(バイトコンパイル:byte-compile)し、 必要なパスの設定やリソースの読み込みを行います。 さらに、Vine Linux の場合は vine-default の設定も同時に施されます。

逆に、Emacs Lisp パッケージをアンインストールしたときには、 通常のパッケージと同様にパッケージ自体の削除に加えて、 *.elc の削除も同時に行います。

パッケージ構成

spec ファイル

package-{install,remove}.sh

package-init.el

package-init.el は、 site-start.el から然るべき順序で読み込まれるように、addflavor 時に /usr/share/emacs/site-lisp/package/package-init.el から /etc/emacs-flavor/site-start.d/NNpackage-init.el へシンボリックリンクが張られます。

vine-default-package.el

vine-default-package.el は、addflavor 時にバイトコンパイルしません。