2010年8月29日日曜日

gnupack + NTEmacs23 のdot.emacs


このエントリーをはてなブックマークに追加


今日のところはこんな感じで落ち着いた。


; -*- Mode: Emacs-Lisp ; Coding: utf-8 -*-

;; 起動時間を測定
(defun my-time-lag ()
  (let* ((now (current-time))
         (min (- (car now) (car my-time-zero)))
         (sec (- (car (cdr now)) (car (cdr my-time-zero))))
         (msec (/ (- (car (cdr (cdr now)))
                     (car (cdr (cdr my-time-zero))))
                     1000))
         (lag (+ (* 60000 min) (* 1000 sec) msec)))
    (message "'.emacs.el' loading time: %d msec." lag)))
(setq my-time-zero (current-time)) 


;; ------------------------------------------------------------------------
;; @ coding system

   ;; 日本語入力のための設定
   (set-keyboard-coding-system 'japanese-shift-jis)

;; ------------------------------------------------------------------------
;; @ ime

   ;; 標準IMEの設定
   (setq default-input-method "W32-IME")

   ;; IMEの初期化
   (w32-ime-initialize)

   ;; IME OFF時の初期カーソルカラー
   (set-cursor-color "red")

   ;; IME ON/OFF時のカーソルカラー
   (add-hook 'input-method-activate-hook
             (lambda() (set-cursor-color "green")))
   (add-hook 'input-method-inactivate-hook
             (lambda() (set-cursor-color "red")))

   ;; バッファ切り替え時にIME状態を引き継ぐ
   (setq w32-ime-buffer-switch-p nil)

;; ------------------------------------------------------------------------
;; @ encode

   ;; 機種依存文字
   (require 'cp5022x)
   (define-coding-system-alias 'euc-jp 'cp51932)

   ;; decode-translation-table の設定
   (coding-system-put 'euc-jp :decode-translation-table
              (get 'japanese-ucs-jis-to-cp932-map 'translation-table))
   (coding-system-put 'iso-2022-jp :decode-translation-table
              (get 'japanese-ucs-jis-to-cp932-map 'translation-table))
   (coding-system-put 'utf-8 :decode-translation-table
              (get 'japanese-ucs-jis-to-cp932-map 'translation-table))

   ;; encode-translation-table の設定
   (coding-system-put 'euc-jp :encode-translation-table
              (get 'japanese-ucs-cp932-to-jis-map 'translation-table))
   (coding-system-put 'iso-2022-jp :encode-translation-table
              (get 'japanese-ucs-cp932-to-jis-map 'translation-table))
   (coding-system-put 'cp932 :encode-translation-table
              (get 'japanese-ucs-jis-to-cp932-map 'translation-table))
   (coding-system-put 'utf-8 :encode-translation-table
              (get 'japanese-ucs-jis-to-cp932-map 'translation-table))

   ;; charset と coding-system の優先度設定
   (set-charset-priority 'ascii 'japanese-jisx0208 'latin-jisx0201
             'katakana-jisx0201 'iso-8859-1 'cp1252 'unicode)
   (set-coding-system-priority 'utf-8 'euc-jp 'iso-2022-jp 'cp932)

   ;; PuTTY 用の terminal-coding-system の設定
   (apply 'define-coding-system 'utf-8-for-putty
      "UTF-8 (translate jis to cp932)"
      :encode-translation-table 
      (get 'japanese-ucs-jis-to-cp932-map 'translation-table)
      (coding-system-plist 'utf-8))
   (set-terminal-coding-system 'utf-8-for-putty)

   ;; East Asian Ambiguous
   (defun set-east-asian-ambiguous-width (width)
     (while (char-table-parent char-width-table)
       (setq char-width-table (char-table-parent char-width-table)))
     (let ((table (make-char-table nil)))
       (dolist (range 
            '(#x00A1 #x00A4 (#x00A7 . #x00A8) #x00AA (#x00AD . #x00AE)
             (#x00B0 . #x00B4) (#x00B6 . #x00BA) (#x00BC . #x00BF)
             #x00C6 #x00D0 (#x00D7 . #x00D8) (#x00DE . #x00E1) #x00E6
             (#x00E8 . #x00EA) (#x00EC . #x00ED) #x00F0 
             (#x00F2 . #x00F3) (#x00F7 . #x00FA) #x00FC #x00FE
             #x0101 #x0111 #x0113 #x011B (#x0126 . #x0127) #x012B
             (#x0131 . #x0133) #x0138 (#x013F . #x0142) #x0144
             (#x0148 . #x014B) #x014D (#x0152 . #x0153)
             (#x0166 . #x0167) #x016B #x01CE #x01D0 #x01D2 #x01D4
             #x01D6 #x01D8 #x01DA #x01DC #x0251 #x0261 #x02C4 #x02C7
             (#x02C9 . #x02CB) #x02CD #x02D0 (#x02D8 . #x02DB) #x02DD
             #x02DF (#x0300 . #x036F) (#x0391 . #x03A9)
             (#x03B1 . #x03C1) (#x03C3 . #x03C9) #x0401 
             (#x0410 . #x044F) #x0451 #x2010 (#x2013 . #x2016)
             (#x2018 . #x2019) (#x201C . #x201D) (#x2020 . #x2022)
             (#x2024 . #x2027) #x2030 (#x2032 . #x2033) #x2035 #x203B
             #x203E #x2074 #x207F (#x2081 . #x2084) #x20AC #x2103
             #x2105 #x2109 #x2113 #x2116 (#x2121 . #x2122) #x2126
             #x212B (#x2153 . #x2154) (#x215B . #x215E) 
             (#x2160 . #x216B) (#x2170 . #x2179) (#x2190 . #x2199)
             (#x21B8 . #x21B9) #x21D2 #x21D4 #x21E7 #x2200
             (#x2202 . #x2203) (#x2207 . #x2208) #x220B #x220F #x2211
             #x2215 #x221A (#x221D . #x2220) #x2223 #x2225
             (#x2227 . #x222C) #x222E (#x2234 . #x2237)
             (#x223C . #x223D) #x2248 #x224C #x2252 (#x2260 . #x2261)
             (#x2264 . #x2267) (#x226A . #x226B) (#x226E . #x226F)
             (#x2282 . #x2283) (#x2286 . #x2287) #x2295 #x2299 #x22A5
             #x22BF #x2312 (#x2460 . #x24E9) (#x24EB . #x254B)
             (#x2550 . #x2573) (#x2580 . #x258F) (#x2592 . #x2595) 
             (#x25A0 . #x25A1) (#x25A3 . #x25A9) (#x25B2 . #x25B3)
             (#x25B6 . #x25B7) (#x25BC . #x25BD) (#x25C0 . #x25C1)
             (#x25C6 . #x25C8) #x25CB (#x25CE . #x25D1) 
             (#x25E2 . #x25E5) #x25EF (#x2605 . #x2606) #x2609
             (#x260E . #x260F) (#x2614 . #x2615) #x261C #x261E #x2640
             #x2642 (#x2660 . #x2661) (#x2663 . #x2665) 
             (#x2667 . #x266A) (#x266C . #x266D) #x266F #x273D
             (#x2776 . #x277F) (#xE000 . #xF8FF) (#xFE00 . #xFE0F) 
             #xFFFD
             ))
     (set-char-table-range table range width))
       (optimize-char-table table)
       (set-char-table-parent table char-width-table)
       (setq char-width-table table)))
   (set-east-asian-ambiguous-width 2)

   ;; emacs-w3m
   (eval-after-load "w3m"
     '(when (coding-system-p 'cp51932)
        (add-to-list 'w3m-compatible-encoding-alist '(euc-jp . cp51932))))

   ;; Gnus
   (eval-after-load "mm-util"
     '(when (coding-system-p 'cp50220)
        (add-to-list 'mm-charset-override-alist '(iso-2022-jp . cp50220))))

   ;; SEMI (cf. http://d.hatena.ne.jp/kiwanami/20091103/1257243524)
   (eval-after-load "mcs-20"
     '(when (coding-system-p 'cp50220)
        (add-to-list 'mime-charset-coding-system-alist 
             '(iso-2022-jp . cp50220))))

   ;; 全角チルダ/波ダッシュをWindowsスタイルにする
   (let ((table (make-translation-table-from-alist '((#x301c . #xff5e))) ))
     (mapc
      (lambda (coding-system)
        (coding-system-put coding-system :decode-translation-table table)
        (coding-system-put coding-system :encode-translation-table table)
        )
      '(utf-8 cp932 utf-16le)))

;; ------------------------------------------------------------------------
;; @ font

   ;; 標準フォントの設定
   ;; (set-default-font "M+2VM+IPAG circle-12")

   ;; IME変換時フォントの設定(テストバージョンのみ)
   ;; (setq w32-ime-font-face "M+2VM+IPAG circle")
   ;; (setq w32-ime-font-height 18)

   ;; 固定等幅フォントの設定
   ;; (set-face-attribute 'fixed-pitch    nil :family "M+2VM+IPAG circle")

   ;; 可変幅フォントの設定
   ;; (set-face-attribute 'variable-pitch nil :family "M+2VM+IPAG circle")

;; ------------------------------------------------------------------------
;; @ frame

   ;; フレームタイトルの設定
   (setq frame-title-format "%b")

;; ------------------------------------------------------------------------
;; @ buffer

   ;; バッファ画面外文字の切り詰め表示
   (setq truncate-lines nil)

   ;; ウィンドウ縦分割時のバッファ画面外文字の切り詰め表示
   (setq truncate-partial-width-windows t)

   ;; 同一バッファ名にディレクトリ付与
   (require 'uniquify)
   (setq uniquify-buffer-name-style 'forward)
   (setq uniquify-buffer-name-style 'post-forward-angle-brackets)
   (setq uniquify-ignore-buffers-re "*[^*]+*")

;; ------------------------------------------------------------------------
;; @ fringe

   ;; バッファ中の行番号表示
   (global-linum-mode t)

   ;; 行番号のフォーマット
   (set-face-attribute 'linum nil :foreground "red" :height 0.8)
   (setq linum-format "%4d")

;; ------------------------------------------------------------------------
;; @ modeline

   ;; 行番号の表示
   (line-number-mode t)

   ;; 列番号の表示
   (column-number-mode t)

   ;; 時刻の表示
   (require 'time)
   (setq display-time-24hr-format t)
   (setq display-time-string-forms '(24-hours ":" minutes))
   (display-time-mode t)

   ;; cp932エンコード時の表示を「P」とする
   (coding-system-put 'cp932 :mnemonic ?P)
   (coding-system-put 'cp932-dos :mnemonic ?P)
   (coding-system-put 'cp932-unix :mnemonic ?P)
   (coding-system-put 'cp932-mac :mnemonic ?P)

;; ------------------------------------------------------------------------
;; @ cursor

   ;; カーソル点滅表示
   (blink-cursor-mode 0)

   ;; スクロール時のカーソル位置の維持
   (setq scroll-preserve-screen-position t)

   ;; スクロール行数(一行ごとのスクロール)
   (setq vertical-centering-font-regexp ".*")
   (setq scroll-conservatively 35)
   (setq scroll-margin 0)
   (setq scroll-step 1)

   ;; 画面スクロール時の重複行数
   (setq next-screen-context-lines 1)

;; ------------------------------------------------------------------------
;; @ default setting

   ;; 起動メッセージの非表示
   (setq inhibit-startup-message t)

   ;; スタートアップ時のエコー領域メッセージの非表示
   (setq inhibit-startup-echo-area-message -1)

;; ------------------------------------------------------------------------
;; @ backup

   ;; 変更ファイルのバックアップ
   (setq make-backup-files nil)

   ;; 変更ファイルの番号つきバックアップ
   (setq version-control nil)

   ;; 編集中ファイルのバックアップ
   (setq auto-save-list-file-name nil)
   (setq auto-save-list-file-prefix nil)

   ;; 編集中ファイルのバックアップ先
   (setq auto-save-file-name-transforms
         `((".*" ,temporary-file-directory t)))

   ;; 編集中ファイルのバックアップ間隔(秒)
   (setq auto-save-timeout 30)

   ;; 編集中ファイルのバックアップ間隔(打鍵)
   (setq auto-save-interval 500)

   ;; バックアップ世代数
   (setq kept-old-versions 1)
   (setq kept-new-versions 2)

   ;; 上書き時の警告表示
   ;- (setq trim-versions-without-asking nil)

   ;; 古いバックアップファイルの削除
   (setq delete-old-versions t)

;; ------------------------------------------------------------------------
;; @ key bind

   ;; 標準キーバインド変更
   (global-set-key "\C-z"          'scroll-down)

;; ------------------------------------------------------------------------
;; @ hiwin-mode
   (require 'hiwin)

   ;; 非アクティブwindowの背景色(hiwin-modeの実行前に設定が必要)
   (setq hiwin-deactive-color "gray30")

   ;; hiwin-modeを有効にする
   (hiwin-mode)

;; ------------------------------------------------------------------------
;; @ tabbar
;   (require 'cl)
;   (require 'tabbar)
;
;   ;; scratch buffer 以外をまとめてタブに表示する
;   (setq tabbar-buffer-groups-function
;         (lambda (b) (list "All Buffers")))
;   (setq tabbar-buffer-list-function
;         (lambda ()
;           (remove-if
;            (lambda(buffer)
;              (unless (string-match (buffer-name buffer) "\\(*scratch*\\|*Apropos*\\|*shell*\\|*eshell*\\|*Customize\\)")
;                (find (aref (buffer-name buffer) 0) " *"))
;              )
;            (buffer-list))))
;
;   ;; tabbarを有効にする
;   (tabbar-mode)
;
;   ;; ボタンをシンプルにする
;   (setq tabbar-home-button-enabled "")
;   (setq tabbar-scroll-right-button-enabled "")
;   (setq tabbar-scroll-left-button-enabled "")
;   (setq tabbar-scroll-right-button-disabled "")
;   (setq tabbar-scroll-left-button-disabled "")
;
;   ;; Ctrl-Tab, Ctrl-Shift-Tab でタブを切り替える
;   (dolist (func '(tabbar-mode tabbar-forward-tab tabbar-forward-group tabbar-backward-tab tabbar-backward-group))
;     (autoload func "tabbar" "Tabs at the top of buffers and easy control-tab navigation"))
;   (defmacro defun-prefix-alt (name on-no-prefix on-prefix &optional do-always)
;     `(defun ,name (arg)
;        (interactive "P")
;        ,do-always
;        (if (equal nil arg)
;            ,on-no-prefix
;          ,on-prefix)))
;   (defun-prefix-alt shk-tabbar-next (tabbar-forward-tab) (tabbar-forward-group) (tabbar-mode 1))
;   (defun-prefix-alt shk-tabbar-prev (tabbar-backward-tab) (tabbar-backward-group) (tabbar-mode 1))
;   (global-set-key [(control tab)] 'shk-tabbar-next)
;   (global-set-key [(control shift tab)] 'shk-tabbar-prev)


;; -------------------------------
;; -------------------------------
;; -------------------------------
;; -------------------------------


;; -------------------------------
;; 基本設定
;; -------------------------------

(setq inhibit-startup-message t)       ; スタートアップ時のメッセージを抑制
(setq initial-scratch-message nil)     ; 起動時のscratch のメッセージを空にする
(tool-bar-mode nil)                    ; メニューバー、ツールバー非表示
(scroll-bar-mode t)                    ; スクロールバーの表示
(setq visible-bell nil)                ; ヴィジブルベルを抑制
(setq ring-bell-function '(lambda ())) ; ビープ音を抑制

(iswitchb-mode)                        ; buffer切り替えを使い易く

; C-f, C-b, C-n, C-p で候補を切り替えることができるように。
(add-hook 'iswitchb-define-mode-map-hook
          (lambda ()
            (define-key iswitchb-mode-map "\C-n" 'iswitchb-next-match)
            (define-key iswitchb-mode-map "\C-p" 'iswitchb-prev-match)
            (define-key iswitchb-mode-map "\C-f" 'iswitchb-next-match)
            (define-key iswitchb-mode-map "\C-b" 'iswitchb-prev-match)
            ))

; *scratch* バッファを消さない
(defun my-make-scratch (&optional arg)
  (interactive)
  (progn
    ;; "*scratch*" を作成して buffer-list に放り込む
    (set-buffer (get-buffer-create "*scratch*"))
    (funcall initial-major-mode)
    (erase-buffer)
    (when (and initial-scratch-message (not inhibit-startup-message))
      (insert initial-scratch-message))
    (or arg (progn (setq arg 0)
                   (switch-to-buffer "*scratch*")))
    (cond ((= arg 0) (message "*scratch* is cleared up."))
          ((= arg 1) (message "another *scratch* is created")))))
(add-hook 'kill-buffer-query-functions
          ;; *scratch* バッファで kill-buffer したら内容を消去するだけにする
          (lambda ()
            (if (string= "*scratch*" (buffer-name))
                (progn (my-make-scratch 0) nil)
              t)))
(add-hook 'after-save-hook
          ;; *scratch* バッファの内容を保存したら *scratch* バッファを新しく作る
          (lambda ()
            (unless (member (get-buffer "*scratch*") (buffer-list))
              (my-make-scratch 1))))

; 日本語補完を賢く
; http://namazu.org/~tsuchiya/elisp/dabbrev-ja.el
; http://www.namazu.org/~tsuchiya/elisp/dabbrev-highlight.el
(load "dabbrev-ja")
(require 'dabbrev-highlight)

; カーソル行にアンダーラインを引く
(setq hl-line-face 'underline)
(global-hl-line-mode)

; M-x にインクリメンタルサーチを付ける
; http://homepage1.nifty.com/bmonkey/emacs/elisp/mcomplete.el
(require 'mcomplete)
(turn-on-mcomplete-mode)

; shell 設定
(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) 



;; -------------------------------
;; キー設定
;; -------------------------------

(global-set-key "\C-z"          'scroll-down)
(global-set-key "\C-x\C-b" 'buffer-menu)             ; バッファ一覧を使い易く
(global-set-key "\C-h" 'delete-backward-char)        ; C-hをバックスペースに
(define-key global-map "\C-x\C-h" 'help-command)     ; C-h に割り当てられている関数 help-command を C-x C-h に割り当てる
;(global-set-key "\C-o" 'canna-toggle-japanese-mode) ; 日本語変換ON/OFF;



;; -------------------------------
;; Wanderlust
;;  APEL       http://www.kanji.zinbun.kyoto-u.ac.jp/~tomo/elisp/APEL/
;;  LIMIT      ftp://ftp.jpl.org/pub/m17n/
;;  SEMI       http://www.kanji.zinbun.kyoto-u.ac.jp/~tomo/elisp/SEMI/
;;  OpenSSL    http://sourceforge.jp/projects/gnupack/downloads/47925/openssl-0.9.8o-1.tar.bz2/
;;  WANDERLUST http://www.gohome.org/wl/index.ja.html
;; -------------------------------

(autoload 'wl "wl" "Wanderlust" t)
(autoload 'wl-other-frame "wl" "Wanderlust on new frame." t)
(autoload 'wl-draft "wl-draft" "Write draft with Wanderlust." t)

(require 'ssl)
(setq ssl-program-name "openssl")
(setq ssl-program-arguments '("s_client" "-quiet" "-host" host "-port" service))

(setq wl-message-id-domain "fqdn.domain.com")
(setq wl-from "user <user@example.com>")

;; IMAP サーバの設定
(setq elmo-imap4-default-server "imap.gmail.com")
(setq elmo-imap4-default-user "xxxxxxxxxx@gmail.com")
(setq elmo-imap4-default-authenticate-type 'clear)
(setq elmo-imap4-default-port '993)
(setq elmo-imap4-default-stream-type 'ssl)

(setq elmo-imap4-use-modified-utf7 t) ; 日本語フォルダ対策

;; SMTP サーバの設定
;(setq wl-smtp-connection-type 'starttls)
;(setq wl-smtp-posting-port 587)
;(setq wl-smtp-authenticate-type "plain")
;(setq wl-smtp-posting-user "user") ; ユーザ名
;(setq wl-smtp-posting-server "smtp.gmail.com")
;(setq wl-local-domain "gmail.com")

;; デフォルトのフォルダ
(setq wl-default-folder "%inbox")

;; フォルダ名補完時に使用するデフォルトのスペック
(setq wl-default-spec "%")
;(setq wl-draft-folder "%[Gmail]/Drafts")      ; Gmail IMAPの仕様に合わせて
;(setq wl-trash-folder "%[Gmail]/Trash")

(setq wl-folder-check-async t)                ; 非同期でチェックするように

(setq mail-self-blind t)                      ; 自動でBCCを付ける
(setq wl-bcc "xxxxx@gmail.com")  ; BCC送付先アドレス

; とりあえず全部非表示
(setq wl-message-ignored-field-list '(".*"))

; 必要そうなものだけ表示に変える
;(setq wl-message-visible-field-list '("^To"
;          "^From"
;          "^Subject"
;          "^Date"
;          "^Cc"))

; サマリモードの形式
(setq wl-summary-line-format "%n %T%P%@ %M/%D(%W) %h:%m %-6S %t%[%25(%c %f%) %] %s")

; フォルダとサマリで選択したラインの背景色を変える
;(custom-set-faces
; '(wl-highlight-folder-path-face ((t (:underline t))))
; '(wl-highlight-summary-displaying-face ((t (:background "light goldenrod"))))
; )

; 添付ファイルの保存先を変更する
(setq mime-save-directory "c:/gnupack/home/tmp")

; 起動時にはオフライン状態にする
(setq wl-plugged nil)

; サマリ表示行を増やす
(setq wl-summary-width nil)
(setq wl-subject-length-limit nil)

; 終了時に確認しない
(setq wl-interactive-exit nil)

; メール送信時には確認する
(setq wl-interactive-send t)

; 大きいメッセージを送信時に分割しない
(setq mime-edit-split-message nil)

; 日本語添付ファイルの余分な文字を削除する。
(modify-coding-system-alist 'process ".*sh\\.exe" '(sjis-dos . sjis-unix))
(defun shell-quote-argument (file) file)
(eval-after-load "mime-conf"
  '(defadvice mime-format-mailcap-command 
     (after remove-escape-chars activate)
     "Remove all '\\' characters in return value of mime-format-mailcap-command "
     (while (string-match "\\\\" ad-return-value)
       (setq ad-return-value (replace-match "" nil t ad-return-value)))))



;; -------------------------------
;; navi2ch
;;  http://navi2ch.sourceforge.net/
;; -------------------------------

(autoload 'navi2ch "navi2ch" "Navigator for 2ch for Emacs" t)

(setq navi2ch-ask-when-exit nil)                        ; 終了時に訪ねない
(setq navi2ch-message-user-name "")                     ; スレのデフォルト名を使う
(setq navi2ch-net-save-old-file-when-aborn nil)         ; あぼーんがあったたき元のファイルは保存しない
(setq navi2ch-message-ask-before-send nil)              ; 送信時に訪ねない
(setq navi2ch-message-ask-before-kill nil)              ; kill するときに訪ねない
(setq navi2ch-article-max-buffers 5)                    ; バッファは 5 つまで
(setq navi2ch-article-auto-expunge t)                   ; navi2ch-article-max-buffers を超えたら古いバッファは消す
(setq navi2ch-board-insert-subject-with-diff t)         ; Board モードのレス数欄にレスの増加数を表示する。
(setq navi2ch-board-insert-subject-with-unread t)       ; Board モードのレス数欄にレスの未読数を表示する。
(setq navi2ch-article-exist-message-range '(1 . 1000))  ; 既読スレはすべて表示
(setq navi2ch-article-new-message-range '(1000 . 1))    ; 未読スレもすべて表示
(setq navi2ch-list-stay-list-window nil)                ; 3 ペインモードでみる
(global-set-key "\C-c2" 'navi2ch)                       ; C-c 2 で起動



;; -------------------------------
;; ファイラー関連 dired
;; -------------------------------

(load "dired-x")

; http://uenox.ld.infoseek.co.jp/elisp/uenox-dired.el
;  Dired に以下の3つの機能が追加されます。(キーマップはこのファイルの
;  最後の方を書き換えることで変更できます。)
;   * C-j 
;     現在の行のファイルをWindowsに関連付けられたアプリケーションを使っ
;     て開きます。(わざわざエクスプローラーを開かなくて良くなります。)
;   * w
;     現在の行のファイル名をUNIX形式にてコピーします。
;   * W
;     現在の行のファイル名をDOS形式にてコピーします。
(load "uenox-dired")

; スペースでマークする (FD like)
(define-key dired-mode-map " " 'dired-toggle-mark)
(defun dired-toggle-mark (arg)
  (interactive "P")
  (let ((dired-marker-char
         (if (save-excursion (beginning-of-line)
                             (looking-at " "))
             dired-marker-char ?\040)))
    (dired-mark arg)
    (dired-previous-line 1)))

; 再帰的なコピー/削除を行う
(setq dired-recursive-copies 'always)
(setq dired-recursive-deletes 'always)



;; -------------------------------
;; emacs-w3m
;;  ftp://ftp.jaist.ac.jp/pub/cygwin/release/w3m/w3m-0.5.1-2.tar.bz2
;;  http://emacs-w3m.namazu.org/index-ja.html
;; -------------------------------

(require 'w3m-load)



;; -------------------------------
;; SLIME & SBCL
;;  SBCL  http://www.sbcl.org/
;;  SLIME http://common-lisp.net/project/slime/
;; -------------------------------

(add-to-list 'load-path "~/.emacs.d/slime-2010-07-11")
(add-to-list 'load-path "~/.emacs.d/slime-2010-07-11/contrib")

; sbclのパスを記述
(setq inferior-lisp-program "sbcl")
(setq slime-net-coding-system 'utf-8-unix)

(add-hook 'lisp-mode-hook (lambda ()
                            (slime-mode t)
                            (show-paren-mode)))

(require 'slime)
(slime-setup '(slime-repl))

; C-c L で slimeを起動
(defun my-slime (&optional command coding-system)
  (interactive)
  (switch-to-buffer-other-window
   (get-buffer-create "*lisp*"))
  (slime command coding-system))
(global-set-key "\C-cL" 'my-slime)

; slimeバッファを切換え
(global-set-key "\C-cs" 'slime-selector)

;; HyperSpecのパスを指定
(require 'hyperspec)
(setq
 common-lisp-hyperspec-root "file:///cygdrive/c/gnupack/home/.emacs.d/HyperSpec/"
 common-lisp-hyperspec-symbol-table (expand-file-name "~/.emacs.d/HyperSpec/Data/MapSym.txt"))

;; HyperSpecをemacs-w3mで起動
(defadvice common-lisp-hyperspec
  (around hyperspec-lookup-w3m () activate)
  (let* ((window-configuration (current-window-configuration))
         (browse-url-browser-function
          `(lambda (url new-window)
             (w3m-browse-url url nil)
             (let ((hs-map (copy-keymap w3m-mode-map)))
               (define-key hs-map (kbd "q")
                 (lambda ()
                   (interactive)
                   (kill-buffer nil)
                   (set-window-configuration ,window-configuration)))
               (use-local-map hs-map)))))
    ad-do-it))

;; 検索したい関数の上で C-c H で検索する。
(global-set-key "\C-cH" 'hyperspec-lookup)



;; -------------------------------
;; changelog memo
;;  http://pop-club.hp.infoseek.co.jp/emacs/clmemo-1.0.tar.gz
;;  http://pop-club.hp.infoseek.co.jp/emacs/blgrep/blgrep-0.2.tar.gz
;; -------------------------------

(autoload 'clmemo "clmemo" "ChangeLog memo mode." t)
(setq clmemo-file-name "~/clmemo.txt")
(global-set-key "\C-xM" 'clmemo)

(autoload 'clgrep "clgrep" "ChangeLog grep." t)
(autoload 'clgrep-item "clgrep" "ChangeLog grep." t)
(autoload 'clgrep-item-header "clgrep" "ChangeLog grep for item header" t)
(autoload 'clgrep-item-tag "clgrep" "ChangeLog grep for tag" t)
(autoload 'clgrep-item-notag "clgrep" "ChangeLog grep for item except for tag" t)
(autoload 'clgrep-item-nourl "clgrep" "ChangeLog grep item except for url" t)
(autoload 'clgrep-entry "clgrep" "ChangeLog grep for entry" t)
(autoload 'clgrep-entry-header "clgrep" "ChangeLog grep for entry header" t)
(autoload 'clgrep-entry-no-entry-header "clgrep" "ChangeLog grep for entry except entry header" t)
(autoload 'clgrep-entry-tag "clgrep" "ChangeLog grep for tag" t)
(autoload 'clgrep-entry-notag "clgrep" "ChangeLog grep for tag" t)
(autoload 'clgrep-entry-nourl "clgrep" "ChangeLog grep entry except for url" t)
(add-hook 'clmemo-mode-hook
          '(lambda () (define-key clmemo-mode-map "\C-c\C-g" 'clgrep)))


;; -------------------------------
;; 最後に実行
;; -------------------------------

(cd "~")       ; 起動時にホームディレクトリへ移動
(my-time-lag)  ; 起動時間の測定