.emacs

しょうがないのでさらすよ。colinux version。日本語のコメントはいまつけたもの。

結構短いな。でもかなり汚いw

性格が出るのかねー。部屋が汚い人はdotfilesも汚い法則。

;(require 'browse-kill-ring) ; 今使ってない
;(require 'mutt) ; autoload にした

; clmemo 用の設定
(setq user-full-name "Daisuke Murase")
(setq user-mail-address "murase@kayac.com")

; emacsclient用の設定。~/tmp/emacsclient-caller にはemacsclientを呼び出したscreenのウィンドウ番号が格納してある
; ので自動的にもとのウィンドウへ戻る。詳しくはこのエントリの一番下に書いたリンクを見るといいかも
(server-start)
(add-hook 'after-init-hook 'server-start)
(add-hook 'server-done-hook
          (lambda ()
        (shell-command
         "screen -r -X select `cat ~/tmp/emacsclient-caller`")))

; まなんか見た目かえたり
(menu-bar-mode 0)
(column-number-mode t)
(line-number-mode t) ; default
; 最近開いたファイル開けるように
(recentf-mode)

; color ; 色つけとかね
(global-font-lock-mode t)
(setq-default transient-mark-mode t)

; input method ; anthy使う自鯖用
;(set-language-environment "Japanese")
;(setq default-input-method "japanese-anthy")
;(autoload 'uim-mode "uim" nil t)
;(global-set-key "\C-o" 'uim-mode)

; load library
;(require 'svk-ediff) ; 使いたいけどうまく動かん
(require 'yaml-mode)  ; 最高 clouder++
(autoload 'javascript-mode "javascript" "JavaScript mode" t) ; ecmascript-modeよりイイネ higepon++
;(autoload 'ecmascript-mode "ecmascript-mode" "ECMAScript mode" t)
;(autoload 'pod-mode "pod-mode" "pod mode" t)
;(autoload 'navi2ch "navi2ch" "Navigator for 2ch for Emacs" t) ; 昔使ってたシリーズ

; backup and autosave ; なんだっけこれ #foo.txt# ファイルとかのやつだっっけ。わすれた
(setq auto-save-default nil)
(setq auto-save-list-file-prefix "~/.autosave/")

(defun make-backup-file-name (filename) ; バックアップファイルは違うディレクトリに保存するよ
  (expand-file-name
   (concat "~/.backup/" (file-name-nondirectory filename) "~")
   (file-name-directory filename)))

(require 'auto-save-buffers) ; 自動セーブのやつ。まぁ必須。でも作業ディレクトリでだけ有効にしてるよ
(run-with-idle-timer 0.5 t 'auto-save-buffers "^(/mnt)?/home/typester/workdir/" "^$")
(define-key ctl-x-map "as" 'auto-save-buffers-toggle) ; 一応ホットキーでトグルできるようにしてたらしい。今思い出した

; riece ; 昔使ってたシリーズ2 重いしあんまり良くない。irssiのが良いよ
;(setq load-path
;      (append (list "/usr/share/emacs/site-lisp/riece/") load-path))
;(require 'riece)

; mew ; 昔使ってたシリーズ3 割と好きなメーラ。最近のバージョンでHyperEstraierも使えるようになったらしいし、また使うかも
(setq load-path
      (cons "/usr/share/emacs/site-lisp/mew/" load-path))
(autoload 'mew "mew" nil t)
(autoload 'mew-send "mew" nil t)

; completer ; by kentaro zshみたいにC-x C-fでファイル名補完できるらしいがうごかんんんんn
;(require 'completer)
;(setq completer-words "---. <_")

; windmove ; rieceのときのカーソル移動用キーバインド。今はまったく使ってない
(require 'windmove)
(setq windmove-wrap-around t)
(global-set-key "\C-\M-h" 'windmove-left)
(global-set-key "\C-\M-j" 'windmove-down)
(global-set-key "\C-\M-k" 'windmove-up)
(global-set-key "\C-\M-l" 'windmove-right)

; dabbrev ; 動的補完。デフォキーは押しづらすぎるので。M-spaceにも挑戦したがこっちのがよかった
(global-set-key "\M-o" 'dabbrev-expand)
(setq dabbrev-case-fold-search nil)

(global-set-key "\C-h" 'delete-backward-char) ; バックスペースとか遠い

; Changelog memo mode ; Changelog memo 自鯖で使っている
;(autoload 'clmemo "clmemo" "ChangeLog memo mode." t)
;(setq clmemo-file-name "~/public_html/pub/clmemo.txt")
;(global-set-key "\C-xM" 'clmemo)
;(setq clmemo-subtitle-char "["
;      clmemo-subtitle-punctuation-char '(" [" . "]")
;      clmemo-time-string-with-weekday t)

;(defun my-clmemo-title-formatting (title)
;  (setq title (concat (format-time-string "(%T) " (current-time)) title)))
;(setq clmemo-title-format-function 'my-clmemo-title-formatting)


; ELscreen ; 使ってないシリーズ4
(global-set-key "\C-t" nil)
(setq elscreen-prefix-key "\C-t")
(setq elscreen-display-tab nil)
(load "elscreen" "ElScreen" t)

; auto mode ; 自動モード設定たち
(setq auto-mode-alist
      (append '(("\\.as\\'" . javascript-mode)
        ("\\.js\\'" . javascript-mode)
        ("\\.tt\\'" . xml-mode)
        ("\\.pod\\'" . pod-mode)
        ("mutt-[a-z0-9]+-[0-9]+-[0-9]+\\'" . mutt-mode)
        ("\\.ya?ml\\'" . yaml-mode))
        auto-mode-alist))

; mode ;モード別設定
(setq cssm-indent-function #'cssm-c-style-indenter) ; CSSモード
(setq javascript-indent-level 4) ; Javascriptモード

(defalias 'perl-mode 'cperl-mode) ; cperlモード
(setq cperl-indent-level 4)
(setq cperl-continued-statement-offset 4)
(setq cperl-brace-offset -4)
(setq cperl-label-offset -4)
(setq cperl-indent-parens-as-block t)
(setq cperl-close-paren-offset -4)
(setq cperl-tab-always-indent t)
;(setq cperl-invalid-face nil)
(setq cperl-highlight-variables-indiscriminately t)
; test
(setq fill-column 78) ; これ書いてみたけどうごかね。どうでもいいので放置してある
(setq auto-fill-mode t)

; mmm-mode ; 挑戦したけどうまくうごかなかったシリーズ
;(require 'mmm-mode)
;(require 'mmm-auto)
;(setq mmm-global-mode t)
;(setq mmm-submode-decoration-level 2)
;
;(mmm-add-classes
; '((html-javascript
;    :submode ecmascript-mode
;    :front "<script[^>]*>"
;    :back "</script>")))
;(mmm-add-mode-ext-class nil "\\.tt\\'" 'html-javascript)

; cperl tidy func ; perltidy-region。 必須だね
(defun perltidy-region ()
  "Run perltidy on the current region."
  (interactive)
  (save-excursion
    (shell-command-on-region (point) (mark) "perltidy -q" nil t)))
(defun perltidy-defun ()
  "Run perltidy on the current defun."
  (interactive)
  (save-excursion (mark-defun)
  (perltidy-region)))

; mode-hook ; モードフック系
(defun my-ecmascript-mode-hook () ; javascriptモードにするまで使ってた
  (c-set-style "cc-mode")
  (setq tab-width 4)
  (setq indent-tabs-mode nil))
(add-hook 'ecmascript-mode-hook 'my-ecmascript-mode-hook)

(defun my-javascript-mode-hook () ; 今はこっち
  (setq tab-width 4)
  (setq indent-tabs-mode nil))
(add-hook 'javascript-mode-hook 'my-javascript-mode-hook)

(defun my-php-mode-hook () ; 昔一瞬使った系。いまはphp-modeすら入ってない
  (c-set-style "cc-mode")
  (setq tab-width 4)
  (setq indent-tabs-mode nil))
(add-hook 'php-mode-hook 'my-php-mode-hook)

;(defun my-perl-mode-hook () ; perl-mode使ってたときの設定かな?覚えてないや
;;  (c-set-style "cc-mode")
;  (setq indent-level 4)
;  (setq tab-width 4)
;  (setq indent-tabs-mode nil)
;  (setq continued-statement-offset 4)
;  (setq brase-offset -4)
;  (setq label-offset -4))
;(add-hook 'perl-mode-hook 'my-perl-mode-hook)

(defun my-cperl-mode-hook () ; 今はcperl-mode
  (setq indent-tabs-mode nil)
  ; BestPractices
  (setq fill-column 78) ; コレもうごかんわぁ
  (setq auto-fill-mode t))
(add-hook 'cperl-mode-hook 'my-cperl-mode-hook)

(defun my-w3m-mode-hook ()
  (setq w3m-use-filter nil)) ; よく覚えてない、なんだっけか
(add-hook 'w3m-mode-hook 'my-w3m-mode-hook)

; from Best Practices ; Vimっぽく % で対応する括弧へ飛べるやつ BestPracticesに載ってたコードは動かんのでどっかからぱくったの .tt 書くとき割と邪魔になるのが玉にキズ
; Use % to match various kinds of brackets...
;(defun match-paren (arg)
;  "Go to the matching paren if on a paren; otherwide insert %."
;  (interactive "p")
;  (let ((prev-char (char-to-string (preceding-char)))
;   (next-char (char-to-string (following-char))))
;    (cond ((string-match "[[{(<]" next-char) (forward-sexp 1))
;     ((string-match "[\]})>" prev-char) (backward-sexp 1))
;     (t (self-insert-command (or arg 1))))))
(defun match-paren (arg)
  "Go to the matching paren if on a paren; otherwise insert %."
  (interactive "p")
  (cond ((looking-at "\\s\(") (forward-list 1) (backward-char 1))
    ((looking-at "\\s\)") (forward-char 1) (backward-list 1))
    (t (self-insert-command (or arg 1)))))
(global-set-key "%" 'match-paren)

(defun my-insert-date () ; 日付入れる関数。perlモジュールのChanges書くときに主に使用
  (interactive)
  (insert (format-time-string "%Y-%m-%dT%R:%S+09:00" (current-time))))

; my keys ;いろいろキー設定
(global-set-key "\C-cu" 'w3m-browse-url) ; 昔使ってたかも
(global-set-key "\C-cr" 'replace-string) ; 置換ね
(global-set-key "\C-c\C-r" 'recentf-open-files) ; 最近開いたファイル一覧
(global-set-key "\C-c\C-y" 'browse-kill-ring) ; 使ってね

(global-set-key "\C-cd" 'my-insert-date) ; 日付挿入

(global-set-key "\C-ct" 'perltidy-region) ; perlコード整形、必須。でもmode-hookでやればいいな
(global-set-key "\C-c\C-t" 'perltidy-defun) ; こっちはつかってないや

; colors ; こっからカラーの設定だけどこれはMeadow使ってたときの設定。コンソールでは意味ない(256色モード使ってないので)
(require 'font-lock)
(set-face-foreground 'font-lock-comment-face "red")

; colors for Tab and Space
(defface my-face-b-1 '((t (:background "gray"))) nil)
(defface my-face-b-2 '((t (:background "gray26"))) nil)
(defface my-face-u-1 '((t (:foreground "SteelBlue" :underline t))) nil)
(defvar my-face-b-1 'my-face-b-1)
(defvar my-face-b-2 'my-face-b-2)
(defvar my-face-u-1 'my-face-u-1)

; タブと全角スペースの色かえる
(defadvice font-lock-mode (before my-font-lock-mode ())
  (font-lock-add-keywords
   major-mode
   '(("\t" 0 my-face-b-2 append)
     (" " 0 my-face-b-1 append)
     ("[ \t]+$" 0 my-face-u-1 append)
     )))
(ad-enable-advice 'font-lock-mode 'before 'my-font-lock-mode)
(ad-activate 'font-lock-mode)

; test scroll ; 一行ずつスクロールするよ。デフォルトのかくかくスクロールはキモイ
; clouder かどっかにもっとスマートに同じことするのが載ってて、それに変えようと思ってたけど忘れてた。今思い出した
(defun sane-next-line (arg)
  "Goto next line by ARG steps with scrolling sanely if needed."
  (interactive "p")
  ;;(let ((newpt (save-excursion (line-move arg) (point))))
  (let ((newpt (save-excursion (next-line arg) (point))))
    (while (null (pos-visible-in-window-p newpt))
      (if (< arg 0) (scroll-down 1) (scroll-up 1)))
    (goto-char newpt)
    (setq this-command 'next-line)
    ()))

(defun sane-previous-line (arg)
  "Goto previous line by ARG steps with scrolling back sanely if needed."
  (interactive "p")
  (sane-next-line (- arg))
  (setq this-command 'previous-line)
  ())

(defun sane-newline (arg)
  "Put newline\(s\) by ARG with scrolling sanely if needed."
  (interactive "p")
  (let ((newpt (save-excursion (newline arg) (indent-according-to-mode) (point))))
    (while (null (pos-visible-in-window-p newpt)) (scroll-up 1))
    (goto-char newpt)
    (setq this-command 'newline)
    ()))

(global-set-key [up] 'sane-previous-line)
(global-set-key [down] 'sane-next-line)
;(global-set-key "\C-m" 'sane-newline)
(define-key global-map "\C-n" 'sane-next-line)
(define-key global-map "\C-p" 'sane-previous-line)

; インクリメンタルにバッファきりかえられるやつ。必須すぎ
;(iswitchb-default-keybindings) ; emacs21の人はこっち
(iswitchb-mode 1) ; emacs22の人はこっち

; 同じ名前のバッファがあった場合上の階層のディレクトリとかも一緒に出して区別できるようにユニークなバッファ名にしてくれるやつ
; コレも必須
(require 'uniquify)
(setq uniquify-buffer-name-style 'post-forward-angle-brackets)

こう見ると、あんまりカスタマってないなぁ。perl書く分にはこれでまぁ満足。

この中で必須なのはscreenとの連携部と、cperl-modeの設定、perltidy-region、iswitchb&uniquify、C-hでバックスペースくらいかな。

次点でjavascript-mode、一行ずつのスクロールとかか。

.zshrcもさらそうと思ったけどこれ以上にごちゃってるうえにプライベートな関数多いからやめた。

screenとの連携部分はココとかココに書いたっぽい。

by typester / at 2006-09-20T02:21:00 / emacs / Comments(0)