.emacs を晒しとくテスト

コピペしてすぐ(私が)使えるように晒してみた。
すぐ忘れそうなので、コメントもバッチリ書いてますw

;;; .emacs
;(setq debug-on-error t)

;; ===============================================================================
;;
;; Environmental discrimination(環境識別)
;;
;; ===============================================================================
(defvar *run-unix*
  (or (equal system-type 'gnu/linux)
      (equal system-type 'usg-unix-v)))
(defvar *run-win32*
  (and (null *run-unix*)
       (or (equal system-type 'windows-nt)
           (equal system-type 'ms-dos))))
(defvar *run-emacs20*
  (and (equal emacs-major-version 20)
       (null (featurep 'xemacs))))
(defvar *run-emacs21*
  (and (equal emacs-major-version 21)
       (null (featurep 'xemacs))))
(defvar *run-meadow* (featurep 'meadow))
(defvar *run-meadow1* (and *run-meadow* *run-emacs20*))
(defvar *run-meadow2* (and *run-meadow* *run-emacs21*))
(defvar *run-xemacs* (featurep 'xemacs))
(defvar *run-xemacs-no-mule*
  (and *run-xemacs* (not (featurep 'mule))))


;; ===============================================================================
;; 
;; User script directory(ユーザースクリプト用ディレクトリ)
;; 
;; ===============================================================================
(setq load-path (cons "~/site-lisp" load-path))


;; ===============================================================================
;;
;; i18n(国際化と地域化)
;;
;; ===============================================================================
;; 日本語環境を指定します。
(set-language-environment "Japanese")

;; メニューを日本語化します。
;; 文字化けする場合は、menu-tree.elをロードする前に menu-tree-coding-system に適当な coding-system をセットします。
(if (and (= emacs-major-version 22)
         (eq window-system 'x))
    (setq menu-tree-coding-system 'utf-8))
;;; が、define-obsolete-function-alias が void らしく、よくわからないのでボツ。
(require 'menu-tree)
;; 「utf-8」の部分は各自の環境に合わせて設定してください。
;(require 'menu-tree nil t)


;; ===============================================================================
;;
;; Charset Encoding(文字エンコーディング)
;;
;; ===============================================================================
(if *run-win32*
    (prefer-coding-system 'sjis)
  (prefer-coding-system 'utf-8))



;; ===============================================================================
;;
;; IME configuration(IME 設定)
;;
;; ===============================================================================
(when *run-meadow*
  ;; IME のモードごとにカーソル色を変えます。
  (add-hook 'mw32-ime-on-hook
            (function
             (lambda () (set-cursor-height 4) (set-cursor-color "maroon"))))
  (add-hook 'mw32-ime-off-hook
            (function
             (lambda () (set-cursor-height 4) (set-cursor-color "black"))))
  ;; IME を
  (mw32-ime-initialize)
  (setq default-input-method "MW32-IME")
  ;; IME ON/OFF mode-line
  (setq mw32-ime-show-mode-line t)
  ;; IME mode-line indicator
  ;; OFF : [--]
  ;; ON  : [あ]
  (setq-default mw32-ime-mode-line-state-indicator "[--]")
  (setq mw32-ime-mode-line-state-indicator "[--]")
  (setq mw32-ime-mode-line-state-indicator-list '("[--]" "[-J]" "[--]")))


;; ===============================================================================
;;
;; Fonts(フォント)
;;
;; ===============================================================================
;; * フォントの設定
;;
(when *run-win32*
  ;; フォントセットを追加します。
  (w32-add-font "MS Gothic 13"
                '((spec
                   ((:char-spec ascii :height any)
                    strict
                    (w32-logfont "MS Gothic" 0 -13 400 0 nil nil nil 0 1 3 0))
                   ((:char-spec ascii :height any :weight bold)
                    strict
                    (w32-logfont "MS Gothic" 0 -13 700 0 nil nil nil 0 1 3 0)
                    ((spacing . -1)))
                   ((:char-spec ascii :height any :slant italic)
                    strict
                    (w32-logfont "MS Gothic" 0 -13 400 0   t nil nil 0 1 3 0))
                   ((:char-spec ascii :height any :weight bold :slant italic)
                    strict
                    (w32-logfont "MS Gothic" 0 -13 700 0   t nil nil 0 1 3 0)
                    ((spacing . -1)))
                   ((:char-spec japanese-jisx0208 :height any)
                    strict
                    (w32-logfont "MS Gothic" 0 -13 400 0 nil nil nil 128 1 3 0))
                   ((:char-spec japanese-jisx0208 :height any :weight bold)
                    strict
                    (w32-logfont "MS Gothic" 0 -13 700 0 nil nil nil 128 1 3 0)
                    ((spacing . -1)))
                   ((:char-spec japanese-jisx0208 :height any :slant italic)
                    strict
                    (w32-logfont "MS Gothic" 0 -13 400 0   t nil nil 128 1 3 0))
                   ((:char-spec japanese-jisx0208 :height any :weight bold :slant italic)
                    strict
                    (w32-logfont "MS Gothic" 0 -13 700 0   t nil nil 128 1 3 0)
                    ((spacing . -1))))))
  ;; 起動時およびnew-frame時のフレーム(ウィンドウ)の設定。
  (add-to-list 'default-frame-alist '(font . "MS Gothic 13"))
  ;; 現在のフレームの設定(.emacs中では省略可)
  (set-frame-font "MS Gothic 13")

  ;; IMEのフォントを設定。こういう書式でないとだめらしい。
  (let ((logfont '(w32-logfont "MS Gothic" 0 0 400 0 nil nil nil 128 1 3 0)))
    (modify-frame-parameters (selected-frame) (list (cons 'ime-font logfont)))
    (add-to-list 'default-frame-alist (cons 'ime-font logfont))))


;; ===============================================================================
;;
;; Display theme(ディスプレイテーマ)
;;
;; ===============================================================================
;; 選択範囲の色を指定します。
(set-face-background 'region "SkyBlue")
(set-face-foreground 'region "black")

;; カーソルを縦棒にします。
;(set-cursor-type 'hairline-caret)

;; frame-listではさらに,起動時のデフォルトとなる 一行字数や行数,文字色や背景色なども指定できます。
;; これらの設定を追加した例が以下です。
(setq default-frame-alist
      (append (list
               ; * font
               ;'(font . "tt16") ; フォントセット
               ;'(ime-font . "tt16-japanese-jisx0208") ; IME フォントセット
               ; * size & position
               '(width . 170)   ; 一行の字数
               '(height . 20)  ; 行数
               '(top . 5)    ; ディスプレイのX座標(ピクセル)
               '(left . 5)   ; ディスプレイのY座標(ピクセル)
               ;'(alpha . (nil 70 50 30))
               ; * color
               '(background-color . "white")    ; 背景の色
               '(foreground-color . "black")    ; 文字の色
               ;'(cursor-color . "black")        ; カーソルの色
               ;'(cursor-type . (bar . 4))       ; カーソルの形状
               ) default-frame-alist))
;; カーソルの形を細い横棒にします。
(add-to-list 'default-frame-alist '(cursor-type . (bar . 5)))
;; カーソルの色を黒にします。
(set-cursor-color "black")

;; 自動改行されないようになればいいなぁ。
(setq fill-column 300)
(setq text-mode-hook 'turn-off-auto-fill)

; * ウィンドウの透明度を設定する

; Emacs 23 や一部の Emacs 22(Carbon Emacs パッケージや Fink の emacs 22.3 など)
; では、ウィンドウ(フレーム)の透明度を自由に設定することができます。透明度の設
; 定は、frame-parameter というウィンドウ設定変数の alpha というパラメーターで指
; 定します。 .emacs.el の書式は、いくつか方法がありますが、以下のようにすれば良いでしょう。
;; デフォルトの透明度を設定する (85%)
(add-to-list 'default-frame-alist '(alpha . 85))

;; カレントウィンドウの透明度を変更する (85%)
;; (set-frame-parameter nil 'alpha 0.85)
(set-frame-parameter nil 'alpha 85)


;; ===============================================================================
;;
;; Highlights(ハイライト)
;;
;; ===============================================================================
;; キーワードのカラー表示を有効化
;; 「t」の部分を「nil」にするとカラー表示をOffにできる
(global-font-lock-mode t)
;; コメント
(set-face-foreground 'font-lock-comment-face "gray44")
;; キーワード
(set-face-foreground 'font-lock-keyword-face "green4")
;; キーワードを太文字にします。
(make-face-bold 'font-lock-keyword-face)
;; 関数名
(set-face-foreground 'font-lock-function-name-face "brown")
;; 変数
(set-face-foreground 'font-lock-variable-name-face "brack")
;; 文字列
(set-face-foreground 'font-lock-string-face "blue")
;; 定数
(set-face-foreground 'font-lock-constant-face "yellow green")
;;; 変数の型
(set-face-foreground 'font-lock-type-face "dark green")
;; びるといんふぇいす?
(set-face-foreground 'font-lock-builtin-face "purple")
;; わーにんぐふぇいす?
(set-face-foreground 'font-lock-warning-face "maroon")


;; ===============================================================================
;;
;; Setting the title bar and toolbar(タイトルバーとツールバーの設定)
;;
;; ===============================================================================
;; タイトルバーにバッファ名を表示します。
(setq frame-title-format "%b")
;; %f だと、フルパス名。 %b ならバッファの名前。


;; ===============================================================================
;;
;; Key binds(キー割り当て)
;;
;; ===============================================================================
;; 改行キーでオートインデント
(define-key global-map "\C-m" 'newline-and-indent)
(setq indent-line-function 'indent-relative-maybe) ;;インデント方法。
;; Ctrl+Insert でペースト。
;(define-key global-map "\C-Insert" ')


;; ===============================================================================
;;
;; Useful functions(便利関数)
;;
;; ===============================================================================
;; * [EOF] を表示します。
;;
;; Meadow 1.99 なら以下のようにすると同じことができるようです。
;(defun set-buffer-end-mark()
;  (let ((overlay (make-overlay (point-max) (point-max))))
;    (overlay-put overlay 'before-string #("[EOF]" 0 5 (face highlight)))
;    (overlay-put overlay 'insert-behind-hooks
;                 '((lambda (overlay after beg end &optional len)
;                     (when after
;                       (move-overlay overlay (point-max) (point-max))))))))
;(add-hook 'find-file-hooks 'set-buffer-end-mark)

;; あるいは
(defun set-buffer-end-mark()
  (let ((overlay (make-overlay (point-max) (point-max))))
    (overlay-put overlay 'before-string #("[EOF]" 0 5 (face highlight)))
    (overlay-put overlay 'insert-behind-hooks
                 '((lambda (overlay after beg end &optional len)
                     (when after
                       (move-overlay overlay (point-max) (point-max))))))))
(add-hook 'find-file-hooks 'set-buffer-end-mark)

;; でもいい。


;; ===============================================================================
;;
;; SHELL(M-x shell のときの設定)
;;
;; ===============================================================================
(when *run-meadow*
  ;; MSYS の bash を使用します。
  (setq explicit-shell-file-name "bash.exe")
  (setq shell-file-name "sh.exe")

  ;; SHELL で ^M が付く場合は ^M を削除します。
  (add-hook 'shell-mode-hook
	    (lambda ()
	      (set-buffer-process-coding-system 'undecided-dos 'sjis-unix)))
  ;; shell-mode での保管(for drive letter)
  (setq shell-file-name-chars "~/A-Za-z0-9_^$!#%&{}@`'.,:()-"))


;; ===============================================================================
;;
;; Time stamp(ファイル更新日)
;;
;; ===============================================================================
(require 'time-stamp)
(add-hook 'before-save-hook 'time-stamp)
(setq time-stamp-active t)
(setq time-stamp-start "@date ")
(setq time-stamp-format "%04y-%02m-%02d")
(setq time-stamp-end " \\|$")


;; ===============================================================================
;;
;; Templates
;;
;; ===============================================================================
; * テンプレートを用意する

; 新しくファイルを開く場合に、予め用意しておいたテンプレートファイルの中身を自動的に挿入するようにします。

(require 'autoinsert)
(setq auto-insert-directory "~/var/share/templates")
(setq auto-insert-alist
      (nconc '( ("\\.c$" . "template.c")
                ("\\.h$" . "template.h")
                ("\\.rb"  . "template.rb")
                ) auto-insert-alist))
(add-hook 'find-file-not-found-hooks 'auto-insert)


;; ===============================================================================
;;
;; Miscellaneous Settings(雑多な設定)
;;
;; ===============================================================================
;; カレントディレクトリをホームディレクトリに設定
;; ""内は任意のディレクトリを指定可能
(cd "~/")

;; 起動時のメッセージを表示しません。
(setq inhibit-startup-message t)

;; 選択範囲をハイライトします。
(setq-default transient-mark-mode t)

;;; 行番号・桁番号をモードラインに表示する・しない設定
(line-number-mode t)    ; 行番号。t なら表示、nil なら非表示
(column-number-mode t)  ; 桁番号。t なら表示、nil なら非表示

;; 対応するカッコをハイライト表示します。
(show-paren-mode 1)

;; オートセーブを有効にします。
(auto-save-mode t)

;; バックアップファイルを作ります。
(setq backup-inhibited nil)

;; 終了時にオートセーブファイルが削除されません。
(setq delete-auto-save-files nil)

;; モードラインに現在時刻を表示します。
(display-time)

;; 選択領域を入力で置き換えるようにします。
(delete-selection-mode 1)
;; S-[←→]で範囲を選択できるようになります。
(pc-selection-mode)
;;; エラーが出るのでコメントアウト。
;;;; 引数の 1 は要らなかったらしい。

;; auto-fill モードを使用します。
(setq-default auto-fill-function 'do-auto-fill)

;; 行数を左に表示します。
;(setq wb-line-number-scroll-bar nil)
;(require 'wb-line-number)
;(wb-line-number-toggle)

;; キーワードのカラー表示を有効化します。
(global-font-lock-mode t)

;; 最近使ったファイルをメニューに表示します。
(recentf-mode 1)

;; ウィンドウの一番下にカーソルがある場合、そこから下に移動したときに何行スクロールするかの設定です。
;; 以下は 15 行の場合。
; line-setting
(setq next-line-add-newlines nil)
(line-number-mode 15)
(column-number-mode 15)