Emacsの設定

今年は,Emacsを使えるようになろうと決意.とりあえず,いままで設定したものをまとめる.環境は,Ubuntu Gutsy+Emacs23.

日本語にアンチエイリアスを効かせる.

Emacsの安定版は22だが,それでは日本語にアンチエイリアスが効かない.開発中の23からは,日本語フォントにもアンチエイリアスが効くのでEmacs23をインストールする.自前でソースからビルドする方法と,パッケージからインストールする方法があるが,今回はパッケージからインストールすることにする.

標準のリポジトリでは,開発中のEmacsは含まれないのでリポジトリを追加する.

% vi /etc/apt/sources.list
// 以下を追加.
deb http://ppa.launchpad.net/avassalotti/ubuntu gutsy main
deb-src http://ppa.launchpad.net/avassalotti/ubuntu gutsy main

aptの更新および,Emacsのインストール.

% apt-get update
% apt-get install emacs-snapshot emacs-snapshot-el

.Xresourceの作成

$ vi $HOME/.Xresource
// 以下を追加.
Emacs.FontBackend: xft

.Xresourceのマージ

$ xrdb -merge .Xresource

.emacsでのfont指定.xft名でフォントを指定できる.使用するフォント名はfc-listコマンドで調べる.

;===================================
; Fontの設定(Antialias)
;===================================
(cond(window-system
      (set-default-font "M+2VM+IPAG-12")
      (set-fontset-font(frame-parameter nil 'font)
                       'japanese-jisx0208
                       '("M+2VM+IPAG" . "unicode-bmp"))
      ))

フォント名の部分は,自分が使用するフォントに設定.12の部分は,フォントサイズ.
これでアンチエイリアスの効いたEmacsになるはず.

migemoのインストール

デフォルトでは日本語の検索機能が使いにくいため,ローマ字で検索できるようになるMigemoをインストールする.aptでインストールできるので楽.

% apt-get install migemo

Migemo用の設定を.emacsに追加.辞書のpathは環境により適宜変更.

;===================================
; migemoの設定 
;===================================
(setq migemo-directory "/usr/share/migemo")
(load "migemo")
(migemo-init)

これで, M-s でmigemo検索ができるようになる.

.emacs

メモがてら現在の.emacsを載せる.emacs上から.emacsを再読み込みさせるには,
.emacsを編集中のbuffer上で

M-x eval-current-buffer

もしくは,

M-x RET ~/.emacs
;===================================
; global-set-keyの変更。vi風に。
;===================================
;(global-set-key "\C-h" 'backward-char)
;(global-set-key "\C-j" 'next-line)
;(global-set-key "\C-k" 'previous-line)
;(global-set-key "\C-l" 'forward-char)
;===================================
; Emacs23用の設定(Antialias)
;===================================
(cond(window-system
      (set-default-font "M+2VM+IPAG-12")
      (set-fontset-font(frame-parameter nil 'font)
                       'japanese-jisx0208
                       '("M+2VM+IPAG" . "unicode-bmp"))
      )) 
;===================================
; global-font-lock-mode(これがないと
; ファイルごとに色づけできない)
;===================================
(global-font-lock-mode 1)
(setq font-lock-support-mode 'jit-lock-mode)
;===================================
; migemoの設定 
;===================================
(setq migemo-directory "/usr/share/migemo")
(load "migemo")
(migemo-init)
;===================================
; Misc(Miscellaneous)
;===================================
(setq visible-bell t)               ;; 警告音を消す
(auto-compression-mode t)           ;; 日本語infoの文字化け防止
(global-set-key "\C-z" 'undo)       ;; C-ZでUndo
(set-scroll-bar-mode 'right)        ;; スクロールバーを右に
(display-time)                      ;; 時計を表示
(setq line-number-mode t)           ;; カーソルのある行番号を表示
(setq kill-whole-line t)            ;; カーソルが行頭にある場合も行全体を削除
(setq make-backup-files nil)        ;; バックアップを作成しない.
(setq x-select-enable-clipboard t)  ;; クリップボードの共有
(setq-default indent-tabs-mode nil) ;; tabを使用しないように.
(setq fill-column 80)
(auto-fill-mode 1)
;===================================
; FrameSize, position, color
;===================================
(setq initial-frame-alist
      (append(list
              '(width . 90)         ;; フレームの幅
              '(height . 39)        ;; フレームの高さ
              '(top . 20)           ;; 表示位置Y
              '(left . 340)         ;; 表示位置X
              )
             initial-frame-alist))
(setq default-frame-alist initial-frame-alist)
;===================================
; Japanese Language
;===================================
(set-language-environment "japanese")
(set-default-coding-systems     'utf-8)
(set-buffer-file-coding-system  'utf-8)
(set-terminal-coding-system	'utf-8)
;(set-default-coding-systems     'euc-jp)
;(set-buffer-file-coding-system  'euc-jp)
;(set-terminal-coding-system	'euc-jp)
;===================================
; .zipなどを補完候補から外す
;===================================
(setq completion-ignored-extensions
      (append completion-ignored-extensions
		'(".exe" ".com" ".o" ".zip" ".rar")))
;===================================
; yatex-mode
;===================================
(setq auto-mode-alist
      (cons (cons "\\.tex$" 'yatex-mode) auto-mode-alist))
(autoload 'yatex-mode "yatex" "Yet Another LaTex mode" t)
(setq load-path (cons (expand-file-name "/usr/share/emacs/site-lisp/yatex") load-path))
;===================================
; c-mode
;===================================
(setq c-default-style "k&r")
(add-hook 'c-mode-common-hook
	  '(lambda()
	     ;; センテンスの終了である ';' を入力したら自動改行+インデント
	     (c-toggle-auto-hungry-state 1)
	     ;; RET キーで自動改行+インデント
	     (define-key c-mode-base-map "\C-m" 'newline-and-indent)
	     ))
; [F7]でコンパイル(バッファを全部保存して,make all します)
; [F4]でコンパイルエラー行へジャンプ
; [F1]でカーソル下の単語について マニュアルを開く
; SHIFT+[F7] でリビルド(make clean all)
; SHIFT+[F4] で一つ前のエラー行へジャンプ
(setq auto-mode-alist
      (append '(("\\.C$"  . c++-mode)
                ("\\.cc$" . c++-mode)
                ("\\.cpp$". c++-mode)
                ("\\.hh$" . c++-mode)
                ("\\.c$"  . c-mode)
                ("\\.h$"  . c++-mode))
              auto-mode-alist))
(add-hook 'c-mode-common-hook
          '(lambda ()
             (require 'vc-hooks)
             (setq completion-mode t)
             ;; make のオプションは聞いてこない
             (setq compilation-read-command nil)
             ;; make するとき 全バッファを自動的にsaveする
             (setq compilation-ask-about-save nil)
             (define-key c-mode-base-map [f1] 'manual-entry)
             (define-key c-mode-base-map [f4] 'next-error)
             (define-key c-mode-base-map [(shift f4)] 'previous-error)
             (define-key c-mode-base-map [f7] 'compile)
             (define-key c-mode-base-map [(shift f7)] 
               '(lambda () 
                  (interactive)
                  ;;(require 'compile)
                  ;;(save-some-buffers (not compilation-ask-about-save) nil)
                  (compile-internal "make clean all" "No more errors")))
             ))
; flymakeで構文チェッカとしてmakeを指定.
; 使用するには,M-x flymake-modeで切替.
; C-x C-s で保存後,自動的にチェック
(require 'flymake)
(defun flymake-get-make-cmdline (source base-dir)
  (list "make"
        (list "-s" "-C"
              base-dir
              (concat "CHK_SOURCES=" source)
              "SYNTAX_CHECK_MODE=1")))
;===================================
; Anthy or Prime
;===================================
(set-input-method "japanese-anthy")
;===================================
; Dired
;===================================
(require 'ls-lisp)
(let (current-load-list)
  (defadvice insert-directory
    (around reset-locale activate compile)
    (let ((system-time-locale "C"))
      ad-do-it)))
;===================================
; Wheel mouse
;===================================
;(global-set-key [mouse-4] 'scroll-down)
;(global-set-key [mouse-5] 'scroll-up)
(progn
  (defun scroll-up-half ()
    "Scroll up half a page."
    (interactive)
    (scroll-up (/ (window-height) 2))
    )
  (defun scroll-down-half ()
    "Scroll down half a page."
    (interactive)
    (scroll-down (/ (window-height) 2))
    )
  (global-set-key [(mouse-5)] 'scroll-up-half)
  (global-set-key [(mouse-4)] 'scroll-down-half)
  )
;======================================
;ruby-modeの設定
;======================================
(autoload 'ruby-mode "ruby-mode"
  "Mode for editing ruby source files" t)
(setq auto-mode-alist
      (append '(("\\.rb$" . ruby-mode)) auto-mode-alist))
(setq interpreter-mode-alist (append '(("ruby" . ruby-mode))
				     interpreter-mode-alist))
(autoload 'run-ruby "inf-ruby"
  "Run an inferior Ruby process")
(autoload 'inf-ruby-keys "inf-ruby"
  "Set local key defs for inf-ruby in ruby-mode")
(add-hook 'ruby-mode-hook
	  '(lambda ()
	     (inf-ruby-keys)))
;======================================
; color-theme
;======================================
(load "color-theme")
(color-theme-dark-laptop)
;======================================
; nx-html
; php-mode.elはnx-html内に含まれるので
; 参照するマニュアルのpathは,php-mode.elに
; 書き込む.
;======================================
(load "/usr/share/emacs/site-lisp/nxml/autostart.el")
;======================================
; mmm-mode 
;======================================
(require 'mmm-mode)
(require 'mmm-auto)
(setq mmm-global-mode 'maybe)
(setq mmm-submode-decoration-level 0)
(mmm-add-find-file-hook)
(mmm-add-mode-ext-class nil "\\.html\\'" 'js-script)

(mmm-add-classes
 '(
   (js-script-cdata
    :submode javascript
    :face mmm-code-submode-face
    :delimiter-mode nil
    :front "<script[^>]*>[ \t\n]*<!\\[CDATA\\[[ \t]*\n?"
    :back "[ \t]*]]>[ \t\n]*</script>"
     )
   (js-script
    :submode javascript
    :face mmm-code-submode-face
    :delimiter-mode nil
    :front "<script\[^>\]*\\(language=\"javascript\\([0-9.]*\\)\"\\|type=\"text/javascript\"\\)\[^>\]*>[ \t]*\n?"
    :back "[ \t]*</script>"
    :insert ((?j js-script nil @ "<script type=\"text/javascript\">"
                 @ "\n" _ "\n" @ "</script>" @))
    )
   (js-inline
    :submode javascript
    :face mmm-code-submode-face
    :delimiter-mode nil
    :front "on\\w+=\""
    :back "\"")
   (css-style-cdata
    :submode css
    :face mmm-code-submode-face
    :delimiter-mode nil
    :front "<style[^>]*>[ \t\n]*<!\\[CDATA\\[[ \t]*\n?"
    :back "[ \t]*]]>[ \t\n]*</style>"
    )
   (css-style
    :submode css
    :face mmm-code-submode-face
    :delimiter-mode nil
    :front "<style[^>]*>[ \t]*\n?"
    :back "[ \t]*</style>"
    :insert ((?c css-style nil @ "<style type=\"text/css\">"
                 @ "\n" _ "\n" @ "</style>" @))
    )
   (css-inline
    :submode css
    :face mmm-code-submode-face
    :delimiter-mode nil
    :front "style=\""
    :back "\"")
   ))