Announce

PukiWiki contents have been moved into SONOTS Plugin (20070703)

emacs

emacs初期設定(21.X系)

Table of Contents

Initial Settings

All emacsen

;; ;;; M-x shell の設定

;; ;;; Cygwin の bash を使う場合
;(setq explicit-shell-file-name "bash.exe")
;(setq shell-file-name "sh.exe")
;(setq shell-command-switch "-c")
;(add-hook 'shell-mode-hook
;           (lambda ()
;		  (set-buffer-process-coding-system 'japanese-shift-jis-unix
;						    'japanese-shift-jis-unix)))
;(add-hook 'shell-mode-hook
;          (lambda ()
;            (set-buffer-process-coding-system 'japanese-shift-jis-unix
;                                              'japanese-shift-jis-unix)))
;(autoload 'ansi-color-for-comint-mode-on "ansi-color"
;          "Set `ansi-color-for-comint-mode' to t." t)
;(add-hook 'shell-mode-hook 'ansi-color-for-comint-mode-on)
;(add-hook 'comint-output-filter-functions
;          'comint-watch-for-password-prompt)

;; ;;; Virtually UN*X!にある tcsh.exe を使う場合
;; (setq explicit-shell-file-name "tcsh.exe") 
;; (setq shell-file-name "tcsh.exe") 
;; (setq shell-command-switch "-c") 

;; ;;; WindowsNT に付属の CMD.EXE を使う場合。
;; (setq explicit-shell-file-name "CMD.EXE") 
;; (setq shell-file-name "CMD.EXE") 
;; (setq shell-command-switch "\\/c") 

;; ;;; eshell
;; Change the default eshell prompt
(setq eshell-prompt-function
      (lambda ()
         (concat
          (eshell/pwd) "\n")))

;; ChangeLog
(setq user-full-name "Naotoshi Seo")
(setq user-mail-address "hoge@hoge.com")

;; Always end a file with a newline
(setq require-final-newline t)

;; Stop at the end of the file, not just add lines
(setq next-line-add-newlines nil)

;; Stop make backup files ~
(setq make-backup-files nil)

;; Do not use tab character for indentation (Use Ctrl-q Tab to type tab)
(setq-default indent-tabs-mode nil)

;; Show a tab character with 4 spaces
(setq default-tab-width 4)

;; Set backspace C-h
;;(define-key function-key-map [backspace] [8])

;; Set C-h backspace 
(put 'backspace 'ascii-character 8)
(setq keyboard-translate-table
"\^@\^A\^B\^C\^D\^E\^F\^G\^?\^I\^J\^K\^L\^M\^N\^O\^P\^Q\^R\^S\^T\^U\^V\
\^W\^X\^Y\^Z\^[\^\\\^]\^^\^_ !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJK\
LMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\^H")

;; Emacs Load Path
(setq load-path (cons "~/.emacs.d" load-path))

NTemacs

.emacs の場所

  1. C-x C-f で ~/.emacs を開いてそこに作る。~/ を開けば場所がわかる。デフォルトはおそらく
    C:\Documents and Settings\[Username]\Application Data\.emacs
  2. 環境変数 HOME を変えれば場所は変更可能。
  3. cygwin から起動する場合は変わるかもしれない。
    c:\cygwin\home\[Username]\.emacs

el のおき場所

  1. emacs\site-lisp
  2. emacs\site-start.d
  3. (setq load-path (cons "~/.emacs.d" load-path)) を .emacs に書いて、そこにおく
(setq load-path (cons "~/.emacs.d" load-path))

(set-language-environment "Japanese")
(prefer-coding-system 'utf-8-unix)
(set-default-coding-systems 'utf-8-unix) ; for new file
(set-keyboard-coding-system 'sjis)
(set-terminal-coding-system 'sjis)
(set-buffer-file-coding-system 'sjis)
(set-clipboard-coding-system 'sjis-dos)
(set-w32-system-coding-system 'sjis-dos)
(setq coding-category-raw-text 'sjis)
;(setq coding-system-for-write 'utf-8-unix)

Meadow

;;;; -*- mode: lisp-interaction; syntax: elisp; coding: iso-2022-7bit -*-
;;;;
;;;; Copyright (C) 2001 The Meadow Team

;; Author: Koichiro Ohba <koichiro@meadowy.org>
;;      Kyotaro HORIGUCHI <horiguti@meadowy.org>
;;      Hideyuki SHIRAI <shirai@meadowy.org>
;;      KOSEKI Yoshinori <kose@meadowy.org>
;;      and The Meadow Team.


;; ;;; Mule-UCS の設定
;; ;; ftp://ftp.m17n.org/pub/mule/Mule-UCS/
;; ;; (set-language-environment) の前に設定します
;; (require 'un-define)
;; (setq bitmap-alterable-charset 'tibetan-1-column)
;; (require 'jisx0213)


;;; 日本語環境設定
(require 'un-define)
(require 'jisx0213)
(set-language-environment "Japanese")

;;; IMEの設定
(mw32-ime-initialize)
(setq default-input-method "MW32-IME")
(setq-default mw32-ime-mode-line-state-indicator "[--]")
(setq mw32-ime-mode-line-state-indicator-list '("[--]" "[あ]" "[--]"))
(add-hook 'mw32-ime-on-hook
	  (function (lambda () (set-cursor-height 2))))
(add-hook 'mw32-ime-off-hook
	  (function (lambda () (set-cursor-height 4))))


;; ;;; カーソルの設定
;; ;; (set-cursor-type 'box)            ; Meadow-1.10互換 (SKK等で色が変る設定)
;; ;; (set-cursor-type 'hairline-caret) ; 縦棒キャレット


;;; マウスカーソルを消す設定
(setq w32-hide-mouse-on-key t)
(setq w32-hide-mouse-timeout 5000)


;;; font-lockの設定
(global-font-lock-mode t)

(w32-add-font "HG Gothic 20"
'((strict-spec
((:char-spec ascii :height any)
(w32-logfont "HGゴシックM" 0 -20 400 0 nil nil nil 128 1 3 49))
((:char-spec ascii :height any :weight bold)
(w32-logfont "HGゴシックE" 0 -20 400 0 nil nil nil 128 1 3 49))
((:char-spec ascii :height any :slant italic)
(w32-logfont "HGゴシックM" 0 -20 400 0 t nil nil 128 1 3 49))
((:char-spec ascii :height any :weight bold :slant italic)
(w32-logfont "HGゴシックE" 0 -20 400 0 t nil nil 128 1 3 49))
))) 

;; ;;; TrueType フォント設定
 (w32-add-font
  "private-fontset"
  '((spec
     ((:char-spec ascii :height 120)
      strict
      (w32-logfont "Courier New" 0 -13 400 0 nil nil nil 0 1 3 49))
     ((:char-spec ascii :height 120 :weight bold)
      strict
      (w32-logfont "Courier New" 0 -13 700 0 nil nil nil 0 1 3 49))
     ((:char-spec ascii :height 120 :slant italic)
      strict
      (w32-logfont "Courier New" 0 -13 400 0   t nil nil 0 1 3 49))
     ((:char-spec ascii :height 120 :weight bold :slant italic)
      strict
      (w32-logfont "Courier New" 0 -13 700 0   t nil nil 0 1 3 49))
     ((:char-spec japanese-jisx0208 :height 120)
      strict
      (w32-logfont "MS ゴシック" 0 -16 400 0 nil nil nil 128 1 3 49))
     ((:char-spec japanese-jisx0208 :height 120 :weight bold)
      strict
      (w32-logfont "MS ゴシック" 0 -16 700 0 nil nil nil 128 1 3 49)
      ((spacing . -1)))
     ((:char-spec japanese-jisx0208 :height 120 :slant italic)
      strict
      (w32-logfont "MS ゴシック" 0 -16 400 0   t nil nil 128 1 3 49))
     ((:char-spec japanese-jisx0208 :height 120 :weight bold :slant italic)
      strict
      (w32-logfont "MS ゴシック" 0 -16 700 0   t nil nil 128 1 3 49)
      ((spacing . -1))))))

 (set-face-attribute 'variable-pitch nil :family "*")


;; ;;; BDF フォント設定

;; ;;; (方法その1) Netinstall パッケージを使う方法
;; ;;; misc と intlfonts パッケージを入れます。
;; ;;; .emacsの設定
;; (setq bdf-use-intlfonts16 t)
;; (setq initial-frame-alist '((font . "intlfonts16")))
;;
;; ;;; (方法その1') 
;; ;;; intlfonts-file-16dot-alist の形式で bdf-fontset-alist を書き、
;; ;;; 次を設定すれば良い。
;; ;;;  (require 'bdf)
;; ;;;  (bdf-configure-fontset "bdf-fontset" bdf-fontset-alist)
;; ;;; 詳細は $MEADOW/pkginfo/auto-autoloads.el と $MEADOW/site-lisp/bdf.el を
;; ;;; 参照のこと。
;;
;; ;;; (方法その2) 
;; ;;; フォントの指定方法は次のサンプルを参考にする。
;; ;;; normal, bold, italic, bold-itaric フォントを指定する必要あり。
 (setq bdf-font-directory "D:/win/Meadow/fonts/intlfonts/")
 (w32-add-font "bdf-fontset"
 `((spec 
    ;; ascii
    ((:char-spec ascii :height any :weight normal :slant normal)
     strict (bdf-font ,(expand-file-name "lt1-16-etl.bdf" bdf-font-directory)))
    ((:char-spec ascii :height any :weight bold :slant normal)
     strict (bdf-font ,(expand-file-name "lt1-16b-etl.bdf" bdf-font-directory)))
    ((:char-spec ascii :height any :weight normal :slant any)
     strict (bdf-font ,(expand-file-name "lt1-16i-etl.bdf" bdf-font-directory)))
    ((:char-spec ascii :height any :weight bold :slant any)
     strict (bdf-font ,(expand-file-name "lt1-16bi-etl.bdf" bdf-font-directory)))
    ;; katakana-jisx0201
    ((:char-spec katakana-jisx0201 :height any :weight normal :slant normal)
     strict (bdf-font ,(expand-file-name "8x16rk.bdf" bdf-font-directory))
     ((encoding . 1-byte-set-msb))) 
    ((:char-spec katakana-jisx0201 :height any :weight bold :slant normal)
     strict (bdf-font ,(expand-file-name "8x16rk.bdf" bdf-font-directory))
     ((encoding . 1-byte-set-msb))) 
    ((:char-spec katakana-jisx0201 :height any :weight normal :slant any)
     strict (bdf-font ,(expand-file-name "8x16rk.bdf" bdf-font-directory))
     ((encoding . 1-byte-set-msb))) 
    ((:char-spec katakana-jisx0201 :height any :weight bold :slant any)
     strict (bdf-font ,(expand-file-name "8x16rk.bdf" bdf-font-directory))
     ((encoding . 1-byte-set-msb)))
    ;; latin-jisx0201
    ((:char-spec latin-jisx0201 :height any :weight normal :slant normal)
     strict (bdf-font ,(expand-file-name "8x16rk.bdf" bdf-font-directory)))
    ((:char-spec latin-jisx0201 :height any :weight bold :slant normal)
     strict (bdf-font ,(expand-file-name "8x16rk.bdf" bdf-font-directory)))
    ((:char-spec latin-jisx0201 :height any :weight normal :slant any) 
     strict (bdf-font ,(expand-file-name "8x16rk.bdf" bdf-font-directory))) 
    ((:char-spec latin-jisx0201 :height any :weight bold :slant any) 
     strict (bdf-font ,(expand-file-name "8x16rk.bdf" bdf-font-directory)))
    ;; japanese-jisx0208
    ((:char-spec japanese-jisx0208 :height any :weight normal :slant normal) 
     strict (bdf-font ,(expand-file-name "j90-16.bdf" bdf-font-directory)))
    ((:char-spec japanese-jisx0208 :height any :weight bold :slant normal)
     strict (bdf-font ,(expand-file-name "j90-16.bdf" bdf-font-directory))) 
    ((:char-spec japanese-jisx0208 :height any :weight normal :slant any)
     strict (bdf-font ,(expand-file-name "j90-16.bdf" bdf-font-directory)))
    ((:char-spec japanese-jisx0208 :height any :weight bold :slant any)
     strict (bdf-font ,(expand-file-name "j90-16b.bdf" bdf-font-directory))))))

;; 初期フレームの設定
(setq default-frame-alist
      (append (list '(foreground-color . "black")
		    '(background-color . "white")
		    '(background-color . "gray")
		    '(border-color . "black")
		    '(mouse-color . "white")
		    '(cursor-color . "black")
                    '(ime-font . (w32-logfont "HGゴシックM" 0 0 400 0 nil nil nil 128 1 3 49)) 
                    '(line-spacing . 4) 
;;		    '(ime-font . (w32-logfont "MS ゴシック"
;;					      0 16 400 0 nil nil nil
;;					      128 1 3 49)) ; TrueType のみ
;;		    '(font . "bdf-fontset")    ; BDF
;;		    '(font . "private-fontset"); TrueType
		    '(font . "MS Gothic 14"); TrueType
;;		    '(width . 80)
;;		    '(height . 40)
		    '(width . 100)
		    '(height . 50)
;;		    '(top . 100)
		    '(top . 30)
		    '(left . 100))
	      default-frame-alist))



;;; argument-editing の設定
(require 'mw32script)
(mw32script-init)


;; ;;; browse-url の設定
;; (global-set-key [S-mouse-2] 'browse-url-at-mouse)


;; ;;; 印刷の設定
;; ;; この設定で M-x print-buffer RET などでの印刷ができるようになります
;; ;;
;; ;;  notepad に与えるパラメータの形式の設定
;; (define-process-argument-editing "notepad"
;;   (lambda (x) (general-process-argument-editing-function x nil t)))
;;
;; (defun w32-print-region (start end
;; 				  &optional lpr-prog delete-text buf display
;; 				  &rest rest)
;;   (interactive)
;;   (let ((tmpfile (convert-standard-filename (buffer-name)))
;; 	   (w32-start-process-show-window t)
;; 	   ;; もし、dos 窓が見えていやな人は上記の `t' を `nil' にします
;; 	   ;; ただし、`nil' にすると Meadow が固まる環境もあるかもしれません
;; 	   (coding-system-for-write w32-system-coding-system))
;;     (while (string-match "[/\\]" tmpfile)
;; 	 (setq tmpfile (replace-match "_" t nil tmpfile)))
;;     (setq tmpfile (expand-file-name (concat "_" tmpfile "_")
;; 				       temporary-file-directory))
;;     (write-region start end tmpfile nil 'nomsg)
;;     (call-process "notepad" nil nil nil "/p" tmpfile)
;;     (and (file-readable-p tmpfile) (file-writable-p tmpfile)
;; 	    (delete-file tmpfile))))
;; 
;; (setq print-region-function 'w32-print-region)

;;;
;;; end of file
;;;

Elisp for Computer Languages

すべて M-x byte-compile-file して elc を作っておいたほうが読み込みが早い。

後はどれも基本的には

(add-to-list 'auto-mode-alist '("\\.js\\'" . javascript-mode))
(autoload 'javascript-mode "javascript-mode" nil t)

のように autoload するように設定する。

ファイルを置く場所は、上記のそれぞれの emacsen の設定を読むこと。 基本的には C-x C-f で ~/ を開けばわかる。

c-mode

el はデフォルトで入っている

;;c-mode
(add-hook 'c-mode-hook
          '(lambda ()
              (c-set-style "k&r")
              (c-toggle-hungry-state 1)
              (setq tab-width 2)
              (setq c-basic-offset 2)
              (setq indent-tabs-mode nil)
             ))

c++-mode

el はデフォルトで入っている

;;c++-mode
(setq auto-mode-alist
      (append
       '(("\\.cpp$" . c++-mode)
         ("\\.h$"   . c++-mode)
         ) auto-mode-alist))

(add-hook 'c++-mode-hook
          '(lambda ()
             (c-set-style "k&r")
             (c-toggle-hungry-state 1)
             (setq tab-width 2)
             (setq c-basic-offset 2)
             (setq indent-tabs-mode nil)
             ))

php-mode

;;php-mode
(add-to-list 'auto-mode-alist '("\\.php\\'" . php-mode))
(autoload 'php-mode "php-mode" nil t)
(add-hook 'php-mode-hook
          '(lambda ()
             (c-set-style "gnu")
             (c-toggle-hungry-state 1)
             (setq tab-width 4)
             (setq c-basic-offset 4)
             (setq indent-tabs-mode nil)
             ))

ruby-mode

ruby.el を ruby 本家サイトからダウンロードする。

;;; Ruby-mode
(autoload 'ruby-mode "ruby-mode"
  "Mode for editing ruby source files")
(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)
             ))

(add-hook 'ruby-mode-hook
          '(lambda ()
             (inf-ruby-keys)
             (setq tab-width 4))) ;; tab and indent
(setq ruby-indent-level 4)

css-mode

http://www.garshol.priv.no/download/software/css-mode/

(autoload 'css-mode "css-mode")
(setq auto-mode-alist       
     (cons '("\\.css\\'" . css-mode) auto-mode-alist))
(setq cssm-indent-function #'cssm-c-style-indenter)
(setq cssm-indent-level 4)
(setq cssm-newline-before-closing-bracket t)
(serq cssm-mirror-mode nil)

javascript-mode

or

(autoload 'javascript-mode "javascript" nil t) ; javascript.el
(add-to-list 'auto-mode-alist '("\\.js\\'" . javascript-mode))

Elisp as programming aids

gtags

移転 http://docs.google.com/View?id=drw35kw_127d5bfpwfb

auto-complete

移転 http://docs.google.com/View?id=drw35kw_128d46vt2ct

M-x grep

移転 http://docs.google.com/View?id=drw35kw_129d7s7xchd

YAsnippet

よく使う短いプログラムコードを簡単に呼び出す

Flymake

gcc のコンパイルエラーなどを emacs 上から表示できる

メモ

キーバインド

C-c C-c コメントアウト
C-u C-c C-c コメントアウト解除

load-path

いろいろ ~/.emacs.d におくことにしよう。

http://emacs-20.ki.nu/load-path.shtml

; ~/.elisp を load-path の先頭に加える
(setq load-path
      (append
       (list
       (expand-file-name "~/.elisp/")
       )
       load-path))
Unix の shell で言えば which に当るのが、 M-x locate-library RET function-name RET 

http://www.emacswiki.org/cgi-bin/wiki?LoadPath

    (if (fboundp 'normal-top-level-add-subdirs-to-load-path)
        (let* ((my-lisp-dir "~/.emacs.d/")
              (default-directory my-lisp-dir))
           (setq load-path (cons my-lisp-dir load-path))
           (normal-top-level-add-subdirs-to-load-path)))

NTEmacs から M-x shell で cygwin の bash を呼び出す

;; Cygwin は C:\cygwin(デフォルト)にインストールされており、
;; C:\cygwin\bin が既に Windows パスに含まれていないことを
;; 仮定しています(一般にはそうではない筈ですが)。
;;
(setq exec-path (cons "C:/cygwin/bin" exec-path))
(setenv "PATH" (concat "C:\\cygwin\\bin;" (getenv "PATH")))
;;
;; NT-emacs は、ここで変更する Windows コマンドシェルを
;; 使用します。
;;
(setq process-coding-system-alist '(("bash" . undecided-unix)))
(setq shell-file-name "bash")
(setenv "SHELL" shell-file-name) 
(setq explicit-shell-file-name shell-file-name) 

M-x shell を起動すると、cygwin のプロンプトが現れるが、色を付けるためのエスケープシーケンスが解釈されず化けるので、.bashrc のほうに

if [ $TERM = 'emacs' ]; then
    PS1="\u@\h \w\n$ "
fi

を追加し、emacs の場合は色なしにしておくと良さそう。