.emacsの記事が思ったより多くの人が見てくれているみたいなので、現在の.emacsを改めて公開してみる。
主な変更点
- 新たにChangeLog Memo dsvn を使い始めるようになった。
- highlight-completionの代わりにmcompleteを使うようになった。
- migemoめちゃくちゃ便利なんだけど、なんか入れたら英語が検索できなくなったんだけど…(調査中)
最近は仕事でもMacを使うようになったので、EmacsとMeadowで両方色々いじってみるという面倒なことが無くなり非常に便利。
エディタは完全にEmacsしか使わないようになった。が、ファインダーからドラッグ&ドロップでファイル開いてるへたれです。
追記:
オレオレ.emacs最新版をGithubに上げました。
http://github.com/goryugo/my-dot-files/tree/master/.emacs.el
;;migemo 英語が検索できなくなったぞ? ;; (setq migemo-command "migemo" ;; migemo-options '("-t" "emacs" "-i" "\a")) ;; (setenv "RUBYLIB" "/Applications/Emacs.app/Contents/Resources/lib/ruby/site_ruby/") ;; (require 'migemo) ;;elisp load-path (setq load-path (append (list (expand-file-name "~/site-lisp/") ) load-path)) ;;Chamgelog Memo (setq user-full-name "USERNAME") (setq user-mail-address "MAIL") (autoload 'clmemo "clmemo" "ChangeLog memo mode." t) ;; あなたの ChangeLog メモファイルへのパス (setq clmemo-file-name "~/howm/clmemo.txt") ;; 好きなキーへバインド (global-set-key "\C-xM" 'clmemo) ;;changelogタイトル補完 (setq clmemo-title-list '("log" "idea" "perl" "unix" "shell")) (setq clmemo-time-string-with-weekday 't) ;;;;;;;;;;;;;;;;;;;; ;;テスト中の機能 ;;;;;;;;;;;;;;;;;;;; ;;dsvn (autoload 'svn-status "dsvn" "Run `svn status'." t) (autoload 'svn-update "dsvn" "Run `svn update'." t) ;;ミニバッファで M-x 時のインクリメンタル補完 (require 'mcomplete) ;さらによく使うヒストリを優先させる (load "mcomplete-history") (turn-on-mcomplete-mode) ;;ファイルを開く時に,カーソルキーだけで,ファイルを選択 ;;カーソル上下で従来のヒストリ。ctrl+P,ctrl+nでファイル名補完 (require 'cycle-mini) (define-key minibuffer-local-map [up] 'previous-history-element) (define-key minibuffer-local-completion-map [up] 'previous-history-element) (define-key minibuffer-local-must-match-map [up] 'previous-history-element) (define-key minibuffer-local-ns-map [up] 'previous-history-element) (define-key minibuffer-local-ns-map [down] 'next-history-element) (define-key minibuffer-local-map [down] 'next-history-element) (define-key minibuffer-local-completion-map [down] 'next-history-element) (define-key minibuffer-local-must-match-map [down] 'next-history-element) ;;;;;;;;;;;;;;;;;;;; ;; mode毎の設定 ;;;;;;;;;;;;;;;;;;;; ;;; yaml-mode (require 'yaml-mode) (add-to-list 'auto-mode-alist '("\\.\\(yml\\|yaml\\)\\'" . yaml-mode)) ;;CSS-mode (autoload 'css-mode "css-mode") (setq auto-mode-alist (cons '("\\.css\\'" . css-mode) auto-mode-alist)) ;;Javascript-mode (add-to-list 'auto-mode-alist (cons "\\.\\(js\\|as\\|json\\|jsn\\)\\'" 'js2-mode)) (autoload 'js2-mode "js2" nil t) (setq js-indent-level 2) ;; cperl mode (autoload 'cperl-mode "cperl-mode" "alternate mode for editing Perl programs" t) (setq auto-mode-alist (append '(("\\.\\([pP][Plm]\\|al\\|cgi\\|t\\)$" . cperl-mode)) auto-mode-alist )) (setq interpreter-mode-alist (append interpreter-mode-alist '(("miniperl" . cperl-mode)))) (add-hook 'cperl-mode-hook (lambda () )) ;;simple hatena mode (require 'simple-hatena-mode) (setq simple-hatena-default-id "goryugo") ;;;;;;;;;;;;;;;;;;;; ;;その他設定 ;;;;;;;;;;;;;;;;;;;; ;;font (if (eq window-system 'mac) (progn (require 'carbon-font) (fixed-width-set-fontset "hiramaru" 12))) ;; メニューバーの消去 (tool-bar-mode -1) ;; 初期フレームの設定 (setq default-frame-alist (append (list '(width . 110) '(height . 63) '(top . 0) '(left . 0)) default-frame-alist)) ;;C-hをバックスペースに (global-set-key "\C-h" 'delete-backward-char) ;; 括弧の対応をハイライト. (show-paren-mode 1) ;; BS で選択範囲を消す (delete-selection-mode 1) ;;ビープ音を消す (setq ring-bell-function 'ignore) ;;カラーテーマ (require 'color-theme) (color-theme-initialize) (color-theme-deep-blue) ;;リージョン色づけ (setq transient-mark-mode t) ;;カーソルでのリージョン選択 (pc-selection-mode) ;;一行カット (setq kill-whole-line t) ;;モードラインにカーソルがある位置の文字数を表示 (column-number-mode 1) ;;;;;;;;;;;;;;;;;;;; ;;howm ;;;;;;;;;;;;;;;;;;;; (setq howm-menu-lang 'ja) (global-set-key "\C-c,," 'howm-menu) (mapc (lambda (f) (autoload f "howm" "Hitori Otegaru Wiki Modoki" t)) '(howm-menu howm-list-all howm-list-recent howm-list-grep howm-create howm-keyword-to-kill-ring)) ;; リンクを TAB で辿る (eval-after-load "howm-mode" '(progn (define-key howm-mode-map [tab] 'action-lock-goto-next-link) (define-key howm-mode-map [(meta tab)] 'action-lock-goto-previous-link))) ;; 「最近のメモ」一覧時にタイトル表示 (setq howm-list-recent-title t) ;; 全メモ一覧時にタイトル表示 (setq howm-list-all-title t) ;; メニューを 2 時間キャッシュ (setq howm-menu-expiry-hours 2) ;; howm の時は auto-fill で ;;(add-hook 'howm-mode-on-hook 'auto-fill-mode) ;; RET でファイルを開く際, 一覧バッファを消す ;; C-u RET なら残る (setq howm-view-summary-persistent nil) ;; メニューの予定表の表示範囲 ;; 10 日前から (setq howm-menu-schedule-days-before 10) ;; 3 日後まで (setq howm-menu-schedule-days 3) ;; howm のファイル名 ;; 1 メモ 1 ファイル (デフォルト) (setq howm-file-name-format "%Y/%m/%Y-%m-%d-%H%M%S.howm") ;; 検索しないファイルの正規表現 (setq howm-excluded-file-regexp "/\\.#\\|[~#]$\\|\\.bak$\\|/CVS/\\|\\.doc$\\|\\.pdf$\\|\\.ppt$\\|\\.xls$") ;; いちいち消すのも面倒なので ;; 内容が 0 ならファイルごと削除する (if (not (memq 'delete-file-if-no-contents after-save-hook)) (setq after-save-hook (cons 'delete-file-if-no-contents after-save-hook))) (defun delete-file-if-no-contents () (when (and (buffer-file-name (current-buffer)) (string-match "\\.howm" (buffer-file-name (current-buffer))) (= (point-min) (point-max))) (delete-file (buffer-file-name (current-buffer))))) ;; http://howm.sourceforge.jp/cgi-bin/hiki/hiki.cgi?SaveAndKillBuffer ;; C-cC-c で保存してバッファをキルする (defun my-save-and-kill-buffer () (interactive) (when (and (buffer-file-name) (string-match "\\.howm" (buffer-file-name))) (save-buffer) (kill-buffer nil))) (eval-after-load "howm" '(progn (define-key howm-mode-map "\C-c\C-c" 'my-save-and-kill-buffer))) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;バッファの切り替え ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (defvar my-ignore-blst ; 移動の際に無視するバッファのリスト '("*Help*" "*Compile-Log*" "*Mew completions*" "*Completions*" "*Shell Command Output*" "*Apropos*" "*Buffer List*" "*GNU Emacs*" ".howm-keys" "*Messages*" "*SimpleHatena*" ".howm-history")) (defvar my-visible-blst nil) ; 移動開始時の buffer list を保存 (defvar my-bslen 15) ; buffer list 中の buffer name の最大長 (defvar my-blist-display-time 10) ; buffer list の表示時間 (defface my-cbface ; buffer list 中で current buffer を示す face '((t (:foreground "wheat" :underline t))) nil) (defun my-visible-buffers (blst) (if (eq blst nil) '() (let ((bufn (buffer-name (car blst)))) (if (or (= (aref bufn 0) ? ) (member bufn my-ignore-blst)) ;; ミニバッファと無視するバッファには移動しない (my-visible-buffers (cdr blst)) (cons (car blst) (my-visible-buffers (cdr blst))))))) (defun my-show-buffer-list (prompt spliter) (let* ((len (string-width prompt)) (str (mapconcat (lambda (buf) (let ((bs (copy-sequence (buffer-name buf)))) (when (> (string-width bs) my-bslen) ;; 切り詰め (setq bs (concat (substring bs 0 (- my-bslen 2)) ".."))) (setq len (+ len (string-width (concat bs spliter)))) (when (eq buf (current-buffer)) ;; 現在のバッファは強調表示 (put-text-property 0 (length bs) 'face 'my-cbface bs)) (cond ((>= len (frame-width)) ;; frame 幅で適宜改行 (setq len (+ (string-width (concat prompt bs spliter)))) (concat "\n" (make-string (string-width prompt) ? ) bs)) (t bs)))) my-visible-blst spliter))) (let (message-log-max) (message "%s" (concat prompt str)) (when (sit-for my-blist-display-time) (message nil))))) (defun my-operate-buffer (pos) (unless (window-minibuffer-p (selected-window));; ミニバッファ以外で (unless (eq last-command 'my-operate-buffer) ;; 直前にバッファを切り替えてなければバッファリストを更新 (setq my-visible-blst (my-visible-buffers (buffer-list)))) (let* ((blst (if pos my-visible-blst (reverse my-visible-blst)))) (switch-to-buffer (or (cadr (memq (current-buffer) blst)) (car blst)))) (my-show-buffer-list (if pos "[-->] " "[<--] ") (if pos " > " " < " ))) (setq this-command 'my-operate-buffer)) (global-set-key [?\C-,] (lambda () (interactive) (my-operate-buffer nil))) (global-set-key [?\C-.] (lambda () (interactive) (my-operate-buffer t)))