現在の init.el を晒してみた
他のパソコンでも使うので、メモっておく。
;;; .emacs ;(setq debug-on-error t) ;; =============================================================================== ;; ;; Environmental discrimination(環境識別) ;; ;; =============================================================================== (defvar *run-unix* (or (equal system-type 'gnu/linux) (equal system-type 'darwin) (equal system-type 'usg-unix-v))) (defvar *run-windows* (and (null *run-unix*) (or (equal system-type 'windows-nt) (equal system-type 'ms-dos)))) (defvar *run-macosx* (and *run-unix* (null *run-windows*) (and (equal window-system 'ns) (equal system-type 'darwin)))) (defvar *run-win32* (and (null *run-unix*) *run-windows* (equal system-type 'w32))) (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-emacs22* (and (equal emacs-major-version 22) (null (featurep 'xemacs)))) (defvar *run-emacs23* (and (equal emacs-major-version 23) (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-meadow3* (and *run-meadow* *run-emacs22*)) (defvar *run-xemacs* (featurep 'xemacs)) (defvar *run-xemacs-no-mule* (and *run-xemacs* (not (featurep 'mule)))) ;; =============================================================================== ;; ;; User script directory(ユーザースクリプト用ディレクトリ) ;; ;; =============================================================================== (setq load-path (cons "~/.emacs.d/conf" load-path)) (setq load-path (cons "~/.emacs.d/elisp" load-path)) (setq load-path (cons "~/.emacs.d/elisp/ruby" load-path)) (setq load-path (cons "~/.emacs.d/egg" 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)) (require 'menu-tree) ;; 「utf-8」の部分は各自の環境に合わせて設定してください。 ;(require 'menu-tree nil t) ;; =============================================================================== ;; ;; Charset Encoding(文字エンコーディング) ;; ;; =============================================================================== (if *run-windows* (progn (if *run-meadow* (set-w32-system-coding-system 'sjis)) (if (boundp 'set-default-coding-sytem) (set-default-coding-sytem 'sjis)) (set-terminal-coding-system 'sjis) (set-clipboard-coding-system 'sjis-dos) (set-keyboard-coding-system 'sjis) (prefer-coding-system 'sjis)) ;; else (progn (if (boundp 'set-default-coding-sytem) (set-default-coding-sytem 'utf-8)) (set-terminal-coding-system 'utf-8) (set-clipboard-coding-system 'utf-8-unix) (set-keyboard-coding-system 'utf-8) (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 '("[--]" "[あ]" "[--]"))) ;; =============================================================================== ;; ;; Fonts(フォント) ;; ;; =============================================================================== ;; * フォントの設定 ;; (when *run-windows* ;; フォントセットを追加します。 (load "ms-gothic-13.el") (load "ms-ui-gothic-13.el") ;; 起動時および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))) (set-face-font 'mode-line "MS Gothic 13")) ;; =============================================================================== ;; ;; Display theme(ディスプレイテーマ) ;; ;; =============================================================================== (when window-system ;; 選択範囲に色をつけます。 (setq-default transient-mark-mode t) ;; 選択範囲の色を指定します。 (set-face-background 'region "SkyBlue") (set-face-foreground 'region "black") ;; カーソルを縦棒にします。 (if (boundp 'set-cursor-type) (set-cursor-type 'hairline-caret) (if *run-meadow3* (add-to-list 'default-frame-alist '(cursor-type . hairline-caret)) (add-to-list 'default-frame-alist '(cursor-type . (bar . 5))))) ;; カーソルの色を黒にします。 (set-cursor-color "black") ;; ;; ** フレーム透過設定 (if *run-meadow3* ;; カレントウィンドウ(ウィンドウ全体?)の透明度です。 (set-frame-parameter nil 'alpha 85) ;; デフォルトの透明度です。 (add-to-list 'default-frame-alist '(alpha . 85))) ;; 一行あたりの文字数は 170 です。 (add-to-list 'default-frame-alist '(width . 170)) ;; 20 行を表示します。 (add-to-list 'default-frame-alist '(height . 20)) ;; ディスプレイのX座標(ピクセル) (add-to-list 'default-frame-alist '(top . 5)) ;; ディスプレイのY座標(ピクセル) (add-to-list 'default-frame-alist '(left . 5)) ;; 背景色を白にします。 (add-to-list 'default-frame-alist '(background-color . "white")) ;; 文字の色を黒にします。 (add-to-list 'default-frame-alist '(foreground-color . "black")) ;; モードラインの文字色。 (set-face-foreground 'mode-line "white") ;; モードラインの背景色。 (set-face-background 'mode-line "black") ;; ;; *** アクティブでないモードラインの文字、背景色 ;; Meadow 2 では定義されていないようです。 ;; (when (not *run-meadow2*) ;; アクティブでないモードラインの文字色。 (set-face-foreground 'mode-line-inactive "gray30") ;; アクティブでないモードラインの背景色。 (set-face-background 'mode-line-inactive "gray85"))) ;; =============================================================================== ;; ;; Highlights(ハイライト) ;; ;; =============================================================================== (when window-system ;; キーワードのカラー表示を有効化します。 (global-font-lock-mode t) ;; コメント (set-face-foreground 'font-lock-comment-face "gray55") ;; キーワード (set-face-foreground 'font-lock-keyword-face "green4") ;; キーワードを太文字にします。 (make-face-bold 'font-lock-keyword-face) ;; 関数名 (set-face-foreground 'font-lock-function-name-face "bisque4") ;; 関数名を太文字にします。 (make-face-bold 'font-lock-function-name-face) ;; 変数 (set-face-foreground 'font-lock-variable-name-face "gray10") ;; 文字列 (set-face-foreground 'font-lock-string-face "blue") ;; 定数 (set-face-foreground 'font-lock-constant-face "OliveDrab3") ;; 変数の型 (set-face-foreground 'font-lock-type-face "PaleGreen4") ;; びるといんふぇいす? (set-face-foreground 'font-lock-builtin-face "MediumPurple3") ;; わーにんぐふぇいす? (set-face-foreground 'font-lock-warning-face "LightSteelBlue4") ;; ハイライトの文字色。 (set-face-foreground 'highlight "gray88") ;; ハイライトの背景色。 (set-face-background 'highlight "white")) ;; =============================================================================== ;; ;; Highlights parentheses(括弧のハイライト) ;; ;; =============================================================================== ;; 対応するカッコをハイライト表示します。 (show-paren-mode 1) ;(require 'paren) ;(set-face-background 'show-paren-match-face (face-background 'default)) (set-face-background 'show-paren-match-face "gray85") ;(set-face-foreground 'show-paren-match-face "#def") ;(set-face-attribute 'show-paren-match-face nil :weight 'extra-bold) ;; =============================================================================== ;; ;; Setting the title bar and toolbar(タイトルバーとツールバーの設定) ;; ;; =============================================================================== ;;; タイトルバーにファイル名を表示します。 ;; タイトルバーに開いているバッファのパスを表示 ;(if *run-meadow* ; (setq frame-title-format (format "%%f - Meadow@%s" (system-name))) ; (setq frame-title-format (format "%%f - Emacs@%s" (system-name)))) (when *run-meadow* (setq about-meadow (let* ((meadow-about-text (car (split-string (Meadow-version) " "))) (first-hyphen (string-match "-" meadow-about-text))) (store-substring meadow-about-text first-hyphen " "))) (setq frame-title-format `(" %b [" (buffer-file-name "%f") "] - " about-meadow "@", (system-name)))) ;;; %f だと、フルパス名。 %b ならバッファの名前。 ;; =============================================================================== ;; ;; Highlight cursor line(カーソル行ハイライト) ;; ;; =============================================================================== ;; カーソルのある行をハイライトします。 (setq hl-line-face 'underline) (global-hl-line-mode) (defface hlline-face '((((class color) (background dark)) (:background "blue" :foreground "white")) (((class color) (background light)) (:background "AliceBlue")) (t ())) "*Face used by hl-line.") (setq hl-line-face 'hlline-face) ;; =============================================================================== ;; ;; Scrolling(スクロール) ;; ;; =============================================================================== ;; ウィンドウの一番下にカーソルがある場合、そこから下に移動したときに何行スクロールするかの設定です。 ;; 以下は 15 行の場合。 ; line-setting (setq next-line-add-newlines nil) (when (not next-line-add-newlines) (line-number-mode 15) (column-number-mode 15)) ;; スクロール行単位を 1 行にします。 (setq scroll-step 1) ;; 画面をはみ出す場合に 1 行だけスクロールするようにします。 (setq scroll-conservatively 1) ;; カーソルを一番上か一番下まで持っていけます。 (setq scroll-margin 0) ;; =============================================================================== ;; ;; Fringe(フリンジ) ;; ;; =============================================================================== ;; 左フリンジの上下にマークをつける (setq-default indicate-buffer-boundaries 'left) ;; 右フリンジの上下にマークをつける (setq-default indicate-buffer-boundaries 'right) ;; 左フリンジの上と右フリンジの下にマークをつける (setq-default indicate-buffer-boundaries '((top . left) (t . right))) ;; 右フリンジの上と左フリンジの下にマークをつける (setq-default indicate-buffer-boundaries '((top . right) (t . left))) ;; 右フリンジの上にのみマークをつける (setq-default indicate-buffer-boundaries '((top . right) (t . nil))) ;; =============================================================================== ;; ;; Key binds(キー割り当て) ;; ;; =============================================================================== ;; i-search for japanese (define-key isearch-mode-map "\C-k" 'isearch-edit-string) ;; M-g で指定行にカーソルを飛ばします。 (global-set-key "\M-g" (lambda (x) (interactive "Line to goto: ") (goto-line x))) ;; *** comment/uncomment-regeon ;; C-x ; でコメントアウト ;; C-x : でコメントをはずす (global-set-key "\C-x;" 'comment-region) (fset 'uncomment-region "\C-u\C-[xcomment-region\C-m") (global-set-key "\C-x:" 'uncomment-region) ;; 自動インデントを行ないます。 (global-set-key "\C-m" 'newline-and-indent) (global-set-key "\C-j" 'newline) ;; =============================================================================== ;; ;; Useful functions(便利関数) ;; ;; =============================================================================== ;; ** [EOF] を表示します。 ;; (if *run-meadow1* (progn ;; Meadow 1.99 なら以下のようにすると同じことができるようです。 (defun set-buffer-end-mark1() "At the end of the buffer [EOF] padding. This string can not be edited to be reflected in the file." (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-mark1)) (progn ;; あるいは (defun set-buffer-end-mark2() "At the end of the buffer [EOF] padding. This string can not be edited to be reflected in the file." (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-mark2))) ;; でもいい。 ;; ** スクリプトを保存する時,自動的に chmod +x を行なうようにする ;; ;; 次のようなコードを ~/.emacs に加えておくと、 ;; + ファイルの先頭に #! で始まる行が含まれている ;; + ファイル名の先頭がピリオド以外 ;; の場合,実行用のスクリプトファイルであると見なして、保存時に実行許可属性を自動的に設定します。 (defun make-file-executable () "Make the file of this buffer executable, when it is a script source." (save-restriction (widen) (if (string= "#!" (buffer-substring-no-properties 1 (min 3 (point-max)))) (let ((name (buffer-file-name))) (or (equal ?. (string-to-char (file-name-nondirectory name))) (let ((mode (file-modes name))) (set-file-modes name (logior mode (logand (/ mode 4) 73))) (message (concat "Wrote " name " (+x)")))))))) (add-hook 'after-save-hook 'make-file-executable) ;; 日付を挿入します。 (defun my-insert-time () "Insert the date the current cursor location." (interactive) (insert (format-time-string "%Y-%m-%dT%H:%M:%S"))) ;; =============================================================================== ;; ;; SHELL(M-x shell のときの設定) ;; ;; =============================================================================== (when *run-windows* ;; 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_^$!#%&{}@`'.,:()-") ;; shell-modeで上下で補完しモード。 (setq shell-mode-hook (function (lambda () (define-key shell-mode-map [up] 'comint-previous-input) (define-key shell-mode-map [down] 'comint-next-input))))) ;; =============================================================================== ;; ;; Language mode(各言語モード) ;; ;; =============================================================================== ;; Ruby (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)) ;; ECMA Scrirpt (require 'ecmascript-mode) ;; C++ モード。 (add-hook 'c++-mode-hook '(lambda () ;; cc-mode スタイルにします。 (c-set-style "cc-mode") ;; インデントは空白文字で行ないます。 (setq indent-tabs-mode nil) ;; タブ幅を 4 にします。 (setq tab-width 4) ;; 標準オフセットを tab-width と同じにします。 (setq c++-basic-offset tab-width) ;; インデントを tab-width と同じにします。 (setq c-indent-level tab-width) ;; 引数リストの閉じ括弧もインデントします。 (c-set-offset 'arglist-close 1))) ;; *.bat, *.ini に色付します。 (when *run-meadow* (require 'generic-x) (if (and (boundp 'bat-generic-mode) (boundp 'ini-generic-mode)) ;; が、Meadow3 ではこれらのモードが無いため、出来ませんでした。 (setq auto-mode-alist (append (list '("\\.bat$" . bat-generic-mode) '("\\.ini$" . ini-generic-mode) auto-mode-alist))) ;; else (progn (require 'any-ini-mode) (add-to-list 'auto-mode-alist '(".*\\.ini$" . any-ini-mode)) (add-to-list 'auto-mode-alist '(".*\\.conf$" . any-ini-mode)) (require 'bat-mode) ;; bat-mode (setq auto-mode-alist (append (list (cons "\\.[bB][aA][tT]$" 'bat-mode)) ;; For DOS init files (list (cons "CONFIG\\." 'bat-mode)) (list (cons "AUTOEXEC\\." 'bat-mode)) auto-mode-alist)) (autoload 'bat-mode "bat-mode" "DOS and Windows BAT files" t)))) ;; =============================================================================== ;; ;; Line number(行番号) ;; ;; =============================================================================== ;; 行数を左に表示します。 ;(setq wb-line-number-scroll-bar nil) ;(require 'wb-line-number) ;(wb-line-number-toggle) ;;; 行番号・桁番号をモードラインに表示する・しない設定 (line-number-mode t) ; 行番号。t なら表示、nil なら非表示 (column-number-mode t) ; 桁番号。t なら表示、nil なら非表示 ;; 行番号をデフォルトで表示します。 (when (>= emacs-major-version 22) ;; 23 以上から linum.el が入っているので要らないが、Meadow3 は 22 なので ;; require が必要。 (require 'linum)) ;; デフォルトで linum-mode を有効にします。 (global-linum-mode t) ;; 5 桁分の領域を確保して行番号を入れます。 (setq linum-format "%5d") ;; =============================================================================== ;; ;; 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 " \\|$") ;; =============================================================================== ;; ;; egg ;; ;; =============================================================================== (require 'egg) ;; =============================================================================== ;; ;; CLISP & SLIME package(CLIP と SLIME) ;; ;; 1. clisp-directory をインストールパスに合わせて設定します。 ;; 2. M-x clisp-start ;; 3. M-x slime-connect ;; ;; =============================================================================== ;(setq clisp-directory "C:/usr/developments/clisp/2.49") ;(setq slime-directory (concat clisp-directory "/slime")) ;(pushnew slime-directory load-path) ;; =============================================================================== ;; ;; Backup file(バックアップファイル) ;; ;; =============================================================================== ;; オートセーブを有効にします。 (auto-save-mode t) ;; バックアップファイルを作ります。 (setq backup-inhibited nil) ;; 簡易バージョンコントロール機能を有効にします。 (setq version-control t) (when version-control ;; 新しいものを 6 つまで残すようにします。 (setq kept-new-versions 6) ;; 古いものを 6 つまで残すようにします。 (setq kept-old-versions 6) ;; 古いバージョンを消す際に尋ねないようにします。 (setq delete-old-versions t)) ;; 終了時にオートセーブファイルが削除されません。 (setq delete-auto-save-files nil) ;; =============================================================================== ;; ;; Miscellaneous Settings(雑多な設定) ;; ;; =============================================================================== ;; カレントディレクトリをホームディレクトリに設定 ;; ""内は任意のディレクトリを指定可能 (cd "~/") ;; 起動時のメッセージを表示しません。 (setq inhibit-startup-message t) ;;; エラー時に画面がフラッシュするようにします。 ;(setq visible-bell t) ;;;; フラッシュするのがうざいのでしないようにしました。 ;; ツールバーを表示しないようにします。 (tool-bar-mode 0) ;; 最近使ったファイルの一覧を表示します。 (recentf-mode 1) (if (boundp 'server-start) ;; emacsclient を使います。 (server-start)) ;; (setq display-time-string-forms '((let ((system-time-locale "C")) (format-time-string "%Y-%m-%dT%H:%M")))) ;; モードラインに現在時刻を表示します。 (if *run-meadow* (display-time) (display-time 1)) ;; 選択領域を入力で置き換えるようにします。 (delete-selection-mode 1) ;; S-[←→]で範囲を選択できるようになります。 (if *run-meadow3* (pc-selection-mode) (pc-selection-mode 1)) ;; auto-fill モードを使用します。 (setq-default auto-fill-function 'do-auto-fill) ;; キー入力を記憶しておきます。 (open-dribble-file "~/.emacs_dribble") ;; 70 字目で自動的に改行されないようにします。 ;; これでも駄目なときは M-x set-fill-column RET 300 を実行してください。 (setq-default fill-column 300)