Hatena::ブログ(Diary)

日々、とんは語る。

この日記のはてなブックマーク数 はてなスターカウンター Peace この日記をあなたのはてなアンテナに追加する。 rss
お問い合わせ先 mailto

2009-08-07 天気悪い日。

ひとつの .emacs で設定を書き分けるための Tips。

| 08:28 |

追記 この記事を元に書籍が出来ました!

時間と命を削って、より詳細に解説しましたので、Emacs に興味がある人はぜひ一度手に取ってみて下さい。

Emacs実践入門 ?思考を直感的にコード化し、開発を加速する (WEB+DB PRESS plus)

Emacs実践入門 ?思考を直感的にコード化し、開発を加速する (WEB+DB PRESS plus)

導入 Elisp 別の書き分け方法の記事を書きましたので、併せてどうぞ。

様々な環境Emacs を使う場合、それぞれの環境に合せた .emacs を用意する必要があります

ですが、環境別に複数のファイルを用意するのは非常に面倒なので、使うシステムによって要不要を判断してくれる分岐を行なうと便利です。

僕の場合は、elim んの .emacsから勉強させてもらい、環境によって真偽値を返す変数作成し、それを使って分岐する方法を使っています

具体的にはこうです。

(defun x->bool (elt) (not (not elt)))

;; emacs-version predicates
(setq emacs22-p (string-match "^22" emacs-version)
	  emacs23-p (string-match "^23" emacs-version)
	  emacs23.0-p (string-match "^23\.0" emacs-version)
	  emacs23.1-p (string-match "^23\.1" emacs-version)
	  emacs23.2-p (string-match "^23\.2" emacs-version))

;; system-type predicates
(setq darwin-p  (eq system-type 'darwin)
      ns-p      (eq window-system 'ns)
      carbon-p  (eq window-system 'mac)
      linux-p   (eq system-type 'gnu/linux)
      colinux-p (when linux-p
                  (let ((file "/proc/modules"))
                    (and
                     (file-readable-p file)
                     (x->bool
                      (with-temp-buffer
                        (insert-file-contents file)
                        (goto-char (point-min))
                        (re-search-forward "^cofuse\.+" nil t))))))
      cygwin-p  (eq system-type 'cygwin)
      nt-p      (eq system-type 'windows-nt)
      meadow-p  (featurep 'meadow)
      windows-p (or cygwin-p nt-p meadow-p))

で、例えば Mac での様々なバージョン向けの設定をひとつファイルに書きたい場合は、

(when darwin-p
  (setq grep-find-use-xargs 'bsd)
  (setq browse-url-generic-program "open")
  (setq visible-bell t)
  (define-key global-map [(super right)] 'split-window-horizontally)
  (define-key global-map [(super down)] 'split-window-vertically)
  (define-key global-map [(super w)] 'delete-window)
  (when carbon-p
	(setq mac-command-key-is-meta nil)
	(setq mac-option-modifier 'meta)
	(setq mac-command-modifier 'super)
	(setq mac-pass-control-to-system t)
	(scroll-bar-mode -1)
	(tool-bar-mode -1)
	(when emacs22-p
	  (define-key global-map [(super v)] 'yank)))
  (when ns-p
	(setq ns-command-modifier 'super)
	(setq ns-alternate-modifier 'meta)
	(scroll-bar-mode -1)
	(require 'ns-platform-support)
	(ns-extended-platform-support-mode 1)))

という感じで書き分けることができます

ちなみに、ターミナルかどうかを判断する場合は、window-system という変数があるので、それを使う形になるでしょう。

teletypeteletype 2009/08/08 13:14 emacsのバージョン判定はこんなのでもいいかなと思います。

;; configuration
(dolist (ver '("22" "23" "23.0" "23.1" "23.2"))
(set (intern (concat "emacs" ver "-p"))
(if (string-match (concat "^" ver) emacs-version)
t nil)))

;; velification
emacs-version ; => "23.0.0.1"
(mapcar (lambda (x) (if (boundp x) (symbol-value x) 'none))
'(emacs22-p emacs23-p emacs23.0-p
emacs23.1-p emacs23.2-p emacs23.3-p))
; => (nil t t nil nil none)

teletypeteletype 2009/08/08 13:18 verificationの綴り間違えました。
すみません。

tomoyatomoya 2009/08/08 16:01 コメントありがとうございます!
これは非常に Emacs らしい設定の仕方ですね :-)
とってもクールです。

どようびどようび 2009/08/09 09:32 紹介されている方法だと、新しい環境で突然作業することになった時の設定が毎回めんどいため、自分は
http://www.sodan.org/~knagano/emacs/dotemacs.html
の設定を利用しています。

yamdanyamdan 2009/08/13 10:36 「▽モードのときにqでカタカナ・ひらがなに変換できない」件ですが、
僕の場合は skk 関連の .el ファイルを全て byte-compile したら解決できました。(byte-recompile-directory では駄目)
ご参考になれば幸いです

tomoyatomoya 2009/08/13 20:20 > yamadan さん

skk をインストールするのに、

$ make install EMACS=/usr/local/bin/emacs-23.1

という形で 23.1 でバイトコンパイルしてインストールするようにしてみたら、確かにカタカナ変換できるようになりました!!

とても助かりました。どうもありがとうございます。

zvzv 2012/07/02 21:35 どうもありがとう!

<< 2009/08 >>
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31