emacsの設定ファイル(init.el)

a

今年は今日で仕事納め。

おれ以外はな!

ということで、

「ゼンゼンオンスケジャナイネ」

と素直に課長に打ち明けて、自主的にもうしばらく出勤することにしました。

恨むべきは自分のスキルの欠如です。

誰もいないオフィスの方が作業が3倍捗るから好きなのですが。

サラミスも5機落とせると思います。

init.elバックアップ

愛用しているテキストエディタemacsの設定ファイルをUPします。

DLはコチラから。

https://www.dropbox.com/s/4sg10a5rsh6ixnl/init.el?dl=0

年末なので少し整理しました。

今の時点で欠かせないのは

  • cmigemo
  • helm
  • helm-ag
  • helm-swoop
  • pop-win

あたり。

emacsの設定で困っている人がいれば参考になるかもしれません。。?

=====

[編集後記]

誰もいないオフィス快適過ぎました。

[一日一新]

ファミマの味噌ラーメン

=====

以下はinit.elの内容。

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; init.el
;; Emacs設定用ファイル
;; Time-stamp: ""
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;; おまじない
(require 'cl)

;; スタートアップメッセージを表示させない
(setq inhibit-startup-message t)

;; "yes or no" の選択を "y or n" にする
(fset 'yes-or-no-p 'y-or-n-p)

;;; Elisp配置用のディレクトリを作成
;; Emacs 23より前のバージョンを利用している方は
;; user-emacs-directory変数が未定義のため次の設定を追加
(when (< emacs-major-version 23)
(defvar user-emacs-directory "~/.emacs.d/"))

;; load-path を追加する関数を定義
(defun add-to-load-path (&rest paths)
(let (path)
(dolist (path paths paths)
(let ((default-directory
(expand-file-name (concat user-emacs-directory path))))
(add-to-list 'load-path default-directory)
(if (fboundp 'normal-top-level-add-subdirs-to-load-path)
(normal-top-level-add-subdirs-to-load-path))))))
;; 引数のディレクトリとそのサブディレクトリをload-pathに追加
(add-to-load-path "elisp" "conf" "public_repos")

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Cygwin のマウント情報を解釈してファイル名を変換
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(require 'cygwin-mount)
(cygwin-mount-activate)

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; proxy 設定
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; パッケージ設定
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; (require 'package)
;; (add-to-list 'package-archives '("melpa" . "http://melpa.milkbox.net/packages/") t)
;; (add-to-list 'package-archives '("marmalade" . "http://marmalade-repo.org/packages/"))
;; (package-initialize)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;  起動時サイズ
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(if (boundp 'window-system)
(setq default-frame-alist
(append (list
;; '(foreground-color . "black")  ; 文字色
;; '(background-color . "white")  ; 背景色
;; '(border-color     . "white")  ; ボーダー色
;; '(mouse-color      . "black")  ; マウスカーソルの色
'(cursor-color     . "#ffffcc")   ; カーソルの色
'(cursor-type      . box)         ; カーソルの形状
'(top . 20)                       ; ウィンドウの表示位置(Y座標)
'(left . 30)                      ; ウィンドウの表示位置(X座標)
'(width . 220)                    ; ウィンドウの幅(文字数)
'(height . 52 )                   ; ウィンドウの高さ(文字数)
)
default-frame-alist)))
(setq initial-frame-alist default-frame-alist )

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;  環境変数の設定
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; パスの設定
;; (add-to-list 'exec-path "/opt/local/bin")
(add-to-list 'exec-path "/usr/local/bin")
(add-to-list 'exec-path "/usr/bin")
(add-to-list 'exec-path "~/bin")

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; 文字コード・空白入力設定
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; 最近のEmacs はデフォルトの状態でも、文字コードを自動判別して
;; ファイルを開くことが出来ます。新規作成ファイルの文字コードも
;; locale の設定によって自動決定されます。
;; したがって、文字コードを指定する記述は削除しました。

;; TABの表示幅。初期値は8
(setq-default tab-width 4)
;; インデントにタブ文字を使うか
(setq-default indent-tabs-mode nil) ;デフォルトnil。有効にしたい場合はmodeごとにフックで設定している。

;; tab-stop-list を指定幅で作成する
(defun make-tab-stop-list (stride)
"Make tab-stop-list"
(interactive "nTabStride: ")      ; 'n' で数値として読み込む
(setq tab-stop-list ())
(let ((num stride))
(while (< num 256)
(setq tab-stop-list `(,@tab-stop-list ,num))
(setq num (+ num stride)))))
(make-tab-stop-list 4)  ; タブ幅4でタブストップリスト作成

;; backtab
(defun backtab-to-tab-stop ()
"Do back to previous tab-stop"
(interactive)
(let ((tabs tab-stop-list)
(col (current-column))
(tab-last 0))
(back-to-indentation)           ; 現在行の白文字でない最初の文字へポイントを移動
(if (= col (current-column))        ; 当初のカーソル位置が白文字でない最初の文字位置と一致しているかどうかで期待する位置を調整
(while (and tabs (> col (car tabs)))
(setq tab-last (car tabs))
(setq tabs (cdr tabs)))
(while (and tabs (>= col (car tabs)))
(setq tab-last (car tabs))
(setq tabs (cdr tabs))))
; 期待するタブ位置にくるまで1文字ずつ削除
(while (> (current-column) tab-last)
(delete-char 1))))
;; Shift + Tab でバックタブ
(global-set-key [S-tab] 'backtab-to-tab-stop)
;; 改行コードを表示する
(setq eol-mnemonic-dos "(CRLF)")
(setq eol-mnemonic-mac "(CR)")
(setq eol-mnemonic-unix "(LF)")

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; 表示・装飾に関する設定
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;; ウィンドウを透明にする
;; アクティブウィンドウ/非アクティブウィンドウ(alphaの値で透明度を指定)
;; 第一引数はアクティブ時; 第二引数は非アクティブ時の透明度
(add-to-list 'default-frame-alist '(alpha . (0.90 0.70)))
;;(add-to-list 'default-frame-alist '(alpha . (0.9 0.9)))

;; タイトルバーにファイル名表示
;(setq frame-title-format "%b")          ;ファイル名のみ
(setq frame-title-format "%f")          ;フルパス表示

;; ファイルサイズを表示
(size-indication-mode t)

;; リージョン内の行数と文字数をモードラインに表示する(範囲指定時のみ)
;; http://d.hatena.ne.jp/sonota88/20110224/1298557375
(defun count-lines-and-chars ()
(if mark-active
(format "%d lines,%d chars "
(count-lines (region-beginning) (region-end))
(- (region-end) (region-beginning)))
;; これだとエコーエリアがチラつく
;;(count-lines-region (region-beginning) (region-end))
""))
(add-to-list 'default-mode-line-format
'(:eval (count-lines-and-chars)))

;; メニューバーを消す
(menu-bar-mode -1)

;; ツールバーを消す
(tool-bar-mode -1)

;; 列数を表示する
(column-number-mode t)

;; 行数を表示する
(global-linum-mode t)

;; カーソル行をハイライトする
(global-hl-line-mode t)

;; active でない window の空 cursor を出さない
(setq cursor-in-selected-windows nil)

;; 5秒操作ないとカーソル点滅させる
(setq blink-cursor-interval 0.5)  ;点滅周期
(setq blink-cursor-delay 5.0)     ;点滅するまでの時間
(blink-cursor-mode 1)             ;ブリンクモードON!

;; 対応する括弧を光らせる
(setq show-paren-delay 0)              ; 表示までの秒数。初期値は0.125
(show-paren-mode t)
;; parenのスタイル
;; (setq show-paren-style 'expression) ; 常に強調
(setq show-paren-style 'mixed)         ; ウィンドウ内に収まらないときだけ強調

;;mark 領域に色付け
(setq transient-mark-mode t)

;; visible-bell
(setq visible-bell t)

;; スクロールバーを表示しない
(scroll-bar-mode nil)

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;; 改行やタブを可視化する whitespace-mode
;;; M-x list-faces-displayで設定可能
(setq whitespace-display-mappings       ;どの文字で表示するか
'((space-mark ?\x3000 [?\□])     ; zenkaku space
;;        (newline-mark 10 [8629 10])   ; newline
;;        (tab-mark 9 [187 9] [92 9])     ; tab » 187
)
whitespace-style                  ; ここに列挙しておかないと設定が有効にならない
'(face                            ; faceで可視化 Emacs23.3からfaceを追加しないと色がつかないので注意
spaces                          ; スペース
tabs                            ; タブ
; empty                         ; 先頭/末尾の空白
trailing                        ; 行末
space-mark                      ; 表示のマッピング □
tab-mark                        ; 表示のマッピング >>
space-after-tab                 ; tab後のスペース
space-before-tab                ; tab前のスペース
newline                         ; 改行
newline-mark
))                  ; 表示のマッピング
;; whitespace-modeで全角スペース文字を可視化
(setq whitespace-space-regexp "\\(\x3000+\\)") ; 何をspaceと認識するか

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; face設定
;; M-x list-faces-displayで設定可能
(custom-set-faces
;; custom-set-faces was added by Custom.
;; If you edit it by hand, you could mess it up, so be careful.
;; Your init file should contain only one such instance.
;; If there is more than one, they won't work right.
'(cua-rectangle ((t (:inherit region :background "pale violet red" :foreground "white"))))
'(hl-line ((t (:background "dark slate gray"))))
'(region ((t (:background "navy"))))
'(show-paren-match ((t (:background "powder blue" :foreground "black"))))
'(whitespace-newline ((t (:foreground "cadet blue"))))
'(whitespace-space ((t (:foreground "green1" :family "ゆたぽん(コーディング)"))))
'(whitespace-tab ((t (:foreground "purple3" :underline "slate blue")))))

;; whitespace-mode をオン
(global-whitespace-mode 1)

;; 現在の関数名をモードラインに表示
(which-function-mode 1)

;; フォントのスケールをしない
;(setq scalable-fonts-allowed nil)

;; フォントロックモード有効(Face)
(global-font-lock-mode t)

;; 同一ファイル名の時にフォルダ名を表示させる
(require 'uniquify)
(setq uniquify-buffer-name-style 'post-forward-angle-brackets) ; filename<dir>形式のバッファ名にする
(setq uniquify-ignore-buffers-re "*[^*]+*")                    ; *で囲まれたバッファ名は対象外にする

;; 表示の行間設定
;; 整数で指定するとピクセル数で
;; 少数で指定すると行の高さに対して相対値で設定される
(setq-default line-spacing 0.2)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; その他の設定
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;; file名補完で大文字小文字を区別しない
(setq completion-ignore-case t)

;;ミニバッファにC-xなどのキーストロークを素早く表示する
(setq echo-keystrokes 0.1)

;;; ミニバッファで入力を取り消しても履歴に残す
;;; 誤って取り消して入力が失われるのを防ぐため
(defadvice abort-recursive-edit (before minibuffer-save activate)
(when (eq (selected-window) (active-minibuffer-window))
(add-to-history minibuffer-history-variable (minibuffer-contents))))

;; バッファ変更時に自動で再読み込み
(global-auto-revert-mode 1)

;;ダイアログボックスを使わないようにする
(setq use-dialog-box nil)

;; User Option: enable-recursive-minibuffers
;; この変数がnil以外であると、 ミニバッファ用ウィンドウが活性であっても、
;;(find-fileなどの)ミニバッファを使うコマンドを起動できる。 そのような起動では、
;; 新たなミニバッファに対する再帰編集レベルが作られる。
;; 内側の(深い)ミニバッファを編集中には、 外側の(浅い)レベルのミニバッファは見えない。
;; この変数がnilであると、 ミニバッファ用ウィンドウが活性なときには、 別のウィンドウに切り替えたとしてもミニバッファコマンドは使えない。
(setq enable-recursive-minibuffers t) ;ミニバッファを再帰的に呼び出せるようにする

;;メッセージログの保存件数
(setq message-log-max 10000)
;;; dired設定
(require 'dired-x)

;; zone
(require 'zone)
(zone-when-idle  3600)

;; cua-modeの設定 ;M-o M-nで連番入力
(cua-mode t) ; cua-modeをオン
(setq cua-enable-cua-keys nil) ; CUAキーバインドを無効にする

;; ファイルが #! から始まる場合、+xを付けて保存する
(add-hook 'after-save-hook
'executable-make-buffer-file-executable-if-script-p)

;;閉じカッコの自動挿入
(electric-pair-mode 1)

;; beep音を消す
(defun my-bell-function ()
(unless (memq this-command
'(isearch-abort abort-recursive-edit exit-minibuffer
keyboard-quit mwheel-scroll down up next-line previous-line
backward-char forward-char))
(ding)))
(setq ring-bell-function 'my-bell-function)

;; スクロールは1行ごとに
(setq scroll-conservatively 1)

;; C-kで行全体を削除する
(setq kill-whole-line t)

;; 行末の空白を削除
(add-hook 'before-save-hook 'delete-trailing-whitespace)

;; 最後に改行を入れる。
(setq require-final-newline t)

;; バッファの最後でnewlineで新規行を追加するのを禁止する
(setq next-line-add-newlines nil)

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; キーバインド設定
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;; Ctrl-H を前1文字削除に変更
(keyboard-translate ?\C-h ?\C-?)

;; C-mにnewline-and-indentを割り当てる。
(global-set-key (kbd "C-m") 'newline-and-indent)

;; 折り返しトグルコマンド
(define-key global-map (kbd "C-c l") 'toggle-truncate-lines)

;; [Home] Key と [End] Key を従来の動作に戻す
(define-key global-map [home] 'beginning-of-buffer)
(define-key global-map [end] 'end-of-buffer)

;; C-:で日付を挿入
(define-key global-map (kbd "C-:")
'(lambda ()
(interactive)
(insert (format-time-string "/* %Y-%m-%d %H:%M */"))))
(current-time-zone)

;; F5 で whitespace-mode をトグル
(define-key global-map (kbd "<f5>") 'global-whitespace-mode)

;; ステータスラインに時間を表示する
(if (>= emacs-major-version 20)
(progn
(setq dayname-j-alist
'(("Sun" . "日") ("Mon" . "月") ("Tue" . "火") ("Wed" . "水")
("Thu" . "木") ("Fri" . "金") ("Sat" . "土")))
(setq display-time-string-forms
'((format "%s年%s月%s日(%s) %s:%s %s"
year month day
(cdr (assoc dayname dayname-j-alist))
24-hours minutes
load)))
))
(display-time)

;; 以前編集したファイルのカーソル位置を覚える設定
(require 'saveplace)
(setq-default save-place t)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; バックアップ設定
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;;; バックアップファイルを作成しない
;; (setq make-backup-files nil) ; 初期値はt
;; オートセーブファイルを作らない
;; (setq auto-save-default nil) ; 初期値はt

;;; バックアップファイルの作成場所をシステムのTempディレクトリに変更する
;; (setq backup-directory-alist
;;       `((".*" . ,temporary-file-directory)))

;;; オートセーブファイルの作成場所をシステムのTempディレクトリに変更する
;; (setq auto-save-file-name-transforms
;;       `((".*" ,temporary-file-directory t)))

;; バックアップとオートセーブファイルを~/.emacs.d/backups/へ集める
(add-to-list 'backup-directory-alist
(cons "." "~/.emacs.d/backups/"))
(setq auto-save-file-name-transforms
`((".*" ,(expand-file-name "~/.emacs.d/autosave/") t)))

;; オートセーブファイル作成までの秒間隔
(setq auto-save-timeout 15)
;; オートセーブファイル作成までのタイプ間隔
(setq auto-save-interval 60)
;; 終了時にオートセーブファイルを削除する
(setq delete-auto-save-files t)

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

;;; フォントサイズ変更の設定
; C-↑ か C-+ で拡大
(global-set-key [(control up)] (lambda () (interactive) (text-scale-increase 1)))
(global-set-key [(control +)] (lambda () (interactive) (text-scale-increase 1)))

; C-↓ か C--で縮小
(global-set-key [(control down)] (lambda () (interactive) (text-scale-decrease 1)))
(global-set-key [(control -)] (lambda () (interactive) (text-scale-decrease 1)))

; \C-0 でデフォルトに戻す
(global-set-key [(control ?0)] (lambda () (interactive) (text-scale-increase 0)))

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; 英語フォント
(set-face-attribute 'default nil :family "Inconsolata" :height 110)
;;(set-face-attribute 'default nil :family "Ricty Diminished" :height 104)
;;(set-face-attribute 'default nil :family "Ricty Diminished Discord" :height 104)
;;(set-face-attribute 'default nil :family "Source Code Pro" :height 104)
;;(set-face-attribute 'default nil :family "ゆたぽん(コーディング)" :height 105)

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; 日本語フォント
;; (set-fontset-font nil 'japanese-jisx0208 (font-spec :family "MeiryoKe_Console"))
;; (setq face-font-rescale-alist '("MeiryoKe_Console" . 1.2))

(set-fontset-font nil 'japanese-jisx0208 (font-spec :family "Osaka"))
(setq face-font-rescale-alist '("Osaka" . 1.2))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; auto-install
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; (require 'auto-install)
;; (setq auto-install-directory "~/.emacs.d/auto-install/")
;; (auto-install-update-emacswiki-package-name t)
;; (auto-install-compatibility-setup)             ; 互換性確保
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; summarye.el
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(autoload 'se/make-summary-buffer "summarye" nil t)
(autoload 'soccur "summarye" nil t)
(define-key global-map (kbd "C-x l") 'se/make-summary-buffer)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; ElScreen
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; プレフィクスキーをC-zからC-tに
(setq elscreen-prefix-key (kbd "C-c t"))
(require 'elscreen)
(elscreen-start)

(require 'win-switch)

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; win-switch ウィンドウ移動・リサイズなど (3分割以上のとき)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;; 0.75秒間受け付けるタイマー
(setq win-switch-idle-time 0.75)

;;; 好きなキーを複数割り当てられる
;; ウィンドウ切り替え
(win-switch-set-keys '("k") 'up)
(win-switch-set-keys '("j") 'down)
(win-switch-set-keys '("h") 'left)
(win-switch-set-keys '("l") 'right)
(win-switch-set-keys '("o") 'next-window)
(win-switch-set-keys '("p") 'previous-window)
;; リサイズ
(win-switch-set-keys '("K") 'enlarge-vertically)
(win-switch-set-keys '("J") 'shrink-vertically)
(win-switch-set-keys '("H") 'shrink-horizontally)
(win-switch-set-keys '("L") 'enlarge-horizontally)
;; 分割
(win-switch-set-keys '("3") 'split-horizontally)
(win-switch-set-keys '("2") 'split-vertically)
(win-switch-set-keys '("0") 'delete-window)
;; その他
(win-switch-set-keys '(" ") 'other-frame)
(win-switch-set-keys '("u" [return]) 'exit)
(win-switch-set-keys '("\M-\C-g") 'emergency-exit)
;; C-x oを置き換える
(global-set-key (kbd "C-x o") 'win-switch-dispatch)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; owdriver ウィンドウ移動せずに操作 (要smartrep.el, log4e.el, yaxception.el)
;; (pophint.elもあると警告でない)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(require 'owdriver)
(global-unset-key (kbd "M-o"))
(setq owdriver-prefix-key "M-o")
(owdriver-config-default)
;;; これを入れておくことでM-o M-oで対象ウィンドウを選択できる
(owdriver-add-keymap owdriver-prefix-key 'owdriver-next-window)
(owdriver-mode 1)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; popwin windowのポップアップ
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(setq pop-up-windows nil)
(require 'popwin nil t)
(when (require 'popwin nil t)
(setq anything-samewindow nil)
(setq display-buffer-function 'popwin:display-buffer)
;;  (push '("*helm mini*" :regexp t :height 0.4) popwin:special-display-config)
(push '("*Completions*" :height 0.3) popwin:special-display-config)
(push '("*compilation*" :height 0.5 :noselect t :stick t) popwin:special-display-config)
(push '(" *auto-async-byte-compile*" :noselect t :dedicated t) popwin:special-display-config) ; 自動バイトコンパイルの画面はすぐ消す
)

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; window-resizer (h, j,k,lでサイズ変更)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun window-resizer ()
"Control window size and position."
(interactive)
(let ((window-obj (selected-window))
(current-width (window-width))
(current-height (window-height))
(dx (if (= (nth 0 (window-edges)) 0) 1
-1))
(dy (if (= (nth 1 (window-edges)) 0) 1
-1))
c)
(catch 'end-flag
(while t
(message "size[%dx%d]"
(window-width) (window-height))
(setq c (read-char))
(cond ((= c ?l)
(enlarge-window-horizontally dx))
((= c ?h)
(shrink-window-horizontally dx))
((= c ?j)
(enlarge-window dy))
((= c ?k)
(shrink-window dy))
;; otherwise
(t
(message "Quit")
(throw 'end-flag t)))))))

(global-set-key "\C-c\C-r" 'window-resizer)

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; 自動バイトコンパイル
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(require 'auto-async-byte-compile)
(setq auto-async-byte-compile-exclude-files-regexp "/junk/")
(add-hook 'emacs-lisp-mode-hook 'enable-auto-async-byte-compile-mode)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; cmigemo
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(when (and (executable-find "cmigemo")
(require 'migemo nil t))
(require 'migemo)
(setq migemo-command "cmigemo")
(setq migemo-options '("-q" "--emacs" "-i" "\a"))
(setq migemo-dictionary "~/.emacs.d/etc/migemo/utf-8/migemo-dict")
(setq migemo-user-dictionary nil)
(setq migemo-regex-dictionary nil)
(setq migemo-use-pattern-alist t)
(setq migemo-use-frequent-pattern-alist t)
(setq migemo-pattern-alist-length 1000)
(setq migemo-coding-system 'utf-8-unix)
(load-library "migemo")
(migemo-init)
)

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; helm
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(require 'helm-config)
(helm-mode 1)
(helm-migemo-mode 1)

;; 候補表示画面で改行しないようにする
(setq helm-truncate-lines t)

;; helm-source-buffers-list を詳細に表示しない
(setq helm-buffer-details-flag nil)

;; helm-source-buffers-list でバッファ名を表示する幅を調整する
(setq helm-buffer-max-length 50)

;; helm-follow-mode (C-c C-f で ON/OFF)の前回の状態を維持する
(setq helm-follow-mode-persistent t)

;; ミニバッファで C-k 入力時にカーソル以降を削除する(C-u C-k でも同様の動きをする)
(setq helm-delete-minibuffer-contents-from-point t)

;; http://fukuyama.co/nonexpansion
;; 自動補完を無効にする
(setq helm-ff-auto-update-initial-value nil)

;; C-hで前の文字削除
(define-key helm-map (kbd "C-h") 'delete-backward-char)
(define-key helm-find-files-map (kbd "C-h") 'delete-backward-char)

(define-key global-map (kbd "M-x")     'helm-M-x)
(define-key global-map (kbd "C-;")     'helm-mini)
(define-key global-map (kbd "C-x C-f") 'helm-find-files)
(define-key global-map (kbd "C-x C-r") 'helm-recentf)
(define-key global-map (kbd "M-y")     'helm-show-kill-ring)
(define-key global-map (kbd "C-c i")   'helm-imenu)
(define-key global-map (kbd "C-x b")   'helm-buffers-list)
(define-key global-map (kbd "M-r")     'helm-resume)
(define-key global-map (kbd "C-M-h")   'helm-apropos)

;; helmコマンド内のキーバインド
(define-key helm-map (kbd "C-h") 'delete-backward-char)
(define-key helm-read-file-map (kbd "C-h") 'delete-backward-char)
(define-key helm-find-files-map (kbd "C-h") 'delete-backward-char)
;; tabで補完させる
(define-key helm-read-file-map (kbd "TAB") 'helm-execute-persistent-action)
(define-key helm-find-files-map (kbd "TAB") 'helm-execute-persistent-action)
(define-key helm-command-map (kbd "TAB") 'helm-execute-persistent-action)

;; Disable helm in some functions
;; (add-to-list 'helm-completing-read-handlers-alist '(find-file . nil))
;; (add-to-list 'helm-completing-read-handlers-alist '(write-file . nil))
(add-to-list 'helm-completing-read-handlers-alist '(find-alternate-file . nil))
(add-to-list 'helm-completing-read-handlers-alist '(find-tag . nil))
;; Emulate `kill-line' in helm minibuffer
(setq helm-delete-minibuffer-contents-from-point t)
(defadvice helm-delete-minibuffer-contents (before helm-emulate-kill-line activate)
"Emulate `kill-line' in helm minibuffer"
(kill-new (buffer-substring (point) (field-end))))

;; ;; helm-find-files でタブを 2 回押すと新しいファイル用のバッファが作成される
;; (defadvice helm-ff-kill-or-find-buffer-fname (around execute-only-if-exist activate)
;;   "Execute command only if CANDIDATE exists"
;;   (when (file-exists-p candidate)
;;     ad-do-it))

;; ;; 候補のフィルタリングのロジックをシンプルに
;; (defadvice helm-ff-transform-fname-for-completion (around my-transform activate)
;;   "Transform the pattern to reflect my intention"
;;   (let* ((pattern (ad-get-arg 0))
;;          (input-pattern (file-name-nondirectory pattern))
;;          (dirname (file-name-directory pattern)))
;;     (setq input-pattern (replace-regexp-in-string "\\." "\\\\." input-pattern))
;;     (setq ad-return-value
;;           (concat dirname
;;                   (if (string-match "^\\^" input-pattern)
;;                       ;; '^' is a pattern for basename
;;                       ;; and not required because the directory name is prepended
;;                       (substring input-pattern 1)
;;                     (concat ".*" input-pattern))))))

;; (defun helm-buffers-list-pattern-transformer (pattern)
;;   (if (equal pattern "")
;;       pattern
;;     ;; Escape '.' to match '.' instead of an arbitrary character
;;     (setq pattern (replace-regexp-in-string "\\." "\\\\." pattern))
;;     (let ((first-char (substring pattern 0 1)))
;;       (cond ((equal first-char "*")
;;              (concat " " pattern))
;;             ((equal first-char "=")
;;              (concat "*" (substring pattern 1)))
;;             (t
;;              pattern)))))

;; (add-to-list 'helm-source-buffers-list
;;              '(pattern-transformer helm-buffers-list-pattern-transformer))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; helm swoop
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(require 'helm-swoop)

;; Change the keybinds to whatever you like
(global-set-key (kbd "M-i") 'helm-swoop)
(global-set-key (kbd "M-I") 'helm-swoop-back-to-last-point)
(global-set-key (kbd "C-c M-i") 'helm-multi-swoop)
(global-set-key (kbd "C-x M-i") 'helm-multi-swoop-all)

;; When doing isearch, hand the word over to helm-swoop
(define-key isearch-mode-map (kbd "M-i") 'helm-swoop-from-isearch)
;; From helm-swoop to helm-multi-swoop-all
(define-key helm-swoop-map (kbd "M-i") 'helm-multi-swoop-all-from-helm-swoop)
;; When doing evil-search, hand the word over to helm-swoop
;; (define-key evil-motion-state-map (kbd "M-i") 'helm-swoop-from-evil-search)

;; Instead of helm-multi-swoop-all, you can also use helm-multi-swoop-current-mode
(define-key helm-swoop-map (kbd "M-m") 'helm-multi-swoop-current-mode-from-helm-swoop)

;; Move up and down like isearch
(define-key helm-swoop-map (kbd "C-r") 'helm-previous-line)
(define-key helm-swoop-map (kbd "C-s") 'helm-next-line)
(define-key helm-multi-swoop-map (kbd "C-r") 'helm-previous-line)
(define-key helm-multi-swoop-map (kbd "C-s") 'helm-next-line)

;; Save buffer when helm-multi-swoop-edit complete
(setq helm-multi-swoop-edit-save t)

;; If this value is t, split window inside the current window
(setq helm-swoop-split-with-multiple-windows nil)

;; Split direcion. 'split-window-vertically or 'split-window-horizontally
(setq helm-swoop-split-direction 'split-window-vertically)

;; If nil, you can slightly boost invoke speed in exchange for text color
(setq helm-swoop-speed-or-color nil)

;; ;; Go to the opposite side of line from the end or beginning of line
(setq helm-swoop-move-to-line-cycle t)

;; Optional face for line numbers
;; Face name is `helm-swoop-line-number-face`
(setq helm-swoop-use-line-number-face t)

;; If you prefer fuzzy matching
(setq helm-swoop-use-fuzzy-match t)

;; If you would like to use migemo, enable helm's migemo feature
(helm-migemo-mode 1)

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; helm ag (silver searcher必要)
(require 'helm-files)
(require 'helm-ag)

(define-key global-map (kbd "<f2>") 'helm-ag) ;F2でag実行
(global-set-key (kbd "M-g .") 'helm-ag)
(global-set-key (kbd "M-g ,") 'helm-ag-pop-stack)
(global-set-key (kbd "C-M-s") 'helm-ag-this-file)
;; agのデフォルトのコマンドオプションを指定
;; -nを消すとサブディレクトリも再帰的に検索します
(setq helm-ag-base-command "ag --nocolor --nogroup -n")

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; helm-gtags
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(require 'helm-config)
(require 'helm-gtags)

;; customize
(setq helm-gtags-path-style 'relative)
;; (setq helm-c-gtags-ignore-case t) ;tで大文字小文字無視

;;a key bindings
(add-hook 'helm-gtags-mode-hook
(lambda ()
(local-set-key (kbd "M-t") 'helm-gtags-find-tag)
(local-set-key (kbd "M-r") 'helm-gtags-find-rtag)
(local-set-key (kbd "M-s") 'helm-gtags-find-symbol)
;;タグ一覧からタグを選択し, その定義元にジャンプする
;(local-set-key (kbd "M-l") 'helm-gtags-select)
(local-set-key (kbd "C-t") 'helm-gtags-pop-stack)))
(add-hook 'c-mode-hook 'helm-gtags-mode)
(add-hook 'php-mode-hook 'helm-gtags-mode)
(add-hook 'ruby-mode-hook 'helm-gtags-mode)

(eval-after-load "helm-gtags"
'(progn
(define-key helm-gtags-mode-map (kbd "C-c C-.") 'helm-gtags-next-history)
(define-key helm-gtags-mode-map (kbd "C-c C-,") 'helm-gtags-previous-history)))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; gtags
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; (autoload 'gtags-mode "gtags" "" t)
;; (setq gtags-mode-hook
;;       '(lambda ()
;;          (local-set-key "\M-t" 'gtags-find-tag)
;;          (local-set-key "\M-r" 'gtags-find-rtag)
;;          (local-set-key "\M-s" 'gtags-find-symbol)
;;          (local-set-key "\C-t" 'gtags-pop-stack)
;;          ))

;; ;; カーソル行を強調表示
;; (add-hook 'gtags-select-mode-hook
;;           '(lambda ()
;;              (hl-line-mode 1)))

;; ;; gtags-find-tag で検索時に以前のバッファが残らないようにクリアする
;; (setq gtags-select-buffer-single t)

;; ;; C, C++, Java modeでフック
;; (add-hook 'c-mode-common-hook
;;           '(lambda()
;;              (gtags-mode 1)
;;              ))
;; (add-hook 'c++-mode-hook
;;           '(lambda()
;;              (gtags-mode 1)
;;              ))
;; (add-hook 'java-mode-hook
;;           '(lambda()
;;              (gtags-mode 1)
;;              ))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; GLOBALタグの自動更新(ファイル保存時)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun my-c-mode-update-gtags ()
(let* ((file (buffer-file-name (current-buffer)))
(dir (directory-file-name (file-name-directory file))))
(when (executable-find "global")
(start-process "gtags-update" nil
"global" "-uv"))))

(add-hook 'after-save-hook
'my-c-mode-update-gtags)

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; CEDET (globalとセットで使用する)
;; (setq semantic-symref-tool 'global)
;; (add-hook 'c-mode-hook
;;           '(lambda ()
;;              (semantic-mode 1)))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; icomplete
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(icomplete-mode 1)

;; ミニバッファで補完を行いたくないコマンドのリスト
(defvar icomplete-exceptional-command-list
'(dired-create-directory
dired-do-copy
dired-do-rename))

;; 起動時のカーソル位置を保持するための変数
(defvar icomplete-initial-point-max nil)
;; 起動時の補完候補リストを保持するための変数
(defvar icomplete-initial-completions nil)
;; 起動時に呼び出し元のコマンド名を保持するための変数
(defvar icomplete-this-command nil)

;; 起動時に上記の変数に値を代入するフックをかける
(add-hook 'icomplete-minibuffer-setup-hook
(lambda ()
(setq icomplete-initial-point-max (point-max))
(setq icomplete-initial-completions
(completion-all-sorted-completions
(icomplete--field-beg) (icomplete--field-end)))
(setq icomplete-this-command this-command)))

;; 入力完了のコマンド定義
(defun minibuffer-force-complete-and-exit-dwim ()
"Complete the minibuffer with first of the matches and exit."
(interactive)
(cond ((member icomplete-this-command icomplete-exceptional-command-list)
(exit-minibuffer))
((and (eq (point-max) icomplete-initial-point-max)
(equal (car (completion-all-sorted-completions
(icomplete--field-beg) (icomplete--field-end)))
(car icomplete-initial-completions))
minibuffer-default)
;; Use the provided default if there's one (bug#17545).
(minibuffer-complete-and-exit))
(t (minibuffer-force-complete)
(completion--complete-and-exit
(minibuffer-prompt-end) (point-max) #'exit-minibuffer
;; If the previous completion completed to an element which fails
;; test-completion, then we shouldn't exit, but that should be rare.
(lambda () (minibuffer-message "Incomplete"))))))

;; 入力完了をリターンキーにバインド
(define-key icomplete-minibuffer-map [return]
'minibuffer-force-complete-and-exit-dwim)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Smart compile
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(require 'smart-compile)
(global-set-key (kbd "C-c C-c") 'smart-compile)

(add-hook 'c-mode-common-hook
(lambda ()(local-set-key "\C-c\C-c" 'smart-compile)))
(add-hook 'sh-mode-hook
(lambda ()(local-set-key "\C-c\C-c" 'smart-compile)))


;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Auto complete
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(require 'auto-complete-config)
(ac-config-default)
(add-to-list 'ac-dictionary-directories "~/.emacs.d/elisp/auto-complete/dict"); 辞書のパス
;; mode追加
(add-to-list 'ac-modes 'text-mode)         ; text-modeでも自動的に有効にする
(add-to-list 'ac-modes 'fundamental-mode)  ; fundamental-mode
(add-to-list 'ac-modes 'org-mode)
(add-to-list 'ac-modes 'yatex-mode)
(add-to-list 'ac-modes 'emacs-lisp-mode)
(add-to-list 'ac-modes 'ruby-mode)
(add-to-list 'ac-modes 'css-mode)
(add-to-list 'ac-modes 'lisp-mode)
(add-to-list 'ac-modes 'visual-basic-mode)
(ac-set-trigger-key "TAB")
(setq ac-use-menu-map t)                   ; 補完メニュー表示時にC-n/C-pで補完候補選択
(setq ac-use-fuzzy t)                      ; 曖昧マッチ
(setq ac-delay 0.2)                        ; auto-completeまでの時間
(setq ac-auto-show-menu 0.1)               ; メニューが表示されるまで
;;(setq ac-use-comphist t)                 ; 補完候補をソート
(setq ac-dwim t)                           ; 空気読んでほしい
;; 以下、自動で補完する人用
(setq ac-auto-start 2)                     ; 3文字以上で起動
(setq ac-use-fuzzy t)                      ; 曖昧マッチ (要fuzzy.el)

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; @ flymake.el
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(when (require 'flymake nil t)
;; 下の一行はflymakeモードでエラー行に飛べるコマンドをキーに割り当ててるコードですが、
;; 個人的な理由でコメントアウトしてます。必要でしたらこのコメント削除して、アンコメントしてください
(define-key global-map (kbd "C-c d") 'flymake-display-err-menu-for-current-line)

;; C
;; http://d.hatena.ne.jp/nyaasan/20071216/p1
(defun flymake-c-init ()
(let* ((temp-file   (flymake-init-create-temp-buffer-copy
'flymake-create-temp-inplace))
(local-file  (file-relative-name
temp-file
(file-name-directory buffer-file-name))))
(list "gcc" (list "-Wall" "-Wextra" "-fsyntax-only" local-file))))
(add-to-list 'flymake-allowed-file-name-masks
'("\\.\\(c\\|h\\|y\\l\\)$" flymake-c-init))
;; C++
(defun flymake-cc-init ()
(let* ((temp-file   (flymake-init-create-temp-buffer-copy
'flymake-create-temp-inplace))
(local-file  (file-relative-name
temp-file
(file-name-directory buffer-file-name))))
(list "g++" (list "-Wall" "-Wextra" "-fsyntax-only" local-file))))
(add-to-list 'flymake-allowed-file-name-masks
'("\\.cpp$" flymake-cc-init))

;; Emacs Lisp
;; http://www.emacswiki.org/emacs/FlymakeElisp
(defun flymake-elisp-init ()
(unless (string-match "^ " (buffer-name))
(let* ((temp-file   (flymake-init-create-temp-buffer-copy
'flymake-create-temp-inplace))
(local-file  (file-relative-name
temp-file
(file-name-directory buffer-file-name))))
(list
(expand-file-name invocation-name invocation-directory)
(list
"-Q" "--batch" "--eval"
(prin1-to-string
(quote
(dolist (file command-line-args-left)
(with-temp-buffer
(insert-file-contents file)
(condition-case data
(scan-sexps (point-min) (point-max))
(scan-error
(goto-char(nth 2 data))
(princ (format "%s:%s: error: Unmatched bracket or quote\n"
file (line-number-at-pos)))))))
)
)
local-file)))))
(add-to-list 'flymake-allowed-file-name-masks
'("\\.el$" flymake-elisp-init))

(add-hook 'emacs-lisp-mode-hook
;; workaround for (eq buffer-file-name nil)
(function (lambda () (if buffer-file-name (flymake-mode)))))
(add-hook 'c-mode-common-hook
(lambda () (flymake-mode t)))
(add-hook 'php-mode-hook
(lambda () (flymake-mode t)))
)

;; Flymake自体のエラーを無視する
(defadvice flymake-post-syntax-check (before flymake-force-check-was-interrupted)
(setq flymake-check-was-interrupted t))
(ad-activate 'flymake-post-syntax-check)

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; flymakeのエラーをpopup.el を使って tip として表示
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(declare-function flymake-current-line-no "init.el" ()); Warningが出ないようにする
(declare-function flymake-make-err-menu-data "init.el" ()); Warningが出ないようにする
(defun my-flymake-display-err-popup.el-for-current-line ()
"Display a menu with errors/warnings for current line if it has errors and/or warnings."
(interactive)
(let* ((line-no            (flymake-current-line-no))
(line-err-info-list (nth 0 (flymake-find-err-info flymake-err-info line-no)))
;;         (menu-data          (flymake-make-err-menu-data line-no line-err-info-list)))
(menu-data          (flymake-make-err-menu-data)))

(if menu-data
(popup-tip (mapconcat #'(lambda (e) (nth 0 e))
(nth 1 menu-data)
"\n")))
))

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; 履歴管理
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;; 編集履歴を記憶する──undohist
;; undohistの設定
(when (require 'undohist nil t)
(undohist-initialize))

;;; アンドゥの分岐履歴──undo-tree
;; undo-treeの設定 (C-x uで呼び出し)
(when (require 'undo-tree nil t)
(global-undo-tree-mode))

;;; カーソルの移動履歴──point-undo
;; point-undoの設定
(when (require 'point-undo nil t)
(define-key global-map (kbd "M-[") 'point-undo)
(define-key global-map (kbd "M-]") 'point-redo)
)

;; 変更箇所にジャンプ  goto-chg.el
(require 'goto-chg)
(define-key global-map (kbd "<f9>") 'goto-last-change)
(define-key global-map (kbd "S-<f9>") 'goto-last-change-reverse)
;; 問題が起きたときに *Back Trace*窓を開くようにする
;; byte-compileした *.elcでは中身が読めないことがあるので、そのときは*.elにして使うこと
(setq debug-on-error t)
;; ミニバッファで入力を取り消しても履歴に残す
;;  誤って取り消して入力が失われるのを防ぐため
(defadvice abort-recursive-edit (before minibuffer-save activate)
(when (eq (selected-window) (active-minibuffer-window))
(add-to-history minibuffer-history-variable (minibuffer-contents))))

;;; 最近閉じたバッファを復元
;; http://d.hatena.ne.jp/kitokitoki/20100608/p2
(defvar my-killed-file-name-list nil)
(defun my-push-killed-file-name-list ()
(when (buffer-file-name)
(push (expand-file-name (buffer-file-name)) my-killed-file-name-list)))
(defun my-pop-killed-file-name-list ()
(interactive)
(unless (null my-killed-file-name-list)
(find-file (pop my-killed-file-name-list))))
;; kill-buffer-hook (バッファを消去するときのフック) に関数を追加
(add-hook 'kill-buffer-hook 'my-push-killed-file-name-list)

;; 閉じたバッファを復元する
(define-key global-map (kbd "C-z") 'my-pop-killed-file-name-list)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; シェルの利用                                       ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;; ターミナルの利用 multi-term
;; multi-termの設定
(require 'multi-term)
;; 使用するシェルを指定
;;  (setq multi-term-program "/usr/bin/zsh")
(setq multi-term-program "/cygdrive/c/usr/bin/bash")

(custom-set-variables
;; custom-set-variables was added by Custom.
;; If you edit it by hand, you could mess it up, so be careful.
;; Your init file should contain only one such instance.
;; If there is more than one, they won't work right.
)

(put 'narrow-to-region 'disabled nil)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; ddskk
;;     (add-to-list 'load-path "~/.emacs.d/lisp/skk")
;;     (require 'info)
;;     (add-to-list 'Info-additional-directory-list "~/.emacs.d/info")
;;     (setq skk-user-directory "~/.emacs.d/share/skk/")
;;     (setq skk-tut-file "~/.emacs.d/share/skk/SKK.tut")
;;     (when (require 'skk-autoloads nil t)
;;       (define-key global-map (kbd "C-x C-j") 'skk-mode)
;;       (setq skk-byte-compile-init-file t))
;;     (global-set-key "\C-xj" 'skk-auto-fill-mode)
;;     ;; dired-x with skk
;;     (add-hook 'dired-load-hook
;;               (lambda ()
;;                 (load "dired-x")
;;                 (global-set-key "\C-x\C-j" 'skk-mode)
;;                 ))
;;     ;; 辞書のパス
;;     (setq skk-large-jisyo "~/.emacs.d/share/skk/SKK-JISYO.L")
;;     ;; C-\ でも SKK に切り替えられるように設定
;;     ;;(setq default-input-method "japanese-skk")
;;     ;; 送り仮名が厳密に正しい候補を優先して表示
;;     (setq skk-henkan-strict-okuri-precedence t)
;;     ;;漢字登録時、送り仮名が厳密に正しいかをチェック
;;     (setq skk-check-okurigana-on-touroku t)
;;     ;;動的補完
;;     (setq skk-dcomp-activate t)
;;
;;     ;; 時間を西暦表示
;;     ;; nilで元号表示
;;     (setq skk-date-ad t)
;;
;;
;;     ;;;;;;;;;;;;;;;;;;;;;;;;
;;     ;; sticky
;;     (setq skk-sticky-key ";")
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; modeごとの設定
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;; perl
(add-hook 'perl-mode-hook '(lambda ()
(setq tab-width 4)         ; タブ記号のインデント深さ
) t)
;;;;;;; java
(add-hook 'java-mode-hook '(lambda ()
(setq tab-width 4)         ; タブ記号のインデント深さ
) t)

;;;;;;; C
(add-hook 'c-mode-common-hook '(lambda ()
(c-set-style "bsd")
(setq tab-width 4)         ; タブ記号のインデント深さ
(setq c-basic-offset 4) ;演算式が複数行にまたがるときのオフセット
(setq indent-tabs-mode t)
;;            (setq c-brace-offset 0)
(c-set-offset 'statement-cont 'c-lineup-math)
) t)
;;;;;;; C#
(add-hook 'csharp-mode-hook '(lambda ()
(setq c-basic-offset 4)
(setq substatement-open 0) ; brackets should be at same indentation level as the statements they open
(setq tab-width 4)
(setq indent-tabs-mode nil)
) t )
(autoload 'csharp-mode "csharp-mode" "C# editing mode." t)
;; Visual Basic mode
(autoload 'visual-basic-mode "visual-basic-mode" "Visual Basic mode" t)
(add-to-list 'auto-mode-alist '("\\.\\(vbs\\|vb\\|wsf\\|frm\\|bas\\|cls\\)$" . visual-basic-mode))

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; mode フック
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(setq auto-mode-alist
(append '(
("\\.md$"  . emacs-lisp-mode)
("\\.txt$" . text-mode)
("\\.cs$"  . csharp-mode)
("\\.\\(vbs\\|vb\\|wsf\\|frm\\|bas\\|cls\\)$" . visual-basic-mode)
) auto-mode-alist ))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; クリップボードを使う
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(cond (window-system
(setq x-select-enable-clipboard t)
))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;; 最終更新日の自動挿入
;;;   ファイルの先頭から 8 行以内に Time-stamp: <> または
;;;   Time-stamp: " " と書いてあれば、セーブ時に自動的に日付が挿入されます
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(require 'time-stamp)
(if (not (memq 'time-stamp write-file-functions))
(setq write-file-functions
(cons 'time-stamp write-file-functions)))
(put 'downcase-region 'disabled nil)
(put 'upcase-region 'disabled nil)

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