Skip to content

Instantly share code, notes, and snippets.

@fukamachi
Created February 15, 2010 02:59
Show Gist options
  • Select an option

  • Save fukamachi/304391 to your computer and use it in GitHub Desktop.

Select an option

Save fukamachi/304391 to your computer and use it in GitHub Desktop.

Revisions

  1. fukamachi revised this gist Dec 7, 2010. 2 changed files with 1100 additions and 683 deletions.
    688 changes: 5 additions & 683 deletions .emacs.el
    Original file line number Diff line number Diff line change
    @@ -1,684 +1,6 @@
    ;;====================
    ;; Network
    ;;====================
    (defun get-ip-address (&optional dev)
    (let ((dev (or dev "eth0")))
    (format-network-address (car (network-interface-info dev)) t)))
    (let ((default-directory (expand-file-name "~/Dropbox/home/.emacs.d")))
    (add-to-list 'load-path default-directory)
    (load (expand-file-name "~/Dropbox/home/.emacs.d/subdirs.el") t t t))

    (defun mac-network-location ()
    (substring
    (shell-command-to-string "scselect 2>&1 | grep '^ ' 2>&1 | grep '*' | cut -f 2 -d '(' | cut -f 1 -d ')'")
    0 -1))

    ;;====================
    ;; Functions
    ;;====================
    (eval-when-compile (require 'cl))

    (defun file-name-parent-directory (file-name)
    (let ((idx (string-match "[^/]+/$" (file-name-directory file-name))))
    (substring (file-name-directory (buffer-file-name)) idx -1)))

    (defmacro add-hook-fn (name &rest body)
    `(add-hook ,name #'(lambda () ,@body)))

    (defmacro append-to-list (to lst)
    `(setq ,to (append ,lst ,to)))

    (defmacro req (lib &rest body)
    `(when (locate-library ,(symbol-name lib))
    (require ',lib) ,@body))

    (defmacro lazyload (func lib &rest body)
    `(when (locate-library ,lib)
    ,@(mapcar (lambda (f) `(autoload ',f ,lib nil t)) func)
    (eval-after-load ,lib
    '(progn
    ,@body))))

    (defmacro global-set-key-fn (key args &rest body)
    `(global-set-key ,key (lambda ,args ,@body)))

    (defmacro defadvice-many (fn-lst class &rest body)
    `(progn
    ,@(mapcar
    (lambda (fn)
    `(defadvice ,fn (,class ,(intern (concat (symbol-name fn) "-" (symbol-name class) "-advice")) activate)
    ,@body)) fn-lst)))

    ;;====================
    ;; General
    ;;====================
    ;; load-pathを追加
    (loop for f in (directory-files "~/.emacs.d" t)
    when (and (file-directory-p f)
    (not (eq (file-name-nondirectory f) "..")))
    do (add-to-list 'load-path f))

    ;; exec-path
    (add-to-list 'exec-path "/usr/local/bin")

    ;; 自分の情報
    (setq user-full-name "深町英太郎 (E.Fukamachi)"
    user-mail-address "e.arrows@gmail.com")

    ;; テキストエンコーディングとしてUTF-8を優先使用
    (prefer-coding-system 'utf-8)

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

    ;; Tabの代わりにスペースでインデント
    (setq-default tab-width 2
    indent-tabs-mode nil)

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

    ;; "yes or no"を"y or n"に
    (fset 'yes-or-no-p 'y-or-n-p)

    ;; minibufferでC-wで前の単語を削除
    (define-key minibuffer-local-completion-map (kbd "C-w") 'backward-kill-word)

    ;; 範囲指定していないとき、C-wで前の単語を削除
    (defadvice kill-region (around kill-word-or-kill-region activate)
    (if (and (interactive-p) transient-mark-mode (not mark-active))
    (backward-kill-word 1)
    ad-do-it))

    ;; 終了時に自動でプロセスをkill
    (setq process-kill-without-query t)

    ;; クリップボードにコピー
    (setq x-select-enable-clipboard t)

    ;; 1行ずつスクロール
    (setq scroll-conservatively 35
    scroll-margin 0
    scroll-step 1)
    (setq comint-scroll-show-maximum-output t) ;; for shell-mode

    ;; beepを消す
    (setq ring-bell-function 'ignore)

    ;; .emacs.elの保存時にbyte compile
    (add-hook-fn 'after-save-hook
    (if (string= (expand-file-name "~/.emacs.el")
    (buffer-file-name))
    (save-excursion
    (byte-compile-file "~/.emacs.el"))))

    ;;; for Mac
    ;; Command-Key and Option-Key
    (setq ns-command-modifier 'meta)
    (setq ns-alternate-modifier 'super)

    ;; fullscreen
    (defun toggle-fullscreen ()
    (interactive)
    (if (frame-parameter nil 'fullscreen)
    (set-frame-parameter nil 'fullscreen nil)
    (set-frame-parameter nil 'fullscreen 'fullboth)))
    (global-set-key (kbd "C-c m") 'toggle-fullscreen)

    ;; よく使うモード
    (defvar my-fav-modes
    '((scheme-mode . "\\.scm$")
    (clojure-mode . "\\.clj$")
    (common-lisp-mode . "\\.cl$")
    (malabar-mode . "\\.java$")
    (php-mode . "\\.php[45]?$")
    (yaml-mode . "\\.ya?ml$")
    (js2-mode . "\\.js$")
    (ruby-mode . "\\.rb$")
    (text-mode . "\\.txt$")
    (fundamental-mode . nil)
    (LaTeX-mode . "\\.tex$")
    (org-mode . "\\.org$")
    (css-mode . "\\.css$")
    (nxml-mode . "\\.\(xml\|svg\|wsdl\|xslt\|wsdd\|xsl\|rng\|xhtml\)$")
    (markdown-mode . "\\.\\(md\\|markdown\\)$")))

    ;; auto-mode-alist
    (loop for (k . v) in my-fav-modes
    do (unless (null v) (add-to-list 'auto-mode-alist (cons v k))))

    ;; コメントアウト
    (global-set-key "\C-x;" 'comment-region)
    (global-set-key "\C-x:" 'uncomment-region)

    ;; 分割したウィンドウ間を移動
    (define-prefix-command 'windmove-map)
    (global-set-key (kbd "C-q") 'windmove-map)
    (define-key windmove-map "h" 'windmove-left)
    (define-key windmove-map "j" 'windmove-down)
    (define-key windmove-map "k" 'windmove-up)
    (define-key windmove-map "l" 'windmove-right)

    ;; windowを分割・削除したときに幅をあわせる+別のwindowに移動
    (defadvice-many (split-window-vertically
    split-window-horizontally) after
    (balance-windows)
    (other-window 1))
    (defadvice delete-window (after delete-window-after-advice activate)
    (balance-windows))

    ;; ウィンドウ内のカーソル移動
    (global-set-key-fn (kbd "C-M-h") nil (interactive) (move-to-window-line 0))
    (global-set-key-fn (kbd "C-M-m") nil (interactive) (move-to-window-line nil))
    (global-set-key-fn (kbd "C-M-l") nil (interactive) (move-to-window-line -1))

    ;; goto-lineをM-gに
    (global-set-key "\M-g" 'goto-line)

    ;; C-kで行が連結したときにインデントを減らす
    (defadvice kill-line (before kill-line-and-fixup activate)
    (when (and (not (bolp)) (eolp))
    (forward-char)
    (fixup-whitespace)
    (backward-char)))

    ;; バックアップファイルを作らない
    (setq make-backup-files nil)
    (setq auto-save-default nil)

    ;; キーボードマクロ
    (global-set-key [f5] 'call-last-kbd-macro)

    ;; 一括置換
    (global-set-key (kbd "M-s") 'query-replace-regexp)

    ;;====================
    ;; Utilities
    ;;====================
    ;; hs-minor-mode
    (req hideshow
    (loop for (k . v) in my-fav-modes
    do (add-hook (intern (concat (symbol-name k) "-hook"))
    (lambda ()
    (and (hs-minor-mode) (hs-hide-all)))))
    (global-set-key (kbd "C-=") 'hs-toggle-hiding)
    (global-set-key (kbd "C-\\") 'hs-hide-level))

    ;; undo-tree
    (req undo-tree
    (global-undo-tree-mode))

    ;; Growl
    (defvar growl-program "/usr/local/bin/growlnotify")

    (defmacro growl (title message &optional id stickyp)
    (let ((args `("growl" "*growl*" ,growl-program
    ,title "-w")))
    (or (null id)
    (setq args (append args `("-d" ,id))))
    (or (null stickyp)
    (setq args (append args `("-s"))))
    `(progn
    (start-process ,@args)
    (process-send-string "*growl*" (concat ,message "\n"))
    (process-send-eof "*growl*"))))

    ;; uniquify
    (req uniquify
    (setq uniquify-buffer-name-style 'post-forward-angle-brackets))

    ;; tramp
    (req tramp
    (setq tramp-default-method "sshx"))

    ;; redmine
    (lazyload (redmine-show-issues-all
    redmine-show-activity
    redmine-show-revisions
    redmine-select-project) "redmine"
    (load "redmine-conf"))

    ;; smart-compile+
    (global-set-key "\C-x\C-x" 'smart-compile)
    (lazyload (smart-compile) "smart-compile+"
    (append-to-list smart-compile-alist
    '(("\\.cl$" . "sbcl --noinform %f")
    ("\\.scm$" . "gosh %f")
    ("\\.clj$" . "clj %f"))))

    ;; auto-install
    ;; elispのインストールを簡単に
    (lazyload (auto-install-from-url
    auto-install-from-emacswiki
    auto-install-from-dired
    auto-install-from-directory
    auto-install-from-buffer
    auto-install-from-gist
    auto-install-batch) "auto-install"
    (setq auto-install-directory "~/.emacs.d/elisp/")
    (auto-install-compatibility-setup))

    ;; 終了してもカーソル位置を記録
    (req session
    (add-hook 'after-init-hook 'session-initialize)
    (setq session-initialize '(de-saveplace session keys menus places)
    session-globals-include '((kill-ring 50)
    (session-file-alist 500 t)
    (file-name-history 10000))
    session-globals-max-string 100000000
    history-length t
    session-undo-check -1))

    ;; redo
    (req redo+
    (global-set-key "\C-]" 'redo))

    ;; outputz
    (req outputz
    (setq outputz-uri "http://%s/emacs.%s")
    (global-outputz-mode t)
    (append-to-list outputz-modes (mapcar (lambda (m) (car m)) my-fav-modes))

    (defadvice outputz (before outputz-setup-uri)
    (setq outputz-uri
    (format outputz-uri
    (replace-regexp-in-string "-mode$" "" (symbol-name major-mode))
    (system-name))))
    (ad-activate-regexp "outputz-setup-uri")
    (load "outputz-conf"))

    ;; anything
    (req anything-startup
    ;; kill-ring一覧を表示
    (global-set-key "\M-y" 'anything-show-kill-ring))

    ;; cua-mode
    ;; 矩形選択を簡単に
    (cua-mode t)
    (setq cua-enable-cua-keys nil)

    ;; auto-complete
    ;; 補完候補を自動ポップアップ
    (req auto-complete
    (global-auto-complete-mode t)
    (append-to-list ac-modes '(js2-mode php-mode clojure-mode)))

    ;; auto-insert
    ;; ファイル形式に応じて自動でテンプレート挿入
    (add-hook 'find-file-hooks 'auto-insert)
    (setq auto-insert-directory "~/.emacs.d/templates"
    auto-insert-alist
    '((perl-mode . "perl-template.pl")
    (html-mode . "html-template.html")
    ("base\\.css" . "base.css")
    (css-mode . "css-template.css")
    (".*\\.class\\.php$" . ["php-class-template.php" my-template])))

    (defvar template-replacements-alists
    '(("%file%" . (lambda () (file-name-nondirectory (buffer-file-name))))
    ("%file-without-ext%" . (lambda () (file-name-sans-extension (file-name-nondirectory (buffer-file-name)))))
    ("%name%" . user-full-name)
    ("%mail%" . user-mail-address)
    ("%directory-name%" . (lambda () (file-name-parent-directory (buffer-file-name))))))

    (defun my-template ()
    (time-stamp)
    (mapc (lambda (c)
    (progn
    (goto-char (point-min))
    (while (re-search-forward (car c) nil t)
    (replace-match (funcall (cdr c))))))
    template-replacements-alists)
    (goto-char (point-max))
    (message "done."))

    ;; shell-pop
    ;; C-tでshellをポップアップ
    (lazyload (shell-pop) "shell-pop"
    (shell-pop-set-internal-mode "ansi-term")
    (shell-pop-set-internal-mode-shell "/bin/zsh")
    (shell-pop-set-window-height 60)
    (defvar ansi-term-after-hook nil)
    (add-hook-fn 'term-mode-hook
    (define-key term-raw-map "\C-t" 'shell-pop)
    (define-key term-raw-map "\C-y" 'term-paste)
    (define-key term-raw-map "\M-x" nil)
    (define-key term-raw-map "\C-j" 'term-line-mode)
    (define-key term-mode-map "\C-j"
    (lambda () (interactive)
    (term-char-mode)
    (end-of-buffer)
    (previous-line)))
    (define-key term-raw-map "\C-q" nil)
    (define-key term-raw-map "\C-z" nil))
    (defadvice ansi-term (after ansi-term-after-advice (org))
    "run hook as after advice"
    (run-hooks 'ansi-term-after-hook))
    (ad-activate 'ansi-term))
    (global-set-key (kbd "C-t") 'shell-pop)

    ;; SQL
    (setq sql-user "fukamachi")
    (setq sql-server "localhost")

    ;; ElScreen
    ;; EmacsでGNU screen風のインターフェイスを使う
    (req elscreen
    (setq elscreen-prefix-key "\C-z")
    (setq elscreen-display-screen-number nil))

    ;; global
    ;; 関数定義に飛ぶ (gtags)
    (lazyload (gtags-mode) "gtags"
    (local-set-key "\C-cf" 'gtags-find-tag)
    (local-set-key "\M-r" 'gtags-find-rtag)
    (local-set-key "\M-s" 'gtags-find-symbol)
    (local-set-key "\C-cp" 'gtags-pop-stack))
    (add-hook-fn 'c-mode-common-hook
    (gtags-mode t)
    (eval-after-load "gtags-mode" '(gtags-make-complete-list)))

    ;; w3m
    (lazyload (w3m w3m-browse-url w3m-find-file w3m-search) "w3m"
    (setq w3m-use-cookies t
    w3m-default-display-inline-images t
    w3m-quick-start nil
    w3m-home-page "http://www.google.com/"))
    (setq browse-url-browser-function 'w3m-browse-url)

    ;; M-x occurで検索結果を一覧
    (req color-moccur
    (setq moccur-split-word t)) ;; 複数の検索語や、特定のフェイスのみマッチ

    ;; migemo
    (req migemo
    (load "migemo-conf")
    (setq moccur-use-migemo t))

    ;; anything-c-moccur
    (lazyload (anything-c-moccur-occur-by-moccur
    anything-c-moccur-dmoccur
    anything-c-moccur-dired-do-moccur-by-moccur) "anything-c-moccur"
    (setq anything-c-moccur-anything-idle-delay 0.2 ;`anything-idle-delay'
    anything-c-moccur-higligt-info-line-flag t ; `anything-c-moccur-dmoccur'などのコマンドでバッファ情報をハイライト
    anything-c-moccur-enable-auto-look-flag t ; 現在選択中の候補の位置を他のwindowに表示
    anything-c-moccur-enable-initial-pattern t)) ; `anything-c-moccur-occur-by-moccur'の起動時にポイントの位置の単語を初期パターンにする

    (global-set-key (kbd "M-o") 'anything-c-moccur-occur-by-moccur) ;バッファ内検索
    (global-set-key (kbd "C-M-o") 'anything-c-moccur-dmoccur) ;ディレクトリ
    (add-hook-fn 'dired-mode-hook ;dired
    (local-set-key (kbd "O") 'anything-c-moccur-dired-do-moccur-by-moccur))

    ;; twittering-mode
    (lazyload (twit) "twittering-mode"
    (twittering-jojo-mode t)
    (setq twittering-username "nitro_idiot")
    (setq twittering-retweet-format " RT @%s: %t"))

    ;; emacs-jabber
    (lazyload (jabber-connect) "jabber"
    (load "jabber-conf")
    (setq jabber-message-alert-same-buffer nil)
    (defun pg-jabber-growl-notify (from buf text proposed-alert)
    "(jabber.el hook) Notify of new Jabber chat messages via Growl"
    (when (or jabber-message-alert-same-buffer
    (not (memq (selected-window) (get-buffer-window-list buf))))
    (if (jabber-muc-sender-p from)
    (growl (format "(PM) %s"
    (jabber-jid-displayname (jabber-jid-user from)))
    (format "%s: %s" (jabber-jid-resource from) text)
    (format "jabber-from-%s" (jabber-jid-resource from)))
    (growl (format "%s" (jabber-jid-displayname from))
    text "jabber-from-unknown"))))
    (add-hook 'jabber-alert-message-hooks 'pg-jabber-growl-notify)

    ;; Same as above, for groupchats
    (defun pg-jabber-muc-growl-notify (nick group buf text proposed-alert)
    "(jabber.el hook) Notify of new Jabber MUC messages via Growl"
    (when (or jabber-message-alert-same-buffer
    (not (memq (selected-window) (get-buffer-window-list buf))))
    (if nick
    (when (or jabber-muc-alert-self
    (not (string=
    nick (cdr (assoc group *jabber-active-groupchats*)))))
    (growl (format "%s" (jabber-jid-displayname group))
    (format "%s: %s" nick text)
    (format "jabber-chat-%s" (jabber-jid-displayname group))))
    (growl (format "%s" (jabber-jid-displayname group))
    text "jabber-chat-unknown"))))
    (add-hook 'jabber-alert-muc-hooks 'pg-jabber-muc-growl-notify))


    ;; erc
    (lazyload (erc) "erc"
    (setq erc-server "irc.tokyo.wide.ad.jp"
    erc-nick-uniquifier "_"
    erc-port "6667"
    erc-prompt-for-password nil
    erc-server-coding-system '(iso-2022-jp . iso-2022-jp))
    (load "erc-conf"))

    ;;====================
    ;; Visual
    ;;====================
    ;; color-themeの設定
    (req color-theme
    (and (functionp 'color-theme-initialize) (color-theme-initialize))
    (color-theme-arjen))

    ;; キーワードのカラー表示を有効化
    (global-font-lock-mode t)

    ;; 選択範囲をハイライト
    (setq-default transient-mark-mode t)

    ;; バッファ一覧を詳細に
    (global-set-key "\C-x\C-b" 'bs-show)

    ;; 対応するカッコをハイライト
    (show-paren-mode t)

    ;; 全角空白、Tab、改行表示
    (req jaspace
    (setq jaspace-alternate-jaspace-string ""
    jaspace-alternate-eol-string "\n"
    jaspace-highlight-tabs t)
    (append-to-list jaspace-modes (mapcar 'car my-fav-modes)))

    ;; カーソル行をハイライト
    (defface hlline-face
    '((((class color)
    (background dark))
    (:background "dark slate gray"))
    (((class color)
    (background light))
    (:background "ForestGreen"))
    (t
    ()))
    nil :group 'font-lock-highlighting-faces)
    (setq hl-line-face 'hlline-face)
    (global-hl-line-mode)

    ;; 表示不要なマイナーモードを削除
    (loop for m in '(outputz undo-tree auto-complete jaspace)
    do (assq-delete-all (intern (concat (symbol-name m) "-mode")) minor-mode-alist))

    ;; モード行に行番号、桁番号を表示
    (line-number-mode t)
    (column-number-mode t)

    ;; モード行に時刻を表示
    (setq display-time-string-forms '(24-hours ":" minutes))
    (display-time)

    ;; モード行にバッテリ残量を表示
    (display-battery-mode t)

    ;; 改行コードを表示
    (setq eol-mnemonic-dos "(CRLF)"
    eol-mnemonic-mac "(CR)"
    eol-mnemonic-unix "(LF)")

    ;;====================
    ;; Window System
    ;;====================
    (when window-system
    (server-start) ;; Emacs serverを起動
    (set-frame-parameter nil 'alpha 85) ;; フレームを透過
    (menu-bar-mode 0) ;; メニューバーを消す
    (tool-bar-mode 0) ;; ツールバーを消す
    (toggle-scroll-bar nil)) ;; スクロールバーを消す

    ;;====================
    ;; Syntax
    ;;====================
    ;; Clojure
    (setenv "CLOJURE_EXT" (concat (getenv "HOME") "/.clojure"))
    (req clojure-mode
    (setq clojure-src-root (expand-file-name "~/.clojure")))

    ;; Gauche
    (lazyload (scheme-mode run-scheme) "cmuscheme"
    (add-to-list 'process-coding-system-alist '("gosh" utf-8 . utf-8))
    (setq scheme-program-name "gosh -i"))

    ;; Common lisp
    ;(setq inferior-lisp-program "/usr/local/bin/sbcl --noinform")

    ;; Java
    (add-hook-fn 'malabar-mode-hook
    (add-hook 'after-save-hook 'malabar-compile-file-silently nil t))
    (lazyload (malabar-mode) "malabar-mode"
    (req cedet)
    (setq malabar-groovy-lib-dir "~/.emacs.d/elisp/malabar-mode/lib")
    (append-to-list malabar-import-excluded-classes-regexp-list
    '("^java\\.awt\\..*$"
    "^com\\.sun\\..*$"
    "^org\\.omg\\..*$")))

    ;; php-mode
    (lazyload (php-mode) "php-mode")
    (add-hook-fn 'php-mode-hook
    (setq tab-width 2)
    (c-set-offset 'substatement-open 0)
    (c-set-offset 'block-open '+)
    (c-set-offset 'case-label 1)
    (c-set-offset 'statement-case-open 0)
    (c-set-offset 'arglist-intro '+)
    (c-set-offset 'arglist-close 0))

    ;; ruby
    (add-to-list 'interpreter-mode-alist '("ruby" . ruby-mode))
    (lazyload (run-ruby inf-ruby-keys) "inf-ruby"
    (add-hook-fn 'ruby-mode-hook (inf-ruby-keys)))

    (lazyload (ruby-electric-mode) "ruby-electric")
    (lazyload (ruby-block-mode) "ruby-block"
    (setq ruby-block-highlight-toggle t))
    (add-hook-fn 'ruby-mode-hook (ruby-electric-mode t) (ruby-block-mode t))

    (lazyload (rubydb) "rubydb3x")

    ;; js2-mode
    (lazyload (js2-mode) "js2"
    (setq js2-basic-offset 2
    js2-mirror-mode nil))

    ;; yaml-mode
    (lazyload (yaml-mode) "yaml-mode")

    ;; css-mode
    (lazyload (css-mode) "css-mode"
    (setq cssm-indent-function 'cssm-c-style-indenter))

    ;; mmm-mode
    (req mmm-auto
    (setq mmm-global-mode 'maybe)
    (mmm-add-classes
    '((embedded-css
    :submode css-mode
    :front "<style[^>] *>"
    :back "<style>")))
    (mmm-add-mode-ext-class nil "\\.html\\'" 'embedded-css))

    ;; AUCTeX
    (lazyload (japanese-latex-mode) "tex-site"
    (setq TeX-default-mode 'japanese-latex-mode)
    (setq japanese-LaTeX-command-default "platex")
    (setq japanese-LaTeX-default-style "jarticle")
    (setq kinsoku-limit 10)
    (setq LaTeX-indent-level 4)
    (setq LaTeX-item-indent 2)
    (setq TeX-output-view-style '(("^dvi$" "." "pxdvi '%d'")))
    (setq preview-image-type 'dvipng))
    (add-hook-fn 'LaTeX-mode-hook
    (require 'tex-jp)
    (add-to-list 'TeX-command-list
    '("ptex" "%(PDF)ptex %`%S%(PDFout)%(mode)%' %t"
    TeX-run-TeX nil (plain-tex-mode) :help "Run ASCII pTeX"))
    (add-to-list 'TeX-command-list
    '("platex" "%(PDF)platex %`%S%(PDFout)%(mode)%' %t"
    TeX-run-TeX nil (latex-mode) :help "Run ASCII pLaTeX"))
    (add-to-list 'TeX-command-list
    '("pdfview" "okular '%s.pdf' " TeX-run-command t nil))
    (add-to-list 'TeX-command-list
    '("pdfbuild" "dvipdfmx -V 4 '%s' " TeX-run-command t nil)))

    ;; nxml-mode
    (setq nxml-slash-auto-complete-flag t)

    ;; git commit
    (add-hook-fn 'server-visit-hook
    (if (string-match "COMMIT_EDITMSG" buffer-file-name)
    (set-buffer-file-coding-system 'utf-8)))

    (lazyload (markdown-mode) "markdown-mode")

    ;;====================
    ;; Syntax Checking
    ;;====================
    ;; flymake
    (defmacro def-flymake-init (name masks exec error)
    (let ((init-name (intern (format "flymake-%s-init" name))))
    `(eval-after-load "flymake"
    (when (not (fboundp ',init-name))
    ,(unless (null masks)
    `(setq flymake-allowed-file-name-masks
    (append flymake-allowed-file-name-masks
    ',(mapc (lambda (x) (list x init-name)) masks))))
    (defun ,init-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))))
    ,exec))
    ,(unless (null error)
    `(setq flymake-err-line-patterns
    (cons ',error flymake-err-line-patterns)))))
    `(add-hook-fn (intern (format "%s-mode-hook" ',name)) (flymake-mode t))))

    (lazyload (flymake-mode) "flymake"
    (global-set-key "\C-cd" 'flymake-display-err-menu-for-current-line))

    ;; JavaScript
    (def-flymake-init js ("\.js$")
    `("jsl" ("-process" ,local-file))
    ("\(.+\)(\([0-9]+\)): \(?:lint \)?\(\(?:Warning\|SyntaxError\):.+\)" 1 2 nil 3))

    ;; PHP
    (def-flymake-init php ("\.php[345]?$")
    `("php" ("-f" ,local-file "-l"))
    ("\(\(?:Parse error\|Fatal error\|Warning\): .*\) in \(.*\) on line \([0-9]+\)" 2 3 nil 1))

    ;; Ruby
    (def-flymake-init ruby ()
    `("ruby" ("-c" ,local-file)) nil)


    ;;; This was installed by package-install.el.
    ;;; This provides support for the package system and
    ;;; interfacing with ELPA, the package archive.
    ;;; Move this code earlier if you want to reference
    ;;; packages in your .emacs.
    (when
    (load
    (expand-file-name "~/.emacs.d/elpa/package.el"))
    (package-initialize))
    (if (file-exists-p (locate-library "init"))
    (load (locate-library "init") nil t nil))
    1,095 changes: 1,095 additions & 0 deletions init.el
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,1095 @@
    ;;====================
    ;; Functions
    ;;====================
    (eval-when-compile (require 'cl))
    (defun file-name-parent-directory (file-name &optional idx)
    (nth (1+ (or idx 0)) (reverse (split-string file-name "/" t))))

    (defun upper-camelcase (str)
    (replace-regexp-in-string "-" "" (capitalize str)))

    (defun escape-single-quoted (text)
    (replace-regexp-in-string
    "'" "\\\\'" (replace-regexp-in-string "\\\\" "\\\\\\\\" text)))

    (defun yas/field-current ()
    (overlay-get yas/active-field-overlay 'yas/field))

    (defun yas/field-current-number ()
    (yas/field-number (yas/field-current)))

    (defvar yas/replace-prev-field-by nil)

    (defun yas/replace-prev-field (to)
    (setq yas/replace-prev-field-by to)
    (add-hook 'post-command-hook 'yas/replace-prev-field-once 'append 'local)
    "")

    (defun yas/replace-prev-field-once ()
    (let ((to yas/replace-prev-field-by)
    (from (yas/field-value (1- (yas/field-current-number)))))
    (search-backward from nil t)
    (replace-match
    (if (functionp to) (funcall to from) to) nil t)
    (yas/next-field))
    (setq yas/replace-prev-field-by nil)
    (remove-hook 'post-command-hook 'yas/replace-prev-field-once 'local))

    (defmacro add-hook-fn (name &rest body)
    `(add-hook ,name #'(lambda () ,@body)))

    (defmacro append-to-list (to lst)
    `(setq ,to (append ,lst ,to)))

    (defmacro req (lib &rest body)
    `(when (locate-library ,(symbol-name lib))
    (require ',lib) ,@body t))

    (defmacro lazyload (func lib &rest body)
    `(when (locate-library ,lib)
    ,@(mapcar (lambda (f) `(autoload ',f ,lib nil t)) func)
    (eval-after-load ,lib
    '(progn
    ,@body)) t))

    (defmacro global-set-key-fn (key &rest body)
    `(global-set-key ,key (lambda () (interactive) ,@body)))

    (defmacro defadvice-many (fn-lst class &rest body)
    `(progn
    ,@(mapcar
    (lambda (fn)
    `(defadvice ,fn (,class ,(intern (concat (symbol-name fn) "-" (symbol-name class) "-advice")) activate)
    ,@body)) fn-lst)))

    ;;====================
    ;; General
    ;;====================
    ;; load-pathを追加
    (let ((default-directory (expand-file-name "~/.emacs.d")))
    (add-to-list 'load-path default-directory)
    (load (expand-file-name "~/.emacs.d/subdirs.el") t t t))

    ;; exec-path
    (loop for x in (reverse
    (split-string (substring (shell-command-to-string "echo $PATH") 0 -1) ":"))
    do (add-to-list 'exec-path x))

    (lazyload (e2wm:start-management) "e2wm"
    (e2wm:add-keymap
    e2wm:pst-minor-mode-keymap
    '(("M-h" . e2wm:dp-code) ; codeへ変更
    ("M-l" . e2wm:dp-two) ; twoへ変更
    ("M-k" . e2wm:dp-array) ; arrayへ変更
    ("M-j" . e2wm:dp-dashboard) ; dashboardへ変更
    ("C-." . e2wm:pst-history-forward-command) ; 履歴を進む
    ("C-," . e2wm:pst-history-back-command) ; 履歴をもどる
    ("prefix L" . ielm)
    ) e2wm:prefix-key)
    (setq e2wm:c-dashboard-plugins
    '((open :plugin-args (:command twit :buffer "*twittering*"))
    (open :plugin-args (:command doctor :buffer "*doctor*")))))

    ;; 自分の情報
    (setq user-full-name "深町英太郎 (E.Fukamachi)"
    user-mail-address "e.arrows@gmail.com")

    ;; テキストエンコーディングとしてUTF-8を優先使用
    (prefer-coding-system 'utf-8)

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

    ;; lisp-interaction-modeを使わない
    (setq initial-major-mode 'emacs-lisp-mode)

    ;; Tabの代わりにスペースでインデント
    (setq-default tab-width 2
    indent-tabs-mode nil)

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

    ;; "yes or no"を"y or n"に
    (fset 'yes-or-no-p 'y-or-n-p)

    ;; minibufferでC-wで前の単語を削除
    (define-key minibuffer-local-completion-map (kbd "C-w") 'backward-kill-word)

    ;; 範囲指定していないとき、C-wで前の単語を削除
    (defadvice kill-region (around kill-word-or-kill-region activate)
    (if (and (interactive-p) transient-mark-mode (not mark-active))
    (backward-kill-word 1)
    ad-do-it))

    ;; GCを減らして軽くする
    (setq gc-cons-threshold (* 10 gc-cons-threshold))

    ;; ダイアログを使わない
    (setq use-dialog-box nil)
    (defalias 'message-box 'message)

    ;; キーストロークのミニバッファへの表示を早く
    (setq echo-keystrokes 0.1)

    ;; 終了時に自動でプロセスをkill
    (setq process-kill-without-query t)

    ;; クリップボードにコピー
    (setq x-select-enable-clipboard t)

    ;; 1行ずつスクロール
    (setq scroll-conservatively 35
    scroll-margin 0
    scroll-step 1)
    (setq comint-scroll-show-maximum-output t) ;; for shell-mode

    ;; beepを消す
    (setq ring-bell-function 'ignore)

    ;;; for Mac
    (defun mac-os-p ()
    (member window-system '(mac ns)))
    (defun linuxp ()
    (eq window-system 'x))

    ;; Command-Key and Option-Key
    (when (mac-os-p)
    (setq ns-command-modifier 'meta)
    (setq ns-alternate-modifier 'super)
    (setq mac-pass-command-to-system nil))

    ;; fullscreen
    (defun toggle-fullscreen ()
    (interactive)
    (cond
    ((mac-os-p) (ns-toggle-fullscreen))
    ((linuxp)
    (if (frame-parameter nil 'fullscreen)
    (set-frame-parameter nil 'fullscreen nil)
    (set-frame-parameter nil 'fullscreen 'fullboth)))))
    (global-set-key (kbd "C-c m") 'toggle-fullscreen)

    ;; よく使うモード
    (defvar my-fav-modes
    '((emacs-lisp-mode . "\\.el$")
    (common-lisp-mode . "\\.\\(cl\\|lisp\\)$")
    (scheme-mode . "\\.scm$")
    (clojure-mode . "\\.clj$")
    (pir-mode . "\\.\\(imc\\|pir\\)$")
    ; (malabar-mode . "\\.java$")
    (php-mode . "\\.php[45]?$")
    (yaml-mode . "\\.ya?ml$")
    (js2-mode . "\\.js$")
    (ruby-mode . "\\.rb$")
    (text-mode . "\\.txt$")
    (fundamental-mode . nil)
    (LaTeX-mode . "\\.tex$")
    (org-mode . "\\.org$")
    (css-mode . "\\.css$")
    (nxml-mode . "\\.\\(xml\\|svg\\|wsdl\\|xslt\\|wsdd\\|xsl\\|rng\\|xhtml\\|jsp\\|tag\\)$")
    (markdown-mode . "\\.\\(md\\|markdown\\)$")))

    ;; auto-mode-alist
    (loop for (k . v) in my-fav-modes
    do (unless (null v) (add-to-list 'auto-mode-alist (cons v k))))

    ;; コメントアウト
    (global-set-key "\C-x;" 'comment-region)
    (global-set-key "\C-x:" 'uncomment-region)

    ;; goto-lineをM-gに
    (global-set-key "\M-g" 'goto-line)

    ;; C-kで行が連結したときにインデントを減らす
    (defadvice kill-line (before kill-line-and-fixup activate)
    (when (and (not (bolp)) (eolp))
    (forward-char)
    (fixup-whitespace)
    (backward-char)))

    ;; バックアップファイルを作らない
    (setq make-backup-files nil)
    (setq auto-save-default nil)

    ;; 日本語フォント
    (defun set-jp-font ()
    (when (display-graphic-p)
    (set-fontset-font
    (frame-parameter nil 'font)
    'japanese-jisx0208
    '("Hiragino Maru Gothic Pro" . "iso10646-1"))))
    (set-jp-font)

    ;; 行間を開く
    (setq-default line-spacing 0.1)

    ;; フォントサイズ変更
    (defun font-big ()
    (interactive)
    (set-face-attribute 'default nil :height
    (+ (face-attribute 'default :height) 10))
    (set-jp-font))

    (defun font-small ()
    (interactive)
    (set-face-attribute 'default nil :height
    (- (face-attribute 'default :height) 10))
    (set-jp-font))

    (global-set-key (kbd "C--") 'font-small)
    (global-set-key (kbd "C-+") 'font-big)

    ;;====================
    ;; Search
    ;;====================
    (defvar last-search-char nil)
    (defvar last-search-direction 'forward)
    (defun search-forward-with-char (char)
    (interactive "cMove to Char: ")
    ;; カーソルの文字と等しいときはヒットさせない
    (if (eq (char-after (point)) char) (forward-char))
    (and (search-forward (char-to-string char) nil t)
    (backward-char))
    (setq last-search-char char
    last-search-direction 'forward))
    (defun search-backward-with-char (char)
    (interactive "cMove backward to Char: ")
    (search-backward (char-to-string char) nil t)
    (setq last-search-char char
    last-search-direction 'backward))
    (defun search-repeat-with-char ()
    (interactive)
    (cond
    ((eq nil last-search-char) (message "You haven't searched yet. Stupid!"))
    ((eq last-search-direction 'forward)
    (or (search-forward-with-char last-search-char) (backward-char)))
    ((eq last-search-direction 'backward) (search-backward-with-char last-search-char))))
    (global-set-key "\C-f" 'search-forward-with-char)
    (global-set-key "\C-b" 'search-backward-with-char)
    (global-set-key (kbd "C-;") 'search-repeat-with-char)
    (global-set-key "\M-s" 'query-replace-regexp)

    (defun kill-word-at-point ()
    (interactive)
    (let ((char (char-to-string (char-after (point)))))
    (cond
    ((string= " " char) (delete-horizontal-space))
    ((string-match "[\t\n -@\[-`{-~]" char) (kill-word 1))
    (t (forward-char) (backward-word) (kill-word 1)))))

    (global-set-key "\M-d" 'kill-word-at-point)
    (global-set-key "\M-/" 'expand-abbrev)

    ;;====================
    ;; Move Cursor
    ;;====================
    (global-set-key "\C-h" 'backward-char)
    (global-set-key "\C-j" 'next-line)
    (global-set-key "\C-k" 'previous-line)
    (global-set-key "\C-l" 'forward-char)
    (global-set-key "\C-n" 'newline-and-indent)
    (global-set-key "\C-o" 'kill-line)
    (global-set-key (kbd "C-'") 'recenter)

    ;;====================
    ;; View-mode
    ;;====================
    (setq view-read-only t)
    (defvar pager-keybind
    `( ;; vi-like
    ("h" . backward-word)
    ("l" . forward-word)
    ("j" . next-line)
    ("k" . previous-line)
    ("b" . scroll-down)
    (" " . scroll-up)
    ))
    (defun define-many-keys (keymap key-table &optional includes)
    (let (key cmd)
    (dolist (key-cmd key-table)
    (setq key (car key-cmd)
    cmd (cdr key-cmd))
    (if (or (not includes) (member key includes))
    (define-key keymap key cmd))))
    keymap)
    (add-hook-fn 'view-mode-hook (define-many-keys view-mode-map pager-keybind))

    ;; 書き込み不能なファイルはview-modeで開くように
    (defadvice find-file
    (around find-file-switch-to-view-file (file &optional wild) activate)
    (if (and (not (file-writable-p file))
    (not (file-directory-p file)))
    (view-file file)
    ad-do-it))
    ;; 書き込み不能な場合はview-modeを抜けないように
    (defvar view-mode-force-exit nil)
    (defmacro do-not-exit-view-mode-unless-writable-advice (f)
    `(defadvice ,f (around do-not-exit-view-mode-unless-writable activate)
    (if (and (buffer-file-name)
    (not view-mode-force-exit)
    (not (file-writable-p (buffer-file-name))))
    (message "File is unwritable, so stay in view-mode.")
    ad-do-it)))

    (do-not-exit-view-mode-unless-writable-advice view-mode-exit)
    (do-not-exit-view-mode-unless-writable-advice view-mode-disable)
    (req key-chord
    (setq key-chord-two-keys-delay 0.04)
    (key-chord-mode 1)
    (key-chord-define-global "jk" 'view-mode))

    ;;====================
    ;; Window
    ;;====================
    (global-set-key-fn (kbd "C-M-h") (move-to-window-line 0))
    (global-set-key-fn (kbd "C-M-m") (move-to-window-line nil))
    (global-set-key-fn (kbd "C-M-l") (move-to-window-line -1))

    ;; 分割したウィンドウ間を移動
    (define-prefix-command 'windmove-map)
    (global-set-key (kbd "C-q") 'windmove-map)
    (define-key windmove-map "h" 'windmove-left)
    (define-key windmove-map "j" 'windmove-down)
    (define-key windmove-map "k" 'windmove-up)
    (define-key windmove-map "l" 'windmove-right)
    (define-key windmove-map "0" 'delete-window)
    (define-key windmove-map "1" 'delete-other-windows)
    (define-key windmove-map "2" 'split-window-vertically)
    (define-key windmove-map "3" 'split-window-horizontally)

    ;; windowを分割・削除したときに幅をあわせる+別のwindowに移動
    ;(defadvice-many (split-window-vertically
    ; split-window-horizontally
    ; delete-window) after
    ; (balance-windows)
    ; (other-window 1))
    (defun split-window-conditional ()
    (interactive)
    (if (> (* (window-height) 2) (window-width))
    (split-window-vertically)
    (split-window-horizontally)))
    (define-key windmove-map "s" 'split-window-conditional)
    (define-key windmove-map "n" (lambda () (interactive) (split-window-conditional) (switch-to-buffer "*scratch*")))

    ;;====================
    ;; Utilities
    ;;====================
    ;; hs-minor-mode
    (req hideshow
    (loop for (k . v) in my-fav-modes
    do (add-hook (intern (concat (symbol-name k) "-hook"))
    (lambda ()
    (and (hs-minor-mode) (hs-hide-all)))))
    (global-set-key (kbd "C-=") 'hs-toggle-hiding)
    (global-set-key (kbd "C-\\") 'hs-hide-level))

    ;; remember
    (global-set-key "\C-cr" 'remember)
    (setq org-default-notes-file "~/Dropbox/memo.markdown")
    (global-set-key-fn "\C-cv" (find-file org-default-notes-file))

    ;; Don't type twice
    ;(req dont-type-twice
    ; (global-dont-type-twice t)
    ; (setq dt2-notify-func 'dt2-growl)
    ; (add-to-list 'dt2-modes 'markdown-mode))

    ;; grep
    (setq grep-command "ack --nogroup ")

    ;; undo-tree
    (req undo-tree
    (global-undo-tree-mode))

    ;; auto-complete
    ;; 補完候補を自動ポップアップ
    (req auto-complete
    (global-auto-complete-mode t)
    (append-to-list ac-modes (mapcar 'car my-fav-modes)))

    ;; yasnippet
    (req yasnippet
    (req anything-c-yasnippet
    (setq anything-c-yas-space-match-any-greedy t)
    (global-set-key (kbd "C-c i") 'anything-c-yas-create-snippet-on-region))
    (yas/initialize)
    (yas/load-directory "~/Dropbox/home/.emacs.d/elisp/yasnippet/snippets/")
    (req auto-complete-yasnippet
    (add-to-list 'ac-sources 'ac-source-yasnippet))

    ;; 使い捨て
    (defvar yas/oneshot-snippet nil)
    (defun yas/register-oneshot-snippet (s e)
    (interactive "r")
    (setq yas/oneshot-snippet (buffer-substring-no-properties s e))
    (delete-region s e)
    (yas/expand-oneshot-snippet)
    (message "%s" (substitute-command-keys "Press \\[yas/expand-oneshot-snippet] to expand.")))

    (defun yas/expand-oneshot-snippet ()
    (interactive)
    (if (string< "0.6" yas/version)
    (yas/expand-snippet yas/oneshot-snippet)
    (yas/expand-snippet (point) (point) yas/oneshot-snippet)))

    (global-set-key (kbd "C-x C-y") 'yas/register-oneshot-snippet)
    (global-set-key (kbd "C-x y") 'yas/expand-oneshot-snippet))


    (defvar growl-program "/usr/local/bin/growlnotify")

    (defmacro growl (title message &optional id stickyp)
    (let ((args `("growl" "*growl*" ,growl-program
    ,title "-w")))
    (or (null id)
    (setq args (append args `("-d" ,id))))
    (or (null stickyp)
    (setq args (append args `("-s"))))
    `(progn
    (start-process ,@args)
    (process-send-string "*growl*" (concat ,message "\n"))
    (process-send-eof "*growl*"))))

    ;; uniquify
    (req uniquify
    (setq uniquify-buffer-name-style 'post-forward-angle-brackets))

    ;; tramp
    (lazyload (tramp) "tramp"
    (setq tramp-default-method "sshx"))

    ;; Emacs Lispの保存時にbyte compile
    (req 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))

    ;; 同じコマンドを連続実行したときの振る舞いを変更
    (req sequential-command-config
    (sequential-command-setup-keys))

    ;; 最近使ったファイルを開く
    (req recentf-ext
    (setq recentf-max-saved-items 500)
    (setq recentf-exclude '("/TAGS$" "/var/tmp/"))
    (global-set-key (kbd "M-r") 'anything-for-files))

    ;; カーソル位置を戻す
    (req point-undo
    (global-set-key (kbd "C-p") 'point-undo)
    (global-set-key (kbd "C-0") 'point-redo))

    ;; カーソル位置に目に見える印をつける
    (req bm
    (setq-default bm-buffer-persistence nil)
    (setq bm-restore-repository-on-load t)
    (add-hook 'find-file-hooks 'bm-buffer-restore)
    (add-hook 'kill-buffer-hook 'bm-buffer-save)
    (add-hook 'after-save-hook 'bm-buffer-save)
    (add-hook 'after-revert-hook 'bm-buffer-restore)
    (add-hook 'vc-before-checkin-hook 'bm-buffer-save)
    (global-set-key (kbd "M-p") 'bm-toggle)
    (global-set-key (kbd "M-[") 'bm-previous)
    (global-set-key (kbd "M-]") 'bm-next))

    ; 翻訳
    (lazyload (text-translator-all-by-auto-selection) "text-translator"
    (setq text-translator-auto-selection-func
    'text-translator-translate-by-auto-selection-enja)
    (defalias 'translate 'text-translator-all-by-auto-selection))

    ;; redmine
    (lazyload (redmine-show-issues-all
    redmine-show-activity
    redmine-show-revisions
    redmine-select-project) "redmine"
    (load "redmine-conf" t))

    ;; smart-compile+
    (global-set-key "\C-x\C-x" 'smart-compile)
    (lazyload (smart-compile) "smart-compile+"
    (append-to-list smart-compile-alist
    '(("\\.cl$" . "sbcl --noinform %f")
    ("\\.scm$" . "gosh %f")
    ("\\.clj$" . "clj %f")
    ("\\.pir$" . "parrot %f")
    ("\\.\(pl\|pm\)$" . "perl %f"))))

    ;; auto-install
    ;; elispのインストールを簡単に
    (lazyload (auto-install-from-url
    auto-install-from-emacswiki
    auto-install-from-dired
    auto-install-from-directory
    auto-install-from-buffer
    auto-install-from-gist
    auto-install-batch) "auto-install"
    (setq auto-install-directory "~/Dropbox/home/.emacs.d/elisp/"))

    ;; 終了してもカーソル位置を記録
    (req session
    (add-hook 'after-init-hook 'session-initialize)
    (setq session-initialize '(de-saveplace session keys menus places)
    session-globals-include '((kill-ring 50)
    (session-file-alist 500 t)
    (file-name-history 10000))
    session-globals-max-string 100000000
    history-length t
    session-undo-check -1))

    ;; redo
    (req redo+
    (global-set-key "\C-]" 'redo))

    ;; outputz
    (req outputz
    (setq outputz-uri "http://%s/emacs.%s")
    (global-outputz-mode t)
    (append-to-list outputz-modes (mapcar 'car my-fav-modes))

    (defadvice outputz (before outputz-setup-uri)
    (when (get-ip-address "en1")
    (set-proxy)
    (setq outputz-uri
    (format outputz-uri
    (replace-regexp-in-string "-mode$" "" (symbol-name major-mode))
    (system-name)))))
    (ad-activate-regexp "outputz-setup-uri")
    (load "outputz-conf" t))

    ;; anything
    (req anything-startup
    ;; kill-ring一覧を表示
    ; (global-set-key "\M-y" 'anything-show-kill-ring)
    (define-key anything-map "\C-j" 'anything-next-line)
    (define-key anything-map "\C-k" 'anything-previous-line)
    (define-key anything-map "\M-j" 'anything-next-page)
    (define-key anything-map "\M-k" 'anything-previous-page))

    ;; popup-kill-ring
    (lazyload (popup-kill-ring) "popup-kill-ring"
    (require 'popup)
    (require 'pos-tip)
    (setq popup-kill-ring-interactive-insert t)
    (define-key popup-kill-ring-keymap "\C-j" 'popup-kill-ring-next)
    (define-key popup-kill-ring-keymap "\C-k" 'popup-kill-ring-previous)
    (define-key popup-kill-ring-keymap "\C-l" 'popup-kill-ring-current)
    (define-key popup-kill-ring-keymap "\C-h" 'popup-kill-ring-hide))
    (global-set-key "\M-y" 'popup-kill-ring)

    ;; cua-mode
    ;; 矩形選択を簡単に
    (cua-mode t)
    (setq cua-enable-cua-keys nil)

    ;; auto-insert
    ;; ファイル形式に応じて自動でテンプレート挿入
    (add-hook 'find-file-hooks 'auto-insert)
    (setq auto-insert-directory "~/Dropbox/home/.emacs.d/templates"
    auto-insert-alist
    '((perl-mode . "perl-template.pl")
    (html-mode . "html-template.html")
    ("base\\.css" . "base.css")
    (css-mode . "css-template.css")
    (".*\\.class\\.php$" . ["php-class-template.php" my-template])))

    (defvar template-replacements-alists
    '(("%file%" . (lambda () (file-name-nondirectory (buffer-file-name))))
    ("%file-without-ext%" . (lambda () (file-name-sans-extension (file-name-nondirectory (buffer-file-name)))))
    ("%name%" . user-full-name)
    ("%mail%" . user-mail-address)
    ("%directory-name%" . (lambda () (file-name-parent-directory (buffer-file-name))))))

    (defun my-template ()
    (time-stamp)
    (mapc (lambda (c)
    (progn
    (goto-char (point-min))
    (while (re-search-forward (car c) nil t)
    (replace-match (funcall (cdr c))))))
    template-replacements-alists)
    (goto-char (point-max))
    (message "done."))

    ;; shell-pop
    ;; C-tでshellをポップアップ
    (lazyload (shell-pop) "shell-pop"
    (shell-pop-set-internal-mode "ansi-term")
    (shell-pop-set-internal-mode-shell "/bin/zsh")
    (shell-pop-set-window-height 50)
    (defvar ansi-term-after-hook nil)
    (add-hook-fn 'term-mode-hook
    (define-key term-raw-map "\C-t" 'shell-pop)
    (define-key term-raw-map "\C-y" 'term-paste)
    (define-key term-raw-map "\M-x" nil)
    (define-key term-raw-map (kbd "C-,") 'term-line-mode)
    (define-key term-mode-map (kbd "C-,")
    (lambda () (interactive)
    (term-char-mode)
    (end-of-buffer)
    (previous-line)))
    (define-key term-raw-map "\C-q" nil)
    (define-key term-raw-map "\C-z" nil))
    (defadvice ansi-term (after ansi-term-after-advice (org))
    "run hook as after advice"
    (run-hooks 'ansi-term-after-hook))
    (ad-activate 'ansi-term))
    (global-set-key (kbd "C-t") 'shell-pop)

    ;; SQL
    (setq sql-user "fukamachi")
    (setq sql-server "localhost")

    ;; ElScreen
    ;; EmacsでGNU screen風のインターフェイスを使う
    (req elscreen
    (setq elscreen-prefix-key "\C-z"
    elscreen-display-tab nil)
    (defun elscreen-frame-title-update ()
    (when (elscreen-screen-modified-p 'elscreen-frame-title-update)
    (let* ((screen-list (sort (elscreen-get-screen-list) '<))
    (screen-to-name-alist (elscreen-get-screen-to-name-alist))
    (title (mapconcat
    (lambda (screen)
    (format "%d%s %s"
    screen (elscreen-status-label screen)
    (get-alist screen screen-to-name-alist)))
    screen-list " ")))
    (if (fboundp 'set-frame-name)
    (set-frame-name title)
    (setq frame-title-format title)))))
    (add-hook 'elscreen-screen-update-hook 'elscreen-frame-title-update))

    ;; global
    ;; 関数定義に飛ぶ (gtags)
    (lazyload (gtags-mode) "gtags"
    (local-set-key "\C-cf" 'gtags-find-tag)
    (local-set-key "\M-r" 'gtags-find-rtag)
    (local-set-key "\M-s" 'gtags-find-symbol)
    (local-set-key "\C-cp" 'gtags-pop-stack))
    (add-hook-fn 'c-mode-common-hook
    (gtags-mode t)
    (eval-after-load "gtags-mode" '(gtags-make-complete-list)))

    ;; w3m
    (lazyload (w3m w3m-browse-url w3m-find-file w3m-search) "w3m"
    (setq w3m-use-cookies t
    w3m-default-display-inline-images t
    w3m-quick-start nil
    w3m-home-page "http://www.google.com/"))
    ;(setq browse-url-browser-function 'w3m-browse-url)

    ;; wdired
    (add-hook-fn 'dired-mode-hook
    (req wdired
    (define-key dired-mode-map "r" 'wdired-change-to-wdired-mode)))

    ;; M-x occurで検索結果を一覧
    (lazyload (occur moccur moccur-grep moccur-grep-find) "color-moccur"
    (setq moccur-split-word t))

    ;; migemo
    (req migemo
    (load "migemo-conf" t)
    (when (linuxp)
    (setq migemo-dictionary "/usr/share/migemo/migemo-dict"))
    (setq moccur-use-migemo t))

    ;; anything-c-moccur
    (lazyload (anything-c-moccur-occur-by-moccur
    anything-c-moccur-dmoccur
    anything-c-moccur-dired-do-moccur-by-moccur) "anything-c-moccur"
    (setq anything-c-moccur-anything-idle-delay 0.2 ;`anything-idle-delay'
    anything-c-moccur-higligt-info-line-flag t ; `anything-c-moccur-dmoccur'などのコマンドでバッファ情報をハイライト
    anything-c-moccur-enable-auto-look-flag t ; 現在選択中の候補の位置を他のwindowに表示
    anything-c-moccur-enable-initial-pattern t)) ; `anything-c-moccur-occur-by-moccur'の起動時にポイントの位置の単語を初期パターンにする

    (global-set-key (kbd "M-o") 'anything-c-moccur-occur-by-moccur) ;バッファ内検索
    (global-set-key (kbd "C-M-o") 'anything-c-moccur-dmoccur) ;ディレクトリ
    (add-hook-fn 'dired-mode-hook ;dired
    (local-set-key (kbd "O") 'anything-c-moccur-dired-do-moccur-by-moccur))

    ;; twittering-mode
    (lazyload (twit twittering-update-status-interactive) "twittering-mode"
    (setq twittering-username "nitro_idiot")
    (setq twittering-auth-method 'xauth)
    (setq twittering-retweet-format " RT @%s: %t")
    (setq twittering-timer-interval nil)
    (load "twittering-conf" t))

    ;; emacs-jabber
    (lazyload (jabber-connect) "jabber"
    (load "jabber-conf" t)
    (setq jabber-message-alert-same-buffer nil)
    (defun pg-jabber-growl-notify (from buf text proposed-alert)
    "(jabber.el hook) Notify of new Jabber chat messages via Growl"
    (when (or jabber-message-alert-same-buffer
    (not (memq (selected-window) (get-buffer-window-list buf))))
    (if (jabber-muc-sender-p from)
    (growl (format "(PM) %s"
    (jabber-jid-displayname (jabber-jid-user from)))
    (format "%s: %s" (jabber-jid-resource from) text)
    (format "jabber-from-%s" (jabber-jid-resource from)))
    (growl (format "%s" (jabber-jid-displayname from))
    text "jabber-from-unknown"))))
    (add-hook 'jabber-alert-message-hooks 'pg-jabber-growl-notify)

    ;; Same as above, for groupchats
    (defun pg-jabber-muc-growl-notify (nick group buf text proposed-alert)
    "(jabber.el hook) Notify of new Jabber MUC messages via Growl"
    (when (or jabber-message-alert-same-buffer
    (not (memq (selected-window) (get-buffer-window-list buf))))
    (if nick
    (when (or jabber-muc-alert-self
    (not (string=
    nick (cdr (assoc group *jabber-active-groupchats*)))))
    (growl (format "%s" (jabber-jid-displayname group))
    (format "%s: %s" nick text)
    (format "jabber-chat-%s" (jabber-jid-displayname group))))
    (growl (format "%s" (jabber-jid-displayname group))
    text "jabber-chat-unknown"))))
    (add-hook 'jabber-alert-muc-hooks 'pg-jabber-muc-growl-notify))

    ;; erc
    (lazyload (erc) "erc"
    (setq erc-server "irc.tokyo.wide.ad.jp"
    erc-nick-uniquifier "_"
    erc-port "6667"
    erc-prompt-for-password nil
    erc-server-coding-system '(iso-2022-jp . iso-2022-jp))
    (load "erc-conf" t))

    ;;====================
    ;; Visual
    ;;====================
    ;; color-themeの設定
    (req color-theme
    (and (functionp 'color-theme-initialize) (color-theme-initialize))
    (color-theme-arjen))

    ;; キーワードのカラー表示を有効化
    (global-font-lock-mode t)

    ;; 選択範囲をハイライト
    (setq-default transient-mark-mode t)

    ;; バッファ一覧を詳細に
    (global-set-key "\C-x\C-b" 'bs-show)

    ;; 対応するカッコをハイライト
    (show-paren-mode t)

    ;; 全角空白、Tab、改行表示
    (req jaspace
    (setq jaspace-alternate-jaspace-string ""
    jaspace-alternate-eol-string "\n"
    jaspace-highlight-tabs t)
    (append-to-list jaspace-modes (mapcar 'car my-fav-modes)))
    (loop for m in (mapcar 'car my-fav-modes)
    do (progn
    (add-hook-fn (intern (concat (symbol-name m) "-hook"))
    (setq show-trailing-whitespace t))
    (add-hook-fn 'jaspace-mode-hook
    (assq-delete-all 'jaspace-mode minor-mode-alist))))
    (add-hook 'before-save-hook 'delete-trailing-whitespace)

    ;; カーソル行をハイライト
    (defface hlline-face
    '((((class color)
    (background dark))
    (:background "dark slate gray"))
    (((class color)
    (background light))
    (:background "ForestGreen"))
    (t
    ()))
    nil :group 'font-lock-highlighting-faces)
    (setq hl-line-face 'hlline-face)
    (global-hl-line-mode)

    ;; 表示不要なマイナーモードを削除
    (loop for m in '(outputz undo-tree auto-complete jaspace)
    do (assq-delete-all (intern (concat (symbol-name m) "-mode")) minor-mode-alist))

    ;; モード行に行番号、桁番号を表示
    (line-number-mode t)
    (column-number-mode t)

    ;; モード行に時刻を表示
    (setq display-time-string-forms '(24-hours ":" minutes))
    (display-time)

    ;; モード行にバッテリ残量を表示
    (display-battery-mode t)

    ;; 改行コードを表示
    (setq eol-mnemonic-dos "(CRLF)"
    eol-mnemonic-mac "(CR)"
    eol-mnemonic-unix "(LF)")

    ;;====================
    ;; Window System
    ;;====================
    (when window-system
    (server-start) ;; Emacs serverを起動
    (set-frame-parameter nil 'alpha 85) ;; フレームを透過
    (menu-bar-mode 0) ;; メニューバーを消す
    (tool-bar-mode 0) ;; ツールバーを消す
    (toggle-scroll-bar nil)) ;; スクロールバーを消す

    ;;====================
    ;; Syntax
    ;;====================
    ;; Clojure
    (lazyload (clojure-mode) "clojure-mode"
    (setenv "CLOJURE_EXT" (concat (getenv "HOME") "/.clojure"))
    (setq clojure-src-root (expand-file-name "~/.clojure")))
    ;(req swank-clojure
    ; (add-hook 'slime-mode-hook
    ; (lambda ()
    ; (setq slime-truncate-lines nil)
    ; (slime-redirect-inferior-output)))
    ; (add-to-list 'slime-lisp-implementations
    ; `(clojure ,(swank-clojure-cmd) :init swank-clojure-init))
    ; (add-to-list 'swank-clojure-classpath (concat (getenv "HOME") "/Dropbox/home/.emacs.d/elisp/swank-clojure/src"))
    ; (add-hook 'slime-repl-mode-hook 'clojure-mode-font-lock-setup))

    ;; Gauche
    (lazyload (scheme-mode run-scheme) "cmuscheme"
    (add-to-list 'process-coding-system-alist '("gosh" utf-8 . utf-8))
    (setq scheme-program-name "gosh -i"))

    ;; Common lisp
    (req cl-indent-patches)
    (req slime
    (setq inferior-lisp-program "~/Dropbox/home/bin/ccl")
    (add-hook 'slime-connected-hook
    (lambda ()
    (define-key slime-repl-mode-map (kbd "C-n") 'slime-repl-newline-and-indent)
    (define-key slime-repl-mode-map (kbd "C-j") 'next-line)))
    (slime-setup '(slime-repl slime-fancy slime-banner)))

    (setf anything-c-source-hyperspec
    `((name . "Lookup Hyperspec")
    (candidates . (lambda ()
    (let ((symbols nil))
    (mapatoms #'(lambda (sym) (push (symbol-name sym) symbols))
    common-lisp-hyperspec-symbols)
    symbols)))
    (action . (("Show Hyperspec" . hyperspec-lookup)))))
    (add-to-list 'anything-sources anything-c-source-hyperspec)

    ;; Parrot
    (lazyload (pir-mode) "pir-mode"
    (define-key pir-mode-map "\C-j" 'next-line))

    ;; CPerl
    (defalias 'perl-mode 'cperl-mode)
    (lazyload (cperl-mode) "cperl-mode"
    (req perltidy
    (defvar cperl-auto-tidy t)
    (defun cperl-save-buffer (&optional args)
    "Perltidy and save current buffer in visited file if modified."
    (interactive)
    (if (and (buffer-modified-p)
    cperl-auto-tidy)
    (perltidy-buffer))
    (save-buffer))
    (define-key cperl-mode-map "\C-x\C-s" 'cperl-save-buffer))
    (setq cperl-continued-statement-offset 4
    cperl-indent-level 4
    cperl-tab-always-indent t)
    (define-key cperl-mode-map "\C-j" 'next-line))

    ;; php-mode
    (lazyload (php-mode) "php-mode")
    (add-hook-fn 'php-mode-hook
    (setq tab-width 2)
    (c-set-offset 'substatement-open 0)
    (c-set-offset 'block-open '+)
    (c-set-offset 'case-label 1)
    (c-set-offset 'statement-case-open 0)
    (c-set-offset 'arglist-intro '+)
    (c-set-offset 'arglist-close 0))

    ;; ruby
    (add-to-list 'interpreter-mode-alist '("ruby" . ruby-mode))
    (lazyload (run-ruby inf-ruby-keys) "inf-ruby"
    (add-hook-fn 'ruby-mode-hook (inf-ruby-keys)))

    (lazyload (ruby-electric-mode) "ruby-electric")
    (lazyload (ruby-block-mode) "ruby-block"
    (setq ruby-block-highlight-toggle t))
    (add-hook-fn 'ruby-mode-hook (ruby-electric-mode t) (ruby-block-mode t))

    (lazyload (rubydb) "rubydb3x")

    ;; js2-mode
    (lazyload (js2-mode) "js2"
    (setq js2-basic-offset 2
    js2-mirror-mode nil)
    (req espresso
    (setq espresso-indent-level 2
    espresso-expr-indent-offset 2
    indent-tabs-mode nil)
    (defun my-js-indent-line ()
    (interactive)
    (let* ((parse-status (save-excursion (syntax-ppss (point-at-bol))))
    (offset (- (current-column) (current-indentation)))
    (indentation (espresso--proper-indentation parse-status)))
    (back-to-indentation)
    (if (looking-at "case\\s-")
    (indent-line-to (+ indentation 2))
    (espresso-indent-line))
    (when (> offset 0) (forward-char offset))))
    (add-hook-fn 'js2-mode-hook
    (set (make-local-variable 'indent-line-function) 'my-js-indent-line))))

    ;; yaml-mode
    (lazyload (yaml-mode) "yaml-mode")

    ;; css-mode
    (lazyload (css-mode) "css-mode"
    (setq cssm-indent-function 'cssm-c-style-indenter))

    ;; mmm-mode
    ;(req mmm-auto
    ; (setq mmm-global-mode 'maybe)
    ; (mmm-add-classes
    ; '((embedded-css
    ; :submode css-mode
    ; :front "<style[^>] *>"
    ; :back "<style>")))
    ; (mmm-add-mode-ext-class nil "\\.html\\'" 'embedded-css))

    ;; AUCTeX
    (lazyload (japanese-latex-mode) "tex-site"
    (setq TeX-default-mode 'japanese-latex-mode)
    (setq japanese-LaTeX-command-default "platex")
    (setq japanese-LaTeX-default-style "jarticle")
    (setq kinsoku-limit 10)
    (setq LaTeX-indent-level 4)
    (setq LaTeX-item-indent 2)
    (setq TeX-output-view-style '(("^dvi$" "." "pxdvi '%d'")))
    (setq preview-image-type 'dvipng))
    (add-hook-fn 'LaTeX-mode-hook
    (require 'tex-jp)
    (add-to-list 'TeX-command-list
    '("ptex" "%(PDF)ptex %`%S%(PDFout)%(mode)%' %t"
    TeX-run-TeX nil (plain-tex-mode) :help "Run ASCII pTeX"))
    (add-to-list 'TeX-command-list
    '("platex" "%(PDF)platex %`%S%(PDFout)%(mode)%' %t"
    TeX-run-TeX nil (latex-mode) :help "Run ASCII pLaTeX"))
    (add-to-list 'TeX-command-list
    '("pdfview" "okular '%s.pdf' " TeX-run-command t nil))
    (add-to-list 'TeX-command-list
    '("pdfbuild" "dvipdfmx -V 4 '%s' " TeX-run-command t nil)))

    ;; nxml-mode
    (setq nxml-slash-auto-complete-flag t)

    ;; git commit
    (add-hook-fn 'server-visit-hook
    (if (string-match "COMMIT_EDITMSG" buffer-file-name)
    (set-buffer-file-coding-system 'utf-8)))

    (req git-status)
    (req hg-status)

    (lazyload (markdown-mode) "markdown-mode")

    (add-hook 'markdown-mode-hook #'(lambda ()
    (req word-count (word-count-mode-on))
    (setq show-trailing-whitespace nil)))

    ;;====================
    ;; Syntax Checking
    ;;====================
    ;; flymake
    (defadvice flymake-post-syntax-check (before flymake-force-check-was-interrupted)
    (setq flymake-check-was-interrupted t))
    (ad-activate 'flymake-post-syntax-check)

    (defmacro def-flymake-init (name masks exec error)
    (let ((init-name (intern (format "flymake-%s-init" name))))
    `(eval-after-load "flymake"
    (when (not (fboundp ',init-name))
    ,(unless (null masks)
    `(setq flymake-allowed-file-name-masks
    (append flymake-allowed-file-name-masks
    ',(mapc (lambda (x) (list x init-name)) masks))))
    (defun ,init-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))))
    ,exec))
    ,(unless (null error)
    `(setq flymake-err-line-patterns
    (cons ',error flymake-err-line-patterns)))))
    `(add-hook-fn (intern (format "%s-mode-hook" ',name)) (flymake-mode t))))

    (lazyload (flymake-mode) "flymake"
    (global-set-key "\C-cd" 'flymake-display-err-menu-for-current-line))

    ;; Perl
    (def-flymake-init perl ("\.p[lm]$")
    `("perl" ("-wc" ,local-file))
    ("\(.*\) at \([^ \n]+\) line \([0-9]+\)[,.\n]" 2 3 nil 1))
    (add-hook-fn 'cperl-mode-hook (flymake-mode t))

    ;; JavaScript
    (def-flymake-init js2 ("\.js$")
    `("jsl" ("-process" ,local-file))
    ("\(.+\)(\([0-9]+\)): \(?:lint \)?\(\(?:Warning\|SyntaxError\):.+\)" 1 2 nil 3))

    ;; PHP
    (def-flymake-init php ("\.php[345]?$")
    `("php" ("-f" ,local-file "-l"))
    ("\(\(?:Parse error\|Fatal error\|Warning\): .*\) in \(.*\) on line \([0-9]+\)" 2 3 nil 1))

    ;; Ruby
    (def-flymake-init ruby ()
    `("ruby" ("-c" ,local-file)) nil)

    ;;====================
    ;; Network
    ;;====================
    (defun get-ip-address (dev)
    (format-network-address (car (network-interface-info dev)) t))

    (defun mac-network-location ()
    (substring
    (shell-command-to-string "scselect 2>&1 | grep '^ ' 2>&1 | grep '*' | cut -f 2 -d '(' | cut -f 1 -d ')'")
    0 -1))

    (defun officep ()
    (let ((ip (get-ip-address "en1")))
    (and (not (null ip)) (eq 0 (string-match "^10\\.0\\.100\\." ip)))))

    (defun set-proxy ()
    (if (officep)
    (progn
    ;; 会社にいるときはプロキシを設定
    (let ((protocol "http")
    (domain "192.168.0.230")
    (port "3128"))
    (setq url-proxy-services
    `((,protocol . ,(concat domain ":" port))))
    (setq w3m-command-arguments-alist
    `(("" "-o" ,(format "http_proxy=%s://%s:%s" protocol domain port))))
    (eval-after-load 'twittering-mode
    `(setq twittering-proxy-use t
    twittering-proxy-server ,(concat protocol "://" domain)
    twittering-proxy-port ,port)))
    t)
    (progn
    (setq url-proxy-services nil)
    (setq w3m-command-arguments-alist nil)
    (eval-after-load 'twittering-mode
    `(setq twittering-proxy-use nil
    twittering-proxy-server nil
    twittering-proxy-port nil)))))

    (set-proxy)
  2. fukamachi revised this gist May 25, 2010. 1 changed file with 273 additions and 132 deletions.
    405 changes: 273 additions & 132 deletions .emacs.el
    Original file line number Diff line number Diff line change
    @@ -1,9 +1,24 @@
    (setenv "CLOJURE_EXT" (concat (getenv "HOME") "/.clojure"))
    ;;====================
    ;; Network
    ;;====================
    (defun get-ip-address (&optional dev)
    (let ((dev (or dev "eth0")))
    (format-network-address (car (network-interface-info dev)) t)))

    (defun mac-network-location ()
    (substring
    (shell-command-to-string "scselect 2>&1 | grep '^ ' 2>&1 | grep '*' | cut -f 2 -d '(' | cut -f 1 -d ')'")
    0 -1))

    ;;====================
    ;; Functions
    ;;====================
    (eval-when-compile (require 'cl))

    (defun file-name-parent-directory (file-name)
    (let ((idx (string-match "[^/]+/$" (file-name-directory file-name))))
    (substring (file-name-directory (buffer-file-name)) idx -1)))

    (defmacro add-hook-fn (name &rest body)
    `(add-hook ,name #'(lambda () ,@body)))

    @@ -24,89 +39,68 @@
    (defmacro global-set-key-fn (key args &rest body)
    `(global-set-key ,key (lambda ,args ,@body)))

    (defmacro defadvice-many (fn-lst class &rest body)
    `(progn
    ,@(mapcar
    (lambda (fn)
    `(defadvice ,fn (,class ,(intern (concat (symbol-name fn) "-" (symbol-name class) "-advice")) activate)
    ,@body)) fn-lst)))

    ;;====================
    ;; General
    ;;====================
    ;; load-pathを追加
    (append-to-list load-path '("~/.emacs.d/"
    "~/.emacs.d/elisp"
    "~/.emacs.d/elisp/emacs-jabber"
    "~/.emacs.d/elisp/clojure-mode"
    "~/.clojure/swank-clojure"))
    (loop for f in (directory-files "~/.emacs.d" t)
    when (and (file-directory-p f)
    (not (eq (file-name-nondirectory f) "..")))
    do (add-to-list 'load-path f))

    ;; exec-path
    (add-to-list 'exec-path "/usr/local/bin")

    (append-to-list exec-path
    '("/usr/bin" "/bin"
    "/usr/sbin" "/sbin" "/usr/local/bin"
    "/usr/X11/bin"))
    ;; 自分の情報
    (setq user-full-name "深町英太郎 (E.Fukamachi)"
    user-mail-address "e.arrows@gmail.com")

    ;; テキストエンコーディングとしてUTF-8を優先使用
    (prefer-coding-system 'utf-8)

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

    ;; zshを使う
    (setq shell-file-name "/bin/zsh")

    ;; Tabの代わりにスペースでインデント
    (setq-default tab-width 2
    indent-tabs-mode nil)

    ;; shell-modeでpasswordを隠す
    (add-hook 'comint-output-filter-functions 'comint-watch-for-password-prompt)

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

    ;; "yes or no"を"y or n"に
    (fset 'yes-or-no-p 'y-or-n-p)

    ;; minibufferでC-wで前の単語を削除
    (define-key minibuffer-local-completion-map "\C-w" 'backward-kill-word)
    (define-key minibuffer-local-completion-map (kbd "C-w") 'backward-kill-word)

    ;; 改行コードを表示
    (setq eol-mnemonic-dos "(CRLF)"
    eol-mnemonic-mac "(CR)"
    eol-mnemonic-unix "(LF)")
    ;; 範囲指定していないとき、C-wで前の単語を削除
    (defadvice kill-region (around kill-word-or-kill-region activate)
    (if (and (interactive-p) transient-mark-mode (not mark-active))
    (backward-kill-word 1)
    ad-do-it))

    ;; 終了時に自動でプロセスをkill
    (setq process-kill-without-query t)

    ;; クリップボードにコピー
    (setq x-select-enable-clipboard t)

    ;; 1行ずつスクロール
    (setq scroll-conservatively 35
    scroll-margin 0
    scroll-step 1)
    (setq comint-scroll-show-maximum-output t) ;; for shell-mode

    ;; *scratch*を消さない
    (defun my-make-scratch (&optional arg)
    ;; "*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-fn 'kill-buffer-query-functions
    ;; *scratch* バッファで kill-buffer したら内容を消去するだけにする
    (if (string= "*scratch*" (buffer-name))
    (progn (my-make-scratch 0) nil)
    t))

    (add-hook-fn 'after-save-hook
    ;; *scratch* バッファの内容を保存したら *scratch* バッファを新しく作る
    (unless (member (get-buffer "*scratch*") (buffer-list))
    (my-make-scratch 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)
    (setq ring-bell-function 'ignore)

    ;; .emacs.elの保存時にbyte compile
    (add-hook-fn 'after-save-hook
    @@ -115,13 +109,6 @@
    (save-excursion
    (byte-compile-file "~/.emacs.el"))))

    ;; kill-ring一覧を表示
    (global-set-key-fn (kbd "M-y") nil (interactive) (anything-show-kill-ring))

    ;; モード行に時刻を表示
    (setq display-time-string-forms '(month "/" day " " dayname " " 24-hours ":" minutes))
    (display-time)

    ;;; for Mac
    ;; Command-Key and Option-Key
    (setq ns-command-modifier 'meta)
    @@ -134,53 +121,127 @@
    (set-frame-parameter nil 'fullscreen nil)
    (set-frame-parameter nil 'fullscreen 'fullboth)))
    (global-set-key (kbd "C-c m") 'toggle-fullscreen)
    (toggle-fullscreen)

    ;; よく使うモード
    (defvar my-fav-modes
    '((scheme-mode . "\\.scm$")
    (clojure-mode . "\\.clj$")
    (common-lisp-mode . "\\.cl$")
    (malabar-mode . "\\.java$")
    (php-mode . "\\.php[45]?$")
    (yaml-mode . "\\.ya?ml$")
    (js-mode . "\\.js$")
    (js2-mode . "\\.js$")
    (ruby-mode . "\\.rb$")
    (text-mode . "\\.txt$")
    (fundamental-mode . nil)
    (LaTeX-mode . "\\.tex$")
    (org-mode . "\\.org$")
    (css-mode . "\\.css$")
    (nxml-mode . "\\.\(xml\|svg\|wsdl\|xslt\|wsdd\|xsl\|rng\|xhtml\)\'")))
    (nxml-mode . "\\.\(xml\|svg\|wsdl\|xslt\|wsdd\|xsl\|rng\|xhtml\)$")
    (markdown-mode . "\\.\\(md\\|markdown\\)$")))

    ;; auto-mode-alist
    (loop for (k . v) in my-fav-modes
    do (unless (null v) (add-to-list 'auto-mode-alist (cons v k))))

    ;; 分割したウィンドウ間をShift + 矢印で移動
    (windmove-default-keybindings)
    (setq windmove-wrap-around t)
    ;; コメントアウト
    (global-set-key "\C-x;" 'comment-region)
    (global-set-key "\C-x:" 'uncomment-region)

    ;; 分割したウィンドウ間を移動
    (define-prefix-command 'windmove-map)
    (global-set-key (kbd "C-q") 'windmove-map)
    (define-key windmove-map "h" 'windmove-left)
    (define-key windmove-map "j" 'windmove-down)
    (define-key windmove-map "k" 'windmove-up)
    (define-key windmove-map "l" 'windmove-right)

    ;; windowを分割・削除したときに幅をあわせる+別のwindowに移動
    (defadvice-many (split-window-vertically
    split-window-horizontally) after
    (balance-windows)
    (other-window 1))
    (defadvice delete-window (after delete-window-after-advice activate)
    (balance-windows))

    ;; ウィンドウ内のカーソル移動
    (global-set-key-fn (kbd "C-M-h") nil (interactive) (move-to-window-line 0))
    (global-set-key-fn (kbd "C-M-m") nil (interactive) (move-to-window-line nil))
    (global-set-key-fn (kbd "C-M-l") nil (interactive) (move-to-window-line -1))

    ;; goto-lineをM-gに
    (global-set-key-fn "\M-g" (x) (interactive "nLine: ") (goto-line x))
    (global-set-key "\M-g" 'goto-line)

    ;; C-kで行が連結したときにインデントを減らす
    (defadvice kill-line (before kill-line-and-fixup activate)
    (when (and (not (bolp)) (eolp))
    (forward-char)
    (fixup-whitespace)
    (backward-char)))

    ;; C-x pで前のウィンドウへ移動(C-x oの逆)
    (global-set-key-fn "\C-xp" nil (interactive) (other-window -1))
    ;; バックアップファイルを作らない
    (setq make-backup-files nil)
    (setq auto-save-default nil)

    ;; キーボードマクロ
    (global-set-key [f5] 'call-last-kbd-macro)

    ;; 一括置換
    (global-set-key (kbd "M-s") 'query-replace-regexp)

    ;;====================
    ;; Utilities
    ;;====================
    ;; hs-minor-mode
    (req hideshow
    (loop for (k . v) in my-fav-modes
    do (add-hook (intern (concat (symbol-name k) "-hook"))
    (lambda ()
    (and (hs-minor-mode) (hs-hide-all)))))
    (global-set-key (kbd "C-=") 'hs-toggle-hiding)
    (global-set-key (kbd "C-\\") 'hs-hide-level))

    ;; undo-tree
    (req undo-tree
    (global-undo-tree-mode))

    ;; Growl
    (defvar growl-program "/usr/local/bin/growlnotify")

    (defmacro growl (title message &optional id stickyp)
    (let ((args `("growl" "*growl*" ,growl-program
    ,title "-w")))
    (or (null id)
    (setq args (append args `("-d" ,id))))
    (or (null stickyp)
    (setq args (append args `("-s"))))
    `(progn
    (start-process ,@args)
    (process-send-string "*growl*" (concat ,message "\n"))
    (process-send-eof "*growl*"))))

    ;; uniquify
    (req uniquify
    (setq uniquify-buffer-name-style 'post-forward-angle-brackets))

    ;; tramp
    (req tramp)
    (req tramp
    (setq tramp-default-method "sshx"))

    ;; redmine
    (lazyload (redmine-show-issues-all
    redmine-show-activity
    redmine-show-revisions
    redmine-select-project) "redmine"
    (load "redmine-conf"))

    ;; smart-compile+
    (global-set-key "\C-x\C-x" 'smart-compile)
    (lazyload (smart-compile) "smart-compile+"
    (append-to-list smart-compile-alist
    '(("\\.cl$" . "sbcl --noinform %f")
    ("\\.scm$" . "gosh %f")
    ("\\.clj$" . "clj %f"))))

    ;; auto-install
    ;; elispのインストールを簡単に
    @@ -192,7 +253,6 @@
    auto-install-from-gist
    auto-install-batch) "auto-install"
    (setq auto-install-directory "~/.emacs.d/elisp/")
    (auto-install-update-emacswiki-package-name t)
    (auto-install-compatibility-setup))

    ;; 終了してもカーソル位置を記録
    @@ -207,13 +267,14 @@
    session-undo-check -1))

    ;; redo
    (req redo
    (req redo+
    (global-set-key "\C-]" 'redo))

    ;; outputz
    (req outputz
    (setq outputz-uri "http://%s/emacs.%s")
    (global-outputz-mode t)
    (append-to-list outputz-modes (mapcar (lambda (m) (car m)) my-fav-modes))

    (defadvice outputz (before outputz-setup-uri)
    (setq outputz-uri
    @@ -224,7 +285,9 @@
    (load "outputz-conf"))

    ;; anything
    (req anything-startup)
    (req anything-startup
    ;; kill-ring一覧を表示
    (global-set-key "\M-y" 'anything-show-kill-ring))

    ;; cua-mode
    ;; 矩形選択を簡単に
    @@ -234,8 +297,8 @@
    ;; auto-complete
    ;; 補完候補を自動ポップアップ
    (req auto-complete
    (global-auto-complete-mode t)
    (append-to-list ac-modes '(js-mode php-mode)))
    (global-auto-complete-mode t)
    (append-to-list ac-modes '(js2-mode php-mode clojure-mode)))

    ;; auto-insert
    ;; ファイル形式に応じて自動でテンプレート挿入
    @@ -244,8 +307,27 @@
    auto-insert-alist
    '((perl-mode . "perl-template.pl")
    (html-mode . "html-template.html")
    ("base.css" . "base.css")
    (css-mode . "css-template.css")))
    ("base\\.css" . "base.css")
    (css-mode . "css-template.css")
    (".*\\.class\\.php$" . ["php-class-template.php" my-template])))

    (defvar template-replacements-alists
    '(("%file%" . (lambda () (file-name-nondirectory (buffer-file-name))))
    ("%file-without-ext%" . (lambda () (file-name-sans-extension (file-name-nondirectory (buffer-file-name)))))
    ("%name%" . user-full-name)
    ("%mail%" . user-mail-address)
    ("%directory-name%" . (lambda () (file-name-parent-directory (buffer-file-name))))))

    (defun my-template ()
    (time-stamp)
    (mapc (lambda (c)
    (progn
    (goto-char (point-min))
    (while (re-search-forward (car c) nil t)
    (replace-match (funcall (cdr c))))))
    template-replacements-alists)
    (goto-char (point-max))
    (message "done."))

    ;; shell-pop
    ;; C-tでshellをポップアップ
    @@ -254,13 +336,23 @@
    (shell-pop-set-internal-mode-shell "/bin/zsh")
    (shell-pop-set-window-height 60)
    (defvar ansi-term-after-hook nil)
    (add-hook-fn 'ansi-term-after-hook
    (define-key term-raw-map "\C-t" 'shell-pop))
    (add-hook-fn 'term-mode-hook
    (define-key term-raw-map "\C-t" 'shell-pop)
    (define-key term-raw-map "\C-y" 'term-paste)
    (define-key term-raw-map "\M-x" nil)
    (define-key term-raw-map "\C-j" 'term-line-mode)
    (define-key term-mode-map "\C-j"
    (lambda () (interactive)
    (term-char-mode)
    (end-of-buffer)
    (previous-line)))
    (define-key term-raw-map "\C-q" nil)
    (define-key term-raw-map "\C-z" nil))
    (defadvice ansi-term (after ansi-term-after-advice (org))
    "run hook as after advice"
    (run-hooks 'ansi-term-after-hook))
    (ad-activate 'ansi-term))
    (global-set-key "\C-t" 'shell-pop)
    (global-set-key (kbd "C-t") 'shell-pop)

    ;; SQL
    (setq sql-user "fukamachi")
    @@ -270,15 +362,7 @@
    ;; EmacsでGNU screen風のインターフェイスを使う
    (req elscreen
    (setq elscreen-prefix-key "\C-z")
    (if window-system
    (define-key elscreen-map "\C-z" 'iconify-or-deiconify-frame)
    (define-key elscreen-map "\C-z" 'suspend-emacs)))

    ;; dmacro
    ;; 2回同じ操作をすると自動でマクロ登録
    (lazyload (dmacro-exec) "dmacro")
    (defconst *dmacro-key* "\C-q")
    (global-set-key *dmacro-key* 'dmacro-exec)
    (setq elscreen-display-screen-number nil))

    ;; global
    ;; 関数定義に飛ぶ (gtags)
    @@ -293,38 +377,20 @@

    ;; w3m
    (lazyload (w3m w3m-browse-url w3m-find-file w3m-search) "w3m"
    (setq w3m-use-cookies t))
    (setq w3m-use-cookies t
    w3m-default-display-inline-images t
    w3m-quick-start nil
    w3m-home-page "http://www.google.com/"))
    (setq browse-url-browser-function 'w3m-browse-url)

    ;; org-mode
    ;; Emacsでメモ・TODO管理
    (lazyload (org-store-link org-agenda org-remember) "org-install"
    (setq org-startup-truncated nil
    org-return-follows-link t)
    (org-remember-insinuate)
    (setq org-directory "~/Dropbox/memo/")
    (setq org-default-notes-file (concat org-directory "notes.org"))
    (setq org-agenda-files `(,org-default-notes-file))
    (setq org-remember-templates
    '(("Todo" ?t "** TODO %?\n %i\n %a\n %t" nil "Inbox")
    ("Bug" ?b "** TODO %? :bug:\n %i\n %a\n %t" nil "Inbox")
    ("Idea" ?i "** %?\n %i\n %a\n %t" nil "New Ideas")
    ("Memo" ?m "** %?\n :Memo:\n %t" nil "Memo"))))
    (define-key global-map "\C-cl" 'org-store-link)
    (define-key global-map "\C-ca" 'org-agenda)
    (define-key global-map "\C-cr" 'org-remember)

    ;; color-moccur.el
    ;; M-x occurで検索結果を一覧
    (req color-moccur
    (setq moccur-split-word t)) ;; 複数の検索語や、特定のフェイスのみマッチ

    ;; migemo
    (req migemo
    (setq migemo-command "cmigemo"
    migemo-options '("-q" "--emacs" "-i" "\a")
    migemo-dictionary "/usr/local/share/migemo/euc-jp/migemo-dict"
    migemo-user-dictionary nil
    migemo-regex-dictionary nil
    moccur-use-migemo t))
    (load "migemo-conf")
    (setq moccur-use-migemo t))

    ;; anything-c-moccur
    (lazyload (anything-c-moccur-occur-by-moccur
    @@ -338,18 +404,47 @@
    (global-set-key (kbd "M-o") 'anything-c-moccur-occur-by-moccur) ;バッファ内検索
    (global-set-key (kbd "C-M-o") 'anything-c-moccur-dmoccur) ;ディレクトリ
    (add-hook-fn 'dired-mode-hook ;dired
    (local-set-key (kbd "O") 'anything-c-moccur-dired-do-moccur-by-moccur))
    (local-set-key (kbd "O") 'anything-c-moccur-dired-do-moccur-by-moccur))

    ;; twittering-mode
    (lazyload (twit) "twittering-mode"
    (twittering-jojo-mode t)
    (setq twittering-username "nitro_idiot")
    (setq twittering-timer-interval nil)
    (setq twittering-retweet-format " RT @%s: %t"))

    ;; emacs-jabber
    (lazyload (jabber-connect) "jabber"
    (load "jabber-conf"))
    (load "jabber-conf")
    (setq jabber-message-alert-same-buffer nil)
    (defun pg-jabber-growl-notify (from buf text proposed-alert)
    "(jabber.el hook) Notify of new Jabber chat messages via Growl"
    (when (or jabber-message-alert-same-buffer
    (not (memq (selected-window) (get-buffer-window-list buf))))
    (if (jabber-muc-sender-p from)
    (growl (format "(PM) %s"
    (jabber-jid-displayname (jabber-jid-user from)))
    (format "%s: %s" (jabber-jid-resource from) text)
    (format "jabber-from-%s" (jabber-jid-resource from)))
    (growl (format "%s" (jabber-jid-displayname from))
    text "jabber-from-unknown"))))
    (add-hook 'jabber-alert-message-hooks 'pg-jabber-growl-notify)

    ;; Same as above, for groupchats
    (defun pg-jabber-muc-growl-notify (nick group buf text proposed-alert)
    "(jabber.el hook) Notify of new Jabber MUC messages via Growl"
    (when (or jabber-message-alert-same-buffer
    (not (memq (selected-window) (get-buffer-window-list buf))))
    (if nick
    (when (or jabber-muc-alert-self
    (not (string=
    nick (cdr (assoc group *jabber-active-groupchats*)))))
    (growl (format "%s" (jabber-jid-displayname group))
    (format "%s: %s" nick text)
    (format "jabber-chat-%s" (jabber-jid-displayname group))))
    (growl (format "%s" (jabber-jid-displayname group))
    text "jabber-chat-unknown"))))
    (add-hook 'jabber-alert-muc-hooks 'pg-jabber-muc-growl-notify))


    ;; erc
    (lazyload (erc) "erc"
    @@ -374,7 +469,7 @@
    ;; 選択範囲をハイライト
    (setq-default transient-mark-mode t)

    ;; バッファ一覧をまともに
    ;; バッファ一覧を詳細に
    (global-set-key "\C-x\C-b" 'bs-show)

    ;; 対応するカッコをハイライト
    @@ -397,38 +492,69 @@
    (:background "ForestGreen"))
    (t
    ()))
    "*Face used by hl-line.")
    nil :group 'font-lock-highlighting-faces)
    (setq hl-line-face 'hlline-face)
    (global-hl-line-mode)

    ;; 表示不要なマイナーモードを削除
    (loop for m in '(outputz undo-tree auto-complete jaspace)
    do (assq-delete-all (intern (concat (symbol-name m) "-mode")) minor-mode-alist))

    ;; モード行に行番号、桁番号を表示
    (line-number-mode t)
    (column-number-mode t)

    ;; モード行に時刻を表示
    (setq display-time-string-forms '(24-hours ":" minutes))
    (display-time)

    ;; モード行にバッテリ残量を表示
    (display-battery-mode t)

    ;; 改行コードを表示
    (setq eol-mnemonic-dos "(CRLF)"
    eol-mnemonic-mac "(CR)"
    eol-mnemonic-unix "(LF)")

    ;;====================
    ;; Window System
    ;;====================
    (when window-system
    (server-start) ;; Emacs serverを起動
    (set-frame-parameter nil 'alpha 80) ;; フレームを透過
    (set-frame-parameter nil 'alpha 85) ;; フレームを透過
    (menu-bar-mode 0) ;; メニューバーを消す
    (tool-bar-mode 0) ;; ツールバーを消す
    (toggle-scroll-bar nil)) ;; スクロールバーを消す

    ;;====================
    ;; Syntax
    ;;====================
    ;; clojure
    ;; Clojure
    (setenv "CLOJURE_EXT" (concat (getenv "HOME") "/.clojure"))
    (req clojure-mode
    (setq clojure-src-root (expand-file-name "~/.clojure")))

    (req swank-clojure
    (setq swank-clojure-jar-path "~/.clojure/clojure.jar"
    swank-clojure-extra-classpaths '("~/.clojure/clojure-contrib.jar"))
    (setq slime-lisp-implementations '((clojure ("/usr/local/bin/clj")))))

    (lazyload (slime) "slime"
    (slime-setup '(slime-repl)))
    ;; Gauche
    (lazyload (scheme-mode run-scheme) "cmuscheme"
    (add-to-list 'process-coding-system-alist '("gosh" utf-8 . utf-8))
    (setq scheme-program-name "gosh -i"))

    ;; Common lisp
    ;(setq inferior-lisp-program "/usr/local/bin/sbcl --noinform")

    ;; Java
    (add-hook-fn 'malabar-mode-hook
    (add-hook 'after-save-hook 'malabar-compile-file-silently nil t))
    (lazyload (malabar-mode) "malabar-mode"
    (req cedet)
    (setq malabar-groovy-lib-dir "~/.emacs.d/elisp/malabar-mode/lib")
    (append-to-list malabar-import-excluded-classes-regexp-list
    '("^java\\.awt\\..*$"
    "^com\\.sun\\..*$"
    "^org\\.omg\\..*$")))

    ;; php-mode
    (lazyload (php-mode) "php-mode"
    (req symfony))
    (lazyload (php-mode) "php-mode")
    (add-hook-fn 'php-mode-hook
    (setq tab-width 2)
    (c-set-offset 'substatement-open 0)
    @@ -451,7 +577,9 @@
    (lazyload (rubydb) "rubydb3x")

    ;; js2-mode
    (setq js-indent-level 2)
    (lazyload (js2-mode) "js2"
    (setq js2-basic-offset 2
    js2-mirror-mode nil))

    ;; yaml-mode
    (lazyload (yaml-mode) "yaml-mode")
    @@ -501,6 +629,8 @@
    (if (string-match "COMMIT_EDITMSG" buffer-file-name)
    (set-buffer-file-coding-system 'utf-8)))

    (lazyload (markdown-mode) "markdown-mode")

    ;;====================
    ;; Syntax Checking
    ;;====================
    @@ -512,7 +642,7 @@
    ,(unless (null masks)
    `(setq flymake-allowed-file-name-masks
    (append flymake-allowed-file-name-masks
    ',(mapcar (lambda (x) (list x init-name)) masks))))
    ',(mapc (lambda (x) (list x init-name)) masks))))
    (defun ,init-name ()
    (let* ((temp-file (flymake-init-create-temp-buffer-copy
    'flymake-create-temp-inplace))
    @@ -541,3 +671,14 @@
    ;; Ruby
    (def-flymake-init ruby ()
    `("ruby" ("-c" ,local-file)) nil)


    ;;; This was installed by package-install.el.
    ;;; This provides support for the package system and
    ;;; interfacing with ELPA, the package archive.
    ;;; Move this code earlier if you want to reference
    ;;; packages in your .emacs.
    (when
    (load
    (expand-file-name "~/.emacs.d/elpa/package.el"))
    (package-initialize))
  3. fukamachi revised this gist Mar 11, 2010. 1 changed file with 6 additions and 5 deletions.
    11 changes: 6 additions & 5 deletions .emacs.el
    Original file line number Diff line number Diff line change
    @@ -28,7 +28,8 @@
    ;; General
    ;;====================
    ;; load-pathを追加
    (append-to-list load-path '("~/.emacs.d/elisp"
    (append-to-list load-path '("~/.emacs.d/"
    "~/.emacs.d/elisp"
    "~/.emacs.d/elisp/emacs-jabber"
    "~/.emacs.d/elisp/clojure-mode"
    "~/.clojure/swank-clojure"))
    @@ -179,7 +180,7 @@
    redmine-show-activity
    redmine-show-revisions
    redmine-select-project) "redmine"
    (load "~/.emacs.d/redmine.el"))
    (load "redmine-conf"))

    ;; auto-install
    ;; elispのインストールを簡単に
    @@ -220,7 +221,7 @@
    (replace-regexp-in-string "-mode$" "" (symbol-name major-mode))
    (system-name))))
    (ad-activate-regexp "outputz-setup-uri")
    (load "~/.emacs.d/outputz.el"))
    (load "outputz-conf"))

    ;; anything
    (req anything-startup)
    @@ -348,7 +349,7 @@

    ;; emacs-jabber
    (lazyload (jabber-connect) "jabber"
    (load "~/.emacs.d/jabber.el"))
    (load "jabber-conf"))

    ;; erc
    (lazyload (erc) "erc"
    @@ -357,7 +358,7 @@
    erc-port "6667"
    erc-prompt-for-password nil
    erc-server-coding-system '(iso-2022-jp . iso-2022-jp))
    (load "~/.emacs.d/erc.el"))
    (load "erc-conf"))

    ;;====================
    ;; Visual
  4. fukamachi revised this gist Mar 11, 2010. 1 changed file with 57 additions and 50 deletions.
    107 changes: 57 additions & 50 deletions .emacs.el
    Original file line number Diff line number Diff line change
    @@ -1,3 +1,4 @@
    (setenv "CLOJURE_EXT" (concat (getenv "HOME") "/.clojure"))
    ;;====================
    ;; Functions
    ;;====================
    @@ -27,7 +28,10 @@
    ;; General
    ;;====================
    ;; load-pathを追加
    (add-to-list 'load-path "~/.emacs.d/elisp")
    (append-to-list load-path '("~/.emacs.d/elisp"
    "~/.emacs.d/elisp/emacs-jabber"
    "~/.emacs.d/elisp/clojure-mode"
    "~/.clojure/swank-clojure"))

    (append-to-list exec-path
    '("/usr/bin" "/bin"
    @@ -110,41 +114,12 @@
    (save-excursion
    (byte-compile-file "~/.emacs.el"))))

    ;; \C-aでインデントを飛ばした行頭に移動
    (defun beginning-of-indented-line (current-point)
    "インデント文字を飛ばした行頭に戻る。ただし、ポイントから行頭までの間にインデント文字しかない場合は、行頭に戻る。"
    (interactive "d")
    (if (string-match
    "^[ ¥t]+$"
    (save-excursion
    (buffer-substring-no-properties
    (progn (beginning-of-line) (point))
    current-point)))
    (beginning-of-line)
    (back-to-indentation)))

    (defun beginning-of-visual-indented-line (current-point)
    "インデント文字を飛ばした行頭に戻る。ただし、ポイントから行頭までの間にインデント文 字しかない場合は、行頭に戻る。"
    (interactive "d")
    (let ((vhead-pos (save-excursion (progn (beginning-of-visual-line) (point))))
    (head-pos (save-excursion (progn (beginning-of-line) (point)))))
    (cond
    ;; 物理行の1行目にいる場合
    ((eq vhead-pos head-pos)
    (if (string-match
    "^[ ¥t]+$"
    (buffer-substring-no-properties vhead-pos current-point))
    (beginning-of-visual-line)
    (back-to-indentation)))
    ;; 物理行の2行目以降の先頭にいる場合
    ((eq vhead-pos current-point)
    (backward-char)
    (beginning-of-visual-indented-line (point)))
    ;; 物理行の2行目以降の途中にいる場合
    (t (beginning-of-visual-line)))))

    (global-set-key "\C-a" 'beginning-of-visual-indented-line)
    (global-set-key "\C-e" 'end-of-visual-line)
    ;; kill-ring一覧を表示
    (global-set-key-fn (kbd "M-y") nil (interactive) (anything-show-kill-ring))

    ;; モード行に時刻を表示
    (setq display-time-string-forms '(month "/" day " " dayname " " 24-hours ":" minutes))
    (display-time)

    ;;; for Mac
    ;; Command-Key and Option-Key
    @@ -158,6 +133,7 @@
    (set-frame-parameter nil 'fullscreen nil)
    (set-frame-parameter nil 'fullscreen 'fullboth)))
    (global-set-key (kbd "C-c m") 'toggle-fullscreen)
    (toggle-fullscreen)

    ;; よく使うモード
    (defvar my-fav-modes
    @@ -195,6 +171,16 @@
    ;;====================
    ;; Utilities
    ;;====================
    ;; tramp
    (req tramp)

    ;; redmine
    (lazyload (redmine-show-issues-all
    redmine-show-activity
    redmine-show-revisions
    redmine-select-project) "redmine"
    (load "~/.emacs.d/redmine.el"))

    ;; auto-install
    ;; elispのインストールを簡単に
    (lazyload (auto-install-from-url
    @@ -225,7 +211,6 @@

    ;; outputz
    (req outputz
    (setq outputz-key "DfiWDT31oxi.")
    (setq outputz-uri "http://%s/emacs.%s")
    (global-outputz-mode t)

    @@ -234,7 +219,8 @@
    (format outputz-uri
    (replace-regexp-in-string "-mode$" "" (symbol-name major-mode))
    (system-name))))
    (ad-activate-regexp "outputz-setup-uri"))
    (ad-activate-regexp "outputz-setup-uri")
    (load "~/.emacs.d/outputz.el"))

    ;; anything
    (req anything-startup)
    @@ -332,7 +318,12 @@
    (setq moccur-split-word t)) ;; 複数の検索語や、特定のフェイスのみマッチ
    ;; migemo
    (req migemo
    (setq moccur-use-migemo t))
    (setq migemo-command "cmigemo"
    migemo-options '("-q" "--emacs" "-i" "\a")
    migemo-dictionary "/usr/local/share/migemo/euc-jp/migemo-dict"
    migemo-user-dictionary nil
    migemo-regex-dictionary nil
    moccur-use-migemo t))

    ;; anything-c-moccur
    (lazyload (anything-c-moccur-occur-by-moccur
    @@ -348,18 +339,32 @@
    (add-hook-fn 'dired-mode-hook ;dired
    (local-set-key (kbd "O") 'anything-c-moccur-dired-do-moccur-by-moccur))

    ;; twittering-mode
    (lazyload (twit) "twittering-mode"
    (twittering-jojo-mode t)
    (twittering-scroll-mode t)
    (setq twittering-username "nitro_idiot")
    (setq twittering-timer-interval nil)
    (setq twittering-retweet-format " RT @%s: %t"))

    ;; emacs-jabber
    (lazyload (jabber-connect) "jabber"
    (load "~/.emacs.d/jabber.el"))

    ;; erc
    (lazyload (erc) "erc"
    (setq erc-server "irc.tokyo.wide.ad.jp"
    erc-nick-uniquifier "_"
    erc-port "6667"
    erc-prompt-for-password nil
    erc-server-coding-system '(iso-2022-jp . iso-2022-jp))
    (load "~/.emacs.d/erc.el"))

    ;;====================
    ;; Visual
    ;;====================
    ;; color-themeの設定
    (req color-theme
    (color-theme-initialize)
    (and (functionp 'color-theme-initialize) (color-theme-initialize))
    (color-theme-arjen))

    ;; キーワードのカラー表示を有効化
    @@ -408,15 +413,17 @@
    ;;====================
    ;; Syntax
    ;;====================
    ;; lisp (slime)
    (lazyload (slime-autoloads) "slime-autoloads"
    (setq slime-lisp-implementations
    '((sbcl ("/usr/local/bin/sbcl"))))
    (slime-setup '(slime-fancy slime-banner)))
    (add-hook-fn 'lisp-mode-hook
    (cond ((not (featurep 'slime))
    (require 'slime)
    (normal-mode))))
    ;; clojure
    (req clojure-mode
    (setq clojure-src-root (expand-file-name "~/.clojure")))

    (req swank-clojure
    (setq swank-clojure-jar-path "~/.clojure/clojure.jar"
    swank-clojure-extra-classpaths '("~/.clojure/clojure-contrib.jar"))
    (setq slime-lisp-implementations '((clojure ("/usr/local/bin/clj")))))

    (lazyload (slime) "slime"
    (slime-setup '(slime-repl)))

    ;; php-mode
    (lazyload (php-mode) "php-mode"
  5. fukamachi revised this gist Mar 5, 2010. 1 changed file with 38 additions and 25 deletions.
    63 changes: 38 additions & 25 deletions .emacs.el
    Original file line number Diff line number Diff line change
    @@ -4,7 +4,7 @@
    (eval-when-compile (require 'cl))

    (defmacro add-hook-fn (name &rest body)
    `(add-hook ,name (lambda () ,@body)))
    `(add-hook ,name #'(lambda () ,@body)))

    (defmacro append-to-list (to lst)
    `(setq ,to (append ,lst ,to)))
    @@ -94,9 +94,6 @@
    (unless (member (get-buffer "*scratch*") (buffer-list))
    (my-make-scratch 1)))

    ;; C-x bでミニバッファにバッファ候補を表示
    (iswitchb-mode t)

    ;; beepを消す
    (defun my-bell-function ()
    (unless (memq this-command
    @@ -106,6 +103,13 @@
    (ding)))
    (setq ring-bell-function 'my-bell-function)

    ;; .emacs.elの保存時にbyte compile
    (add-hook-fn 'after-save-hook
    (if (string= (expand-file-name "~/.emacs.el")
    (buffer-file-name))
    (save-excursion
    (byte-compile-file "~/.emacs.el"))))

    ;; \C-aでインデントを飛ばした行頭に移動
    (defun beginning-of-indented-line (current-point)
    "インデント文字を飛ばした行頭に戻る。ただし、ポイントから行頭までの間にインデント文字しかない場合は、行頭に戻る。"
    @@ -156,18 +160,18 @@
    (global-set-key (kbd "C-c m") 'toggle-fullscreen)

    ;; よく使うモード
    (setq my-fav-modes
    '((scheme-mode . "\\.scm$")
    (php-mode . "\\.php[45]?$")
    (yaml-mode . "\\.ya?ml$")
    (js-mode . "\\.js$")
    (ruby-mode . "\\.rb$")
    (text-mode . "\\.txt$")
    (fundamental-mode . nil)
    (LaTeX-mode . "\\.tex$")
    (org-mode . "\\.org$")
    (css-mode . "\\.css$")
    (nxml-mode . "\\.\(xml\|svg\|wsdl\|xslt\|wsdd\|xsl\|rng\|xhtml\)\'")))
    (defvar my-fav-modes
    '((scheme-mode . "\\.scm$")
    (php-mode . "\\.php[45]?$")
    (yaml-mode . "\\.ya?ml$")
    (js-mode . "\\.js$")
    (ruby-mode . "\\.rb$")
    (text-mode . "\\.txt$")
    (fundamental-mode . nil)
    (LaTeX-mode . "\\.tex$")
    (org-mode . "\\.org$")
    (css-mode . "\\.css$")
    (nxml-mode . "\\.\(xml\|svg\|wsdl\|xslt\|wsdd\|xsl\|rng\|xhtml\)\'")))

    ;; auto-mode-alist
    (loop for (k . v) in my-fav-modes
    @@ -215,6 +219,10 @@
    history-length t
    session-undo-check -1))

    ;; redo
    (req redo
    (global-set-key "\C-]" 'redo))

    ;; outputz
    (req outputz
    (setq outputz-key "DfiWDT31oxi.")
    @@ -257,15 +265,20 @@
    (lazyload (shell-pop) "shell-pop"
    (shell-pop-set-internal-mode "ansi-term")
    (shell-pop-set-internal-mode-shell "/bin/zsh")
    (shell-pop-set-window-height 60)
    (defvar ansi-term-after-hook nil)
    (add-hook-fn 'ansi-term-after-hook
    (eval-after-load "term" '(define-key term-raw-map "\C-t" 'shell-pop)))
    (define-key term-raw-map "\C-t" 'shell-pop))
    (defadvice ansi-term (after ansi-term-after-advice (org))
    "run hook as after advice"
    (run-hooks 'ansi-term-after-hook))
    (ad-activate 'ansi-term))
    (global-set-key "\C-t" 'shell-pop)

    ;; SQL
    (setq sql-user "fukamachi")
    (setq sql-server "localhost")

    ;; ElScreen
    ;; EmacsでGNU screen風のインターフェイスを使う
    (req elscreen
    @@ -410,17 +423,17 @@
    (req symfony))
    (add-hook-fn 'php-mode-hook
    (setq tab-width 2)
    (c-set-offset 'substatement-open 0
    'block-open '+
    'case-label 1
    'statement-case-open 0
    'arglist-intro '+
    'arglist-close 0))
    (c-set-offset 'substatement-open 0)
    (c-set-offset 'block-open '+)
    (c-set-offset 'case-label 1)
    (c-set-offset 'statement-case-open 0)
    (c-set-offset 'arglist-intro '+)
    (c-set-offset 'arglist-close 0))

    ;; ruby
    (add-to-list 'interpreter-mode-alist '("ruby" . ruby-mode))
    (lazyload (run-ruby inf-ruby-keys) "inf-ruby")
    (add-hook-fn 'ruby-mode-hook (inf-ruby-keys))
    (lazyload (run-ruby inf-ruby-keys) "inf-ruby"
    (add-hook-fn 'ruby-mode-hook (inf-ruby-keys)))

    (lazyload (ruby-electric-mode) "ruby-electric")
    (lazyload (ruby-block-mode) "ruby-block"
  6. fukamachi revised this gist Mar 1, 2010. 1 changed file with 2 additions and 2 deletions.
    4 changes: 2 additions & 2 deletions .emacs.el
    Original file line number Diff line number Diff line change
    @@ -419,8 +419,8 @@

    ;; ruby
    (add-to-list 'interpreter-mode-alist '("ruby" . ruby-mode))
    (lazyload (run-ruby inf-ruby-keys) "inf-ruby"
    (add-hook-fn 'ruby-mode-hook (inf-ruby-keys)))
    (lazyload (run-ruby inf-ruby-keys) "inf-ruby")
    (add-hook-fn 'ruby-mode-hook (inf-ruby-keys))

    (lazyload (ruby-electric-mode) "ruby-electric")
    (lazyload (ruby-block-mode) "ruby-block"
  7. fukamachi revised this gist Feb 28, 2010. 1 changed file with 11 additions and 20 deletions.
    31 changes: 11 additions & 20 deletions .emacs.el
    Original file line number Diff line number Diff line change
    @@ -178,18 +178,9 @@
    (setq windmove-wrap-around t)

    ;; ウィンドウ内のカーソル移動
    (defun point-to-top ()
    (interactive)
    (move-to-window-line 0))
    (defun point-to-middle ()
    (interactive)
    (move-to-window-line nil))
    (defun point-to-bottom ()
    (interactive)
    (move-to-window-line -1))
    (global-set-key (kbd "C-M-h") 'point-to-top)
    (global-set-key (kbd "C-M-m") 'point-to-middle)
    (global-set-key (kbd "C-M-l") 'point-to-bottom)
    (global-set-key-fn (kbd "C-M-h") nil (interactive) (move-to-window-line 0))
    (global-set-key-fn (kbd "C-M-m") nil (interactive) (move-to-window-line nil))
    (global-set-key-fn (kbd "C-M-l") nil (interactive) (move-to-window-line -1))

    ;; goto-lineをM-gに
    (global-set-key-fn "\M-g" (x) (interactive "nLine: ") (goto-line x))
    @@ -226,7 +217,7 @@

    ;; outputz
    (req outputz
    (setq outputz-key "My Private Key")
    (setq outputz-key "DfiWDT31oxi.")
    (setq outputz-uri "http://%s/emacs.%s")
    (global-outputz-mode t)

    @@ -323,7 +314,7 @@
    (define-key global-map "\C-ca" 'org-agenda)
    (define-key global-map "\C-cr" 'org-remember)

    ;;; color-moccur.el
    ;; color-moccur.el
    (req color-moccur
    (setq moccur-split-word t)) ;; 複数の検索語や、特定のフェイスのみマッチ
    ;; migemo
    @@ -419,12 +410,12 @@
    (req symfony))
    (add-hook-fn 'php-mode-hook
    (setq tab-width 2)
    (c-set-offset 'substatement-open 0)
    (c-set-offset 'block-open '+)
    (c-set-offset 'case-label 1)
    (c-set-offset 'statement-case-open 0)
    (c-set-offset 'arglist-intro '+)
    (c-set-offset 'arglist-close 0))
    (c-set-offset 'substatement-open 0
    'block-open '+
    'case-label 1
    'statement-case-open 0
    'arglist-intro '+
    'arglist-close 0))

    ;; ruby
    (add-to-list 'interpreter-mode-alist '("ruby" . ruby-mode))
  8. fukamachi revised this gist Feb 28, 2010. 1 changed file with 80 additions and 94 deletions.
    174 changes: 80 additions & 94 deletions .emacs.el
    Original file line number Diff line number Diff line change
    @@ -16,7 +16,9 @@
    (defmacro lazyload (func lib &rest body)
    `(when (locate-library ,lib)
    ,@(mapcar (lambda (f) `(autoload ',f ,lib nil t)) func)
    ,@body))
    (eval-after-load ,lib
    '(progn
    ,@body))))

    (defmacro global-set-key-fn (key args &rest body)
    `(global-set-key ,key (lambda ,args ,@body)))
    @@ -42,8 +44,8 @@
    (setq shell-file-name "/bin/zsh")

    ;; Tabの代わりにスペースでインデント
    (setq-default indent-tabs-mode nil)
    (setq-default tab-width 2 indent-tabs-mode nil)
    (setq-default tab-width 2
    indent-tabs-mode nil)

    ;; shell-modeでpasswordを隠す
    (add-hook 'comint-output-filter-functions 'comint-watch-for-password-prompt)
    @@ -200,7 +202,13 @@
    ;;====================
    ;; auto-install
    ;; elispのインストールを簡単に
    (req auto-install
    (lazyload (auto-install-from-url
    auto-install-from-emacswiki
    auto-install-from-dired
    auto-install-from-directory
    auto-install-from-buffer
    auto-install-from-gist
    auto-install-batch) "auto-install"
    (setq auto-install-directory "~/.emacs.d/elisp/")
    (auto-install-update-emacswiki-package-name t)
    (auto-install-compatibility-setup))
    @@ -237,14 +245,11 @@
    (cua-mode t)
    (setq cua-enable-cua-keys nil)

    ;; current-string-to
    ;(req current-string-to)

    ;; auto-complete
    ;; 補完候補を自動ポップアップ
    (req auto-complete
    (global-auto-complete-mode t)
    (add-to-list 'ac-modes 'js-mode))
    (append-to-list ac-modes '(js-mode php-mode)))

    ;; auto-insert
    ;; ファイル形式に応じて自動でテンプレート挿入
    @@ -258,17 +263,17 @@

    ;; shell-pop
    ;; C-tでshellをポップアップ
    (req shell-pop
    (lazyload (shell-pop) "shell-pop"
    (shell-pop-set-internal-mode "ansi-term")
    (shell-pop-set-internal-mode-shell "/bin/zsh")
    (defvar ansi-term-after-hook nil)
    (add-hook-fn 'ansi-term-after-hook
    (define-key term-raw-map "\C-t" 'shell-pop))
    (eval-after-load "term" '(define-key term-raw-map "\C-t" 'shell-pop)))
    (defadvice ansi-term (after ansi-term-after-advice (org))
    "run hook as after advice"
    (run-hooks 'ansi-term-after-hook))
    (ad-activate 'ansi-term)
    (global-set-key "\C-t" 'shell-pop))
    (ad-activate 'ansi-term))
    (global-set-key "\C-t" 'shell-pop)

    ;; ElScreen
    ;; EmacsでGNU screen風のインターフェイスを使う
    @@ -280,34 +285,29 @@

    ;; dmacro
    ;; 2回同じ操作をすると自動でマクロ登録
    (lazyload (dmacro-exec) "dmacro")
    (defconst *dmacro-key* "\C-q")
    (global-set-key *dmacro-key* 'dmacro-exec)
    (autoload 'dmacro-exec "dmacro" nil t)

    ;; global
    ;; 関数定義に飛ぶ (gtags)
    (lazyload (gtags-mode) "gtags"
    (add-hook-fn 'c-mode-common-hook
    (gtags-mode 1)
    (gtags-make-complete-list))
    (setq gtags-mode-hook
    (lambda ()
    (local-set-key "\C-cf" 'gtags-find-tag)
    (local-set-key "\M-r" 'gtags-find-rtag)
    (local-set-key "\M-s" 'gtags-find-symbol)
    (local-set-key "\C-cp" 'gtags-pop-stack))))
    (local-set-key "\C-cf" 'gtags-find-tag)
    (local-set-key "\M-r" 'gtags-find-rtag)
    (local-set-key "\M-s" 'gtags-find-symbol)
    (local-set-key "\C-cp" 'gtags-pop-stack))
    (add-hook-fn 'c-mode-common-hook
    (gtags-mode t)
    (eval-after-load "gtags-mode" '(gtags-make-complete-list)))

    ;; w3m
    (lazyload (w3m w3m-browse-url w3m-find-file w3m-search) "w3m"
    (setq w3m-use-cookies t)
    (setq browse-url-browser-function 'w3m-browse-url))
    (setq w3m-use-cookies t))
    (setq browse-url-browser-function 'w3m-browse-url)

    ;; org-mode
    ;; Emacsでメモ・TODO管理
    (lazyload (org-store-link org-agenda org-remember) "org-install"
    (define-key global-map "\C-cl" 'org-store-link)
    (define-key global-map "\C-ca" 'org-agenda)
    (define-key global-map "\C-cr" 'org-remember)
    (setq org-startup-truncated nil
    org-return-follows-link t)
    (org-remember-insinuate)
    @@ -319,6 +319,9 @@
    ("Bug" ?b "** TODO %? :bug:\n %i\n %a\n %t" nil "Inbox")
    ("Idea" ?i "** %?\n %i\n %a\n %t" nil "New Ideas")
    ("Memo" ?m "** %?\n :Memo:\n %t" nil "Memo"))))
    (define-key global-map "\C-cl" 'org-store-link)
    (define-key global-map "\C-ca" 'org-agenda)
    (define-key global-map "\C-cr" 'org-remember)

    ;;; color-moccur.el
    (req color-moccur
    @@ -342,12 +345,10 @@
    (local-set-key (kbd "O") 'anything-c-moccur-dired-do-moccur-by-moccur))

    (lazyload (twit) "twittering-mode"
    (eval-after-load "twittering-mode"
    '(progn
    (twittering-jojo-mode t)
    (twittering-scroll-mode t)
    (setq twittering-username "nitro_idiot")
    (setq twittering-retweet-format " RT @%s: %t"))))
    (twittering-jojo-mode t)
    (twittering-scroll-mode t)
    (setq twittering-username "nitro_idiot")
    (setq twittering-retweet-format " RT @%s: %t"))

    ;;====================
    ;; Visual
    @@ -406,61 +407,46 @@
    ;; lisp (slime)
    (lazyload (slime-autoloads) "slime-autoloads"
    (setq slime-lisp-implementations
    `((sbcl ("/usr/local/bin/sbcl"))))
    (add-hook-fn 'lisp-mode-hook
    (cond ((not (featurep 'slime))
    (require 'slime)
    (normal-mode))))
    (eval-after-load "slime"
    '(slime-setup '(slime-fancy slime-banner))))
    '((sbcl ("/usr/local/bin/sbcl"))))
    (slime-setup '(slime-fancy slime-banner)))
    (add-hook-fn 'lisp-mode-hook
    (cond ((not (featurep 'slime))
    (require 'slime)
    (normal-mode))))

    ;; php-mode
    (lazyload (php-mode) "php-mode"
    (add-hook-fn 'php-mode-hook
    (require 'php-completion)
    (php-completion-mode t)
    (define-key php-mode-map (kbd "C-o") 'phpcmp-complete)
    (when (require 'auto-complete nil t)
    (make-variable-buffer-local 'ac-sources)
    (add-to-list 'ac-sources 'ac-source-php-completion)
    (auto-complete-mode t))
    (setq c-basic-offset 2
    tab-width 2)
    ;indent-line-function 'indent-relative-maybe)
    (c-set-offset 'substatement-open 0)
    (c-set-offset 'block-open '+)
    (c-set-offset 'case-label 1)
    (c-set-offset 'statement-case-open 0)
    (c-set-offset 'arglist-intro '+)
    (c-set-offset 'arglist-close 0)))

    (req symfony)
    (req symfony))
    (add-hook-fn 'php-mode-hook
    (setq tab-width 2)
    (c-set-offset 'substatement-open 0)
    (c-set-offset 'block-open '+)
    (c-set-offset 'case-label 1)
    (c-set-offset 'statement-case-open 0)
    (c-set-offset 'arglist-intro '+)
    (c-set-offset 'arglist-close 0))

    ;; ruby
    (add-to-list 'interpreter-mode-alist '("ruby" . ruby-mode))
    (lazyload (run-ruby inf-ruby-keys) "inf-ruby"
    (add-hook-fn 'ruby-mode-hook (inf-ruby-keys)))

    (lazyload (ruby-electric-mode) "ruby-electric"
    (add-hook-fn 'ruby-mode-hook (ruby-electric-mode t)))
    (lazyload (ruby-electric-mode) "ruby-electric")
    (lazyload (ruby-block-mode) "ruby-block"
    (ruby-block-mode t)
    (setq ruby-block-highlight-toggle t))
    (add-hook-fn 'ruby-mode-hook (ruby-electric-mode t) (ruby-block-mode t))

    (autoload 'rubydb "rubydb3x"
    "run rubydb on program file in buffer *gud-file*.
    the directory containing file becomes the initial working directory
    and source-file directory for your debugger." t)
    (lazyload (rubydb) "rubydb3x")

    ;; js2-mode
    (setq js-indent-level 2)

    ;; yaml-mode
    (autoload 'yaml-mode "yaml-mode")
    (lazyload (yaml-mode) "yaml-mode")

    ;; css-mode
    (autoload 'css-mode "css-mode")
    (setq cssm-indent-function 'cssm-c-style-indenter)
    (lazyload (css-mode) "css-mode"
    (setq cssm-indent-function 'cssm-c-style-indenter))

    ;; mmm-mode
    (req mmm-auto
    @@ -481,19 +467,19 @@ and source-file directory for your debugger." t)
    (setq LaTeX-indent-level 4)
    (setq LaTeX-item-indent 2)
    (setq TeX-output-view-style '(("^dvi$" "." "pxdvi '%d'")))
    (setq preview-image-type 'dvipng)
    (add-hook-fn 'LaTeX-mode-hook
    (require 'tex-jp)
    (add-to-list 'TeX-command-list
    '("ptex" "%(PDF)ptex %`%S%(PDFout)%(mode)%' %t"
    TeX-run-TeX nil (plain-tex-mode) :help "Run ASCII pTeX"))
    (add-to-list 'TeX-command-list
    '("platex" "%(PDF)platex %`%S%(PDFout)%(mode)%' %t"
    TeX-run-TeX nil (latex-mode) :help "Run ASCII pLaTeX"))
    (add-to-list 'TeX-command-list
    '("pdfview" "okular '%s.pdf' " TeX-run-command t nil))
    (add-to-list 'TeX-command-list
    '("pdfbuild" "dvipdfmx -V 4 '%s' " TeX-run-command t nil))))
    (setq preview-image-type 'dvipng))
    (add-hook-fn 'LaTeX-mode-hook
    (require 'tex-jp)
    (add-to-list 'TeX-command-list
    '("ptex" "%(PDF)ptex %`%S%(PDFout)%(mode)%' %t"
    TeX-run-TeX nil (plain-tex-mode) :help "Run ASCII pTeX"))
    (add-to-list 'TeX-command-list
    '("platex" "%(PDF)platex %`%S%(PDFout)%(mode)%' %t"
    TeX-run-TeX nil (latex-mode) :help "Run ASCII pLaTeX"))
    (add-to-list 'TeX-command-list
    '("pdfview" "okular '%s.pdf' " TeX-run-command t nil))
    (add-to-list 'TeX-command-list
    '("pdfbuild" "dvipdfmx -V 4 '%s' " TeX-run-command t nil)))

    ;; nxml-mode
    (setq nxml-slash-auto-complete-flag t)
    @@ -528,18 +514,18 @@ and source-file directory for your debugger." t)
    `(add-hook-fn (intern (format "%s-mode-hook" ',name)) (flymake-mode t))))

    (lazyload (flymake-mode) "flymake"
    (global-set-key "\C-cd" 'flymake-display-err-menu-for-current-line)
    (global-set-key "\C-cd" 'flymake-display-err-menu-for-current-line))

    ;; JavaScript
    (def-flymake-init js ("\.js$")
    `("jsl" ("-process" ,local-file))
    ("\(.+\)(\([0-9]+\)): \(?:lint \)?\(\(?:Warning\|SyntaxError\):.+\)" 1 2 nil 3))
    ;; JavaScript
    (def-flymake-init js ("\.js$")
    `("jsl" ("-process" ,local-file))
    ("\(.+\)(\([0-9]+\)): \(?:lint \)?\(\(?:Warning\|SyntaxError\):.+\)" 1 2 nil 3))

    ;; PHP
    (def-flymake-init php ("\.php[345]?$")
    `("php" ("-f" ,local-file "-l"))
    ("\(\(?:Parse error\|Fatal error\|Warning\): .*\) in \(.*\) on line \([0-9]+\)" 2 3 nil 1))
    ;; PHP
    (def-flymake-init php ("\.php[345]?$")
    `("php" ("-f" ,local-file "-l"))
    ("\(\(?:Parse error\|Fatal error\|Warning\): .*\) in \(.*\) on line \([0-9]+\)" 2 3 nil 1))

    ;; Ruby
    (def-flymake-init ruby ()
    `("ruby" ("-c" ,local-file)) nil))
    ;; Ruby
    (def-flymake-init ruby ()
    `("ruby" ("-c" ,local-file)) nil)
  9. fukamachi revised this gist Feb 27, 2010. 1 changed file with 38 additions and 37 deletions.
    75 changes: 38 additions & 37 deletions .emacs.el
    Original file line number Diff line number Diff line change
    @@ -151,7 +151,7 @@
    (if (frame-parameter nil 'fullscreen)
    (set-frame-parameter nil 'fullscreen nil)
    (set-frame-parameter nil 'fullscreen 'fullboth)))
    (global-set-key (kbd "M-<RET>") 'toggle-fullscreen)
    (global-set-key (kbd "C-c m") 'toggle-fullscreen)

    ;; よく使うモード
    (setq my-fav-modes
    @@ -185,9 +185,9 @@
    (defun point-to-bottom ()
    (interactive)
    (move-to-window-line -1))
    (global-set-key "\M-," 'point-to-top)
    (global-set-key "\M-." 'point-to-middle)
    (global-set-key "\M-/" 'point-to-bottom)
    (global-set-key (kbd "C-M-h") 'point-to-top)
    (global-set-key (kbd "C-M-m") 'point-to-middle)
    (global-set-key (kbd "C-M-l") 'point-to-bottom)

    ;; goto-lineをM-gに
    (global-set-key-fn "\M-g" (x) (interactive "nLine: ") (goto-line x))
    @@ -342,8 +342,12 @@
    (local-set-key (kbd "O") 'anything-c-moccur-dired-do-moccur-by-moccur))

    (lazyload (twit) "twittering-mode"
    (setq twittering-username "nitro_idiot")
    (setq twittering-retweet-format " RT @%s: %t"))
    (eval-after-load "twittering-mode"
    '(progn
    (twittering-jojo-mode t)
    (twittering-scroll-mode t)
    (setq twittering-username "nitro_idiot")
    (setq twittering-retweet-format " RT @%s: %t"))))

    ;;====================
    ;; Visual
    @@ -505,40 +509,37 @@ and source-file directory for your debugger." t)
    ;; flymake
    (defmacro def-flymake-init (name masks exec error)
    (let ((init-name (intern (format "flymake-%s-init" name))))
    `(when (not (fboundp ',init-name))
    ,(unless (null masks)
    `(setq flymake-allowed-file-name-masks
    (append flymake-allowed-file-name-masks
    ',(mapcar (lambda (x) (list x init-name)) masks))))
    (defun ,init-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))))
    ,exec))
    ,(unless (null error)
    `(setq flymake-err-line-patterns
    (cons ',error flymake-err-line-patterns))))))
    `(eval-after-load "flymake"
    (when (not (fboundp ',init-name))
    ,(unless (null masks)
    `(setq flymake-allowed-file-name-masks
    (append flymake-allowed-file-name-masks
    ',(mapcar (lambda (x) (list x init-name)) masks))))
    (defun ,init-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))))
    ,exec))
    ,(unless (null error)
    `(setq flymake-err-line-patterns
    (cons ',error flymake-err-line-patterns)))))
    `(add-hook-fn (intern (format "%s-mode-hook" ',name)) (flymake-mode t))))

    (lazyload (flymake-mode) "flymake"
    (global-set-key "\C-cd" 'flymake-display-err-menu-for-current-line)

    (eval-after-load "flymake"
    '(progn
    ;; JavaScript
    (def-flymake-init js ("\.js$")
    `("jsl" ("-process" ,local-file))
    ("\(.+\)(\([0-9]+\)): \(?:lint \)?\(\(?:Warning\|SyntaxError\):.+\)" 1 2 nil 3))
    ;; JavaScript
    (def-flymake-init js ("\.js$")
    `("jsl" ("-process" ,local-file))
    ("\(.+\)(\([0-9]+\)): \(?:lint \)?\(\(?:Warning\|SyntaxError\):.+\)" 1 2 nil 3))

    ;; PHP
    (def-flymake-init php ("\.php[345]?$")
    `("php" ("-f" ,local-file "-l"))
    ("\(\(?:Parse error\|Fatal error\|Warning\): .*\) in \(.*\) on line \([0-9]+\)" 2 3 nil 1))
    ;; PHP
    (def-flymake-init php ("\.php[345]?$")
    `("php" ("-f" ,local-file "-l"))
    ("\(\(?:Parse error\|Fatal error\|Warning\): .*\) in \(.*\) on line \([0-9]+\)" 2 3 nil 1))

    ;; Ruby
    (def-flymake-init ruby ()
    `("ruby" ("-c" ,local-file)) nil)))

    (loop for m in '(php js ruby)
    do (add-hook-fn (intern (format "%s-mode-hook" m)) (flymake-mode t))))
    ;; Ruby
    (def-flymake-init ruby ()
    `("ruby" ("-c" ,local-file)) nil))
  10. fukamachi revised this gist Feb 26, 2010. 1 changed file with 47 additions and 42 deletions.
    89 changes: 47 additions & 42 deletions .emacs.el
    Original file line number Diff line number Diff line change
    @@ -9,7 +9,7 @@
    (defmacro append-to-list (to lst)
    `(setq ,to (append ,lst ,to)))

    (defmacro ifload (lib &rest body)
    (defmacro req (lib &rest body)
    `(when (locate-library ,(symbol-name lib))
    (require ',lib) ,@body))

    @@ -200,13 +200,13 @@
    ;;====================
    ;; auto-install
    ;; elispのインストールを簡単に
    (ifload auto-install
    (req auto-install
    (setq auto-install-directory "~/.emacs.d/elisp/")
    (auto-install-update-emacswiki-package-name t)
    (auto-install-compatibility-setup))

    ;; 終了してもカーソル位置を記録
    (ifload session
    (req session
    (add-hook 'after-init-hook 'session-initialize)
    (setq session-initialize '(de-saveplace session keys menus places)
    session-globals-include '((kill-ring 50)
    @@ -217,7 +217,7 @@
    session-undo-check -1))

    ;; outputz
    (ifload outputz
    (req outputz
    (setq outputz-key "My Private Key")
    (setq outputz-uri "http://%s/emacs.%s")
    (global-outputz-mode t)
    @@ -230,19 +230,19 @@
    (ad-activate-regexp "outputz-setup-uri"))

    ;; anything
    (ifload anything-startup)
    (req anything-startup)

    ;; cua-mode
    ;; 矩形選択を簡単に
    (cua-mode t)
    (setq cua-enable-cua-keys nil)

    ;; current-string-to
    (ifload current-string-to)
    ;(req current-string-to)

    ;; auto-complete
    ;; 補完候補を自動ポップアップ
    (ifload auto-complete
    (req auto-complete
    (global-auto-complete-mode t)
    (add-to-list 'ac-modes 'js-mode))

    @@ -258,7 +258,7 @@

    ;; shell-pop
    ;; C-tでshellをポップアップ
    (ifload shell-pop
    (req shell-pop
    (shell-pop-set-internal-mode "ansi-term")
    (shell-pop-set-internal-mode-shell "/bin/zsh")
    (defvar ansi-term-after-hook nil)
    @@ -272,7 +272,7 @@

    ;; ElScreen
    ;; EmacsでGNU screen風のインターフェイスを使う
    (ifload elscreen
    (req elscreen
    (setq elscreen-prefix-key "\C-z")
    (if window-system
    (define-key elscreen-map "\C-z" 'iconify-or-deiconify-frame)
    @@ -317,13 +317,14 @@
    (setq org-remember-templates
    '(("Todo" ?t "** TODO %?\n %i\n %a\n %t" nil "Inbox")
    ("Bug" ?b "** TODO %? :bug:\n %i\n %a\n %t" nil "Inbox")
    ("Idea" ?i "** %?\n %i\n %a\n %t" nil "New Ideas"))))
    ("Idea" ?i "** %?\n %i\n %a\n %t" nil "New Ideas")
    ("Memo" ?m "** %?\n :Memo:\n %t" nil "Memo"))))

    ;;; color-moccur.el
    (ifload color-moccur
    (req color-moccur
    (setq moccur-split-word t)) ;; 複数の検索語や、特定のフェイスのみマッチ
    ;; migemo
    (ifload migemo
    (req migemo
    (setq moccur-use-migemo t))

    ;; anything-c-moccur
    @@ -340,11 +341,15 @@
    (add-hook-fn 'dired-mode-hook ;dired
    (local-set-key (kbd "O") 'anything-c-moccur-dired-do-moccur-by-moccur))

    (lazyload (twit) "twittering-mode"
    (setq twittering-username "nitro_idiot")
    (setq twittering-retweet-format " RT @%s: %t"))

    ;;====================
    ;; Visual
    ;;====================
    ;; color-themeの設定
    (ifload color-theme
    (req color-theme
    (color-theme-initialize)
    (color-theme-arjen))

    @@ -358,14 +363,14 @@
    (global-set-key "\C-x\C-b" 'bs-show)

    ;; 対応するカッコをハイライト
    (show-paren-mode 1)
    (show-paren-mode t)

    ;; 全角空白、Tab、改行表示
    (ifload jaspace
    (req jaspace
    (setq jaspace-alternate-jaspace-string ""
    jaspace-alternate-eol-string "\n"
    jaspace-highlight-tabs t)
    (append-to-list jaspace-mode (mapcar 'car my-fav-modes)))
    (append-to-list jaspace-modes (mapcar 'car my-fav-modes)))

    ;; カーソル行をハイライト
    (defface hlline-face
    @@ -416,17 +421,16 @@
    (add-to-list 'ac-sources 'ac-source-php-completion)
    (auto-complete-mode t))
    (setq c-basic-offset 2
    c-tab-width 2
    c-indent-level 2
    tab-width 2)
    (setq-default tab-width 2)
    ;indent-line-function 'indent-relative-maybe)
    (c-set-offset 'substatement-open 0)
    (c-set-offset 'block-open 0)
    (c-set-offset 'case-label '+)
    (c-set-offset 'statement-case-open 0))
    (setq php-mode-force-pear t))
    (c-set-offset 'block-open '+)
    (c-set-offset 'case-label 1)
    (c-set-offset 'statement-case-open 0)
    (c-set-offset 'arglist-intro '+)
    (c-set-offset 'arglist-close 0)))

    (ifload symfony)
    (req symfony)

    ;; ruby
    (add-to-list 'interpreter-mode-alist '("ruby" . ruby-mode))
    @@ -455,7 +459,7 @@ and source-file directory for your debugger." t)
    (setq cssm-indent-function 'cssm-c-style-indenter)

    ;; mmm-mode
    (ifload mmm-auto
    (req mmm-auto
    (setq mmm-global-mode 'maybe)
    (mmm-add-classes
    '((embedded-css
    @@ -515,25 +519,26 @@ and source-file directory for your debugger." t)
    ,exec))
    ,(unless (null error)
    `(setq flymake-err-line-patterns
    (cons ',error flymake-err-line-patterns)))
    (add-hook-fn ',(intern (format "%s-mode-hook" name)) (flymake-mode t)))))
    (cons ',error flymake-err-line-patterns))))))

    (lazyload (flymake-mode) "flymake"
    (global-set-key "\C-cd" 'flymake-display-err-menu-for-current-line)

    (eval-after-load "flymake"
    '(progn

    ;; JavaScript
    (def-flymake-init js ("\.js$")
    `("jsl" ("-process" ,local-file))
    ("\(.+\)(\([0-9]+\)): \(?:lint \)?\(\(?:Warning\|SyntaxError\):.+\)" 1 2 nil 3))

    ;; PHP
    (def-flymake-init php ("\.php[345]?")
    `("php" ("-f" ,local-file "-l"))
    ("\(\(?:Parse error\|Fatal error\|Warning\): .*\) in \(.*\) on line \([0-9]+\)" 2 3 nil 1))

    ;; Ruby
    (def-flymake-init ruby ()
    `("ruby" ("-c" ,local-file)) nil))))
    '(progn
    ;; JavaScript
    (def-flymake-init js ("\.js$")
    `("jsl" ("-process" ,local-file))
    ("\(.+\)(\([0-9]+\)): \(?:lint \)?\(\(?:Warning\|SyntaxError\):.+\)" 1 2 nil 3))

    ;; PHP
    (def-flymake-init php ("\.php[345]?$")
    `("php" ("-f" ,local-file "-l"))
    ("\(\(?:Parse error\|Fatal error\|Warning\): .*\) in \(.*\) on line \([0-9]+\)" 2 3 nil 1))

    ;; Ruby
    (def-flymake-init ruby ()
    `("ruby" ("-c" ,local-file)) nil)))

    (loop for m in '(php js ruby)
    do (add-hook-fn (intern (format "%s-mode-hook" m)) (flymake-mode t))))
  11. fukamachi revised this gist Feb 19, 2010. 1 changed file with 1 addition and 1 deletion.
    2 changes: 1 addition & 1 deletion .emacs.el
    Original file line number Diff line number Diff line change
    @@ -218,7 +218,7 @@

    ;; outputz
    (ifload outputz
    (setq outputz-key "DfiWDT31oxi.")
    (setq outputz-key "My Private Key")
    (setq outputz-uri "http://%s/emacs.%s")
    (global-outputz-mode t)

  12. fukamachi revised this gist Feb 19, 2010. 1 changed file with 222 additions and 228 deletions.
    450 changes: 222 additions & 228 deletions .emacs.el
    Original file line number Diff line number Diff line change
    @@ -1,25 +1,31 @@
    ;;====================
    ;; Functions
    ;;====================
    (require 'cl)
    (eval-when-compile (require 'cl))

    (defmacro add-hook-fn (name &rest body)
    `(add-hook ,name (lambda () ,@body)))

    (defmacro append-to-list (to lst)
    `(setq ,to (append ,lst ,to)))

    (defmacro ifload (lib &rest body)
    `(when (locate-library ,(symbol-name lib))
    (require ',lib) ,@body))

    (defmacro lazyload (func lib &rest body)
    `(when (locate-library ,lib)
    ,@(mapcar (lambda (f) `(autoload ',f ,lib nil t)) func)
    ,@body))

    (defmacro global-set-key-fn (key args &rest body)
    `(global-set-key ,key (lambda ,args ,@body)))

    ;;====================
    ;; General
    ;;====================
    ;; load-pathを追加
    (append-to-list load-path
    '("/usr/local/share/emacs/site-lisp"
    "/opt/local/share/emacs/site-lisp"
    "/opt/local/share/emacs/site-lisp/slime"
    "/opt/local/share/emacs/site-lisp/apel"
    "/opt/local/share/emacs/23.1/site-lisp/emu"
    "~/.emacs.d/elisp"))
    (add-to-list 'load-path "~/.emacs.d/elisp")

    (append-to-list exec-path
    '("/usr/bin" "/bin"
    @@ -45,17 +51,6 @@
    ;; C-kで行全体を削除
    (setq kill-whole-line t)

    ;; 終了してもカーソル位置を記録
    (require 'session)
    (setq session-initialize '(de-saveplace session keys menus places)
    session-globals-include '((kill-ring 50)
    (session-file-alist 500 t)
    (file-name-history 10000))
    session-globals-max-string 100000000
    history-length t
    session-undo-check -1)
    (add-hook 'after-init-hook 'session-initialize)

    ;; "yes or no"を"y or n"に
    (fset 'yes-or-no-p 'y-or-n-p)

    @@ -99,7 +94,6 @@

    ;; C-x bでミニバッファにバッファ候補を表示
    (iswitchb-mode t)
    (iswitchb-default-keybindings)

    ;; beepを消す
    (defun my-bell-function ()
    @@ -151,9 +145,13 @@
    (setq ns-command-modifier 'meta)
    (setq ns-alternate-modifier 'super)

    ;;; for Kayac Emacs
    ;; fullscreen
    (global-set-key (kbd "M-<RET>") 'ns-toggle-fullscreen)
    (defun toggle-fullscreen ()
    (interactive)
    (if (frame-parameter nil 'fullscreen)
    (set-frame-parameter nil 'fullscreen nil)
    (set-frame-parameter nil 'fullscreen 'fullboth)))
    (global-set-key (kbd "M-<RET>") 'toggle-fullscreen)

    ;; よく使うモード
    (setq my-fav-modes
    @@ -173,58 +171,80 @@
    (loop for (k . v) in my-fav-modes
    do (unless (null v) (add-to-list 'auto-mode-alist (cons v k))))

    ;; 分割したウィンドウ間をShift + 矢印で移動
    (windmove-default-keybindings)
    (setq windmove-wrap-around t)

    ;; ウィンドウ内のカーソル移動
    (defun point-to-top ()
    (interactive)
    (move-to-window-line 0))
    (defun point-to-middle ()
    (interactive)
    (move-to-window-line nil))
    (defun point-to-bottom ()
    (interactive)
    (move-to-window-line -1))
    (global-set-key "\M-," 'point-to-top)
    (global-set-key "\M-." 'point-to-middle)
    (global-set-key "\M-/" 'point-to-bottom)

    ;; goto-lineをM-gに
    (global-set-key-fn "\M-g" (x) (interactive "nLine: ") (goto-line x))

    ;; C-x pで前のウィンドウへ移動(C-x oの逆)
    (global-set-key-fn "\C-xp" nil (interactive) (other-window -1))

    ;;====================
    ;; Utilities
    ;;====================
    ;; auto-install
    ;; elispのインストールを簡単に
    (require 'auto-install)
    (setq auto-install-directory "~/.emacs.d/elisp/")
    (auto-install-update-emacswiki-package-name t)
    (auto-install-compatibility-setup)
    (ifload auto-install
    (setq auto-install-directory "~/.emacs.d/elisp/")
    (auto-install-update-emacswiki-package-name t)
    (auto-install-compatibility-setup))

    ;; 終了してもカーソル位置を記録
    (ifload session
    (add-hook 'after-init-hook 'session-initialize)
    (setq session-initialize '(de-saveplace session keys menus places)
    session-globals-include '((kill-ring 50)
    (session-file-alist 500 t)
    (file-name-history 10000))
    session-globals-max-string 100000000
    history-length t
    session-undo-check -1))

    ;; outputz
    (require 'outputz)
    (setq outputz-key "My Private Key")
    (setq outputz-uri "http://%s/emacs.%s")
    (global-outputz-mode t)
    (remove-hook 'after-save-hook 'outputz)
    (add-hook 'kill-buffer-hook 'outputz)
    (defvar my-before-kill-emacs-hook nil
    "Hook to run before `save-buffers-kill-emacs'.")
    (defun outputz-buffers ()
    (dolist (buf (buffer-list))
    (with-current-buffer buf
    (outputz))))
    (add-hook 'my-before-kill-emacs-hook 'outputz-buffers)
    (defadvice save-buffers-kill-emacs (around before-kill-emacs-hook activate)
    (run-hook 'my-before-kill-emacs-hook)
    (sleep-for 1)
    ad-do-it)

    (defadvice outputz (before outputz-setup-uri)
    (setq outputz-uri
    (format outputz-uri
    (replace-regexp-in-string "-mode$" "" (symbol-name major-mode))
    (system-name))))
    (ad-activate-regexp "outputz-setup-uri")
    (ifload outputz
    (setq outputz-key "DfiWDT31oxi.")
    (setq outputz-uri "http://%s/emacs.%s")
    (global-outputz-mode t)

    (defadvice outputz (before outputz-setup-uri)
    (setq outputz-uri
    (format outputz-uri
    (replace-regexp-in-string "-mode$" "" (symbol-name major-mode))
    (system-name))))
    (ad-activate-regexp "outputz-setup-uri"))

    ;; anything
    (require 'anything-startup)
    (ifload anything-startup)

    ;; cua-mode
    ;; 矩形選択を簡単に
    (cua-mode t)
    (setq cua-enable-cua-keys nil)

    ;; current-string-to
    (require 'current-string-to)
    (ifload current-string-to)

    ;; auto-complete
    ;; 補完候補を自動ポップアップ
    (require 'auto-complete)
    (global-auto-complete-mode t)
    (add-to-list 'ac-modes 'js-mode)
    (ifload auto-complete
    (global-auto-complete-mode t)
    (add-to-list 'ac-modes 'js-mode))

    ;; auto-insert
    ;; ファイル形式に応じて自動でテンプレート挿入
    @@ -238,25 +258,25 @@

    ;; shell-pop
    ;; C-tでshellをポップアップ
    (require 'shell-pop)
    (shell-pop-set-internal-mode "ansi-term")
    (shell-pop-set-internal-mode-shell "/bin/zsh")
    (defvar ansi-term-after-hook nil)
    (add-hook-fn 'ansi-term-after-hook
    (define-key term-raw-map "\C-t" 'shell-pop))
    (defadvice ansi-term (after ansi-term-after-advice (org))
    "run hook as after advice"
    (run-hooks 'ansi-term-after-hook))
    (ad-activate 'ansi-term)
    (global-set-key "\C-t" 'shell-pop)
    (ifload shell-pop
    (shell-pop-set-internal-mode "ansi-term")
    (shell-pop-set-internal-mode-shell "/bin/zsh")
    (defvar ansi-term-after-hook nil)
    (add-hook-fn 'ansi-term-after-hook
    (define-key term-raw-map "\C-t" 'shell-pop))
    (defadvice ansi-term (after ansi-term-after-advice (org))
    "run hook as after advice"
    (run-hooks 'ansi-term-after-hook))
    (ad-activate 'ansi-term)
    (global-set-key "\C-t" 'shell-pop))

    ;; ElScreen
    ;; EmacsでGNU screen風のインターフェイスを使う
    (setq elscreen-prefix-key "\C-z")
    (require 'elscreen)
    (if window-system
    (define-key elscreen-map "\C-z" 'iconify-or-deiconify-frame)
    (define-key elscreen-map "\C-z" 'suspend-emacs))
    (ifload elscreen
    (setq elscreen-prefix-key "\C-z")
    (if window-system
    (define-key elscreen-map "\C-z" 'iconify-or-deiconify-frame)
    (define-key elscreen-map "\C-z" 'suspend-emacs)))

    ;; dmacro
    ;; 2回同じ操作をすると自動でマクロ登録
    @@ -266,65 +286,67 @@

    ;; global
    ;; 関数定義に飛ぶ (gtags)
    (autoload 'gtags-mode "gtags" "" t)
    (setq gtags-mode-hook
    (lambda ()
    (local-set-key "\C-cf" 'gtags-find-tag)
    (local-set-key "\M-r" 'gtags-find-rtag)
    (local-set-key "\M-s" 'gtags-find-symbol)
    (local-set-key "\C-cp" 'gtags-pop-stack)))
    (add-hook-fn 'c-mode-common-hook
    (gtags-mode 1)
    (gtags-make-complete-list))
    (lazyload (gtags-mode) "gtags"
    (add-hook-fn 'c-mode-common-hook
    (gtags-mode 1)
    (gtags-make-complete-list))
    (setq gtags-mode-hook
    (lambda ()
    (local-set-key "\C-cf" 'gtags-find-tag)
    (local-set-key "\M-r" 'gtags-find-rtag)
    (local-set-key "\M-s" 'gtags-find-symbol)
    (local-set-key "\C-cp" 'gtags-pop-stack))))

    ;; w3m
    (load "w3m")
    (setq w3m-use-cookies t)
    (setq browse-url-browser-function 'w3m-browse-url)
    (lazyload (w3m w3m-browse-url w3m-find-file w3m-search) "w3m"
    (setq w3m-use-cookies t)
    (setq browse-url-browser-function 'w3m-browse-url))

    ;; org-mode
    ;; Emacsでメモ・TODO管理
    (require 'org-install)
    (define-key global-map "\C-cl" 'org-store-link)
    (define-key global-map "\C-ca" 'org-agenda)
    (define-key global-map "\C-cr" 'org-remember)
    (setq org-startup-truncated nil
    org-return-follows-link t)
    (org-remember-insinuate)
    (setq org-directory "~/Dropbox/memo/")
    (setq org-default-notes-file (concat org-directory "notes.org"))
    (setq org-agenda-files `(,org-default-notes-file))
    (setq org-remember-templates
    '(("Todo" ?t "** TODO %?\n %i\n %a\n %t" nil "Inbox")
    ("Bug" ?b "** TODO %? :bug:\n %i\n %a\n %t" nil "Inbox")
    ("Idea" ?i "** %?\n %i\n %a\n %t" nil "New Ideas")))
    (lazyload (org-store-link org-agenda org-remember) "org-install"
    (define-key global-map "\C-cl" 'org-store-link)
    (define-key global-map "\C-ca" 'org-agenda)
    (define-key global-map "\C-cr" 'org-remember)
    (setq org-startup-truncated nil
    org-return-follows-link t)
    (org-remember-insinuate)
    (setq org-directory "~/Dropbox/memo/")
    (setq org-default-notes-file (concat org-directory "notes.org"))
    (setq org-agenda-files `(,org-default-notes-file))
    (setq org-remember-templates
    '(("Todo" ?t "** TODO %?\n %i\n %a\n %t" nil "Inbox")
    ("Bug" ?b "** TODO %? :bug:\n %i\n %a\n %t" nil "Inbox")
    ("Idea" ?i "** %?\n %i\n %a\n %t" nil "New Ideas"))))

    ;;; color-moccur.el
    (require 'color-moccur)
    (setq moccur-split-word t) ;; 複数の検索語や、特定のフェイスのみマッチ
    (ifload color-moccur
    (setq moccur-split-word t)) ;; 複数の検索語や、特定のフェイスのみマッチ
    ;; migemo
    (if (require 'migemo nil t)
    (ifload migemo
    (setq moccur-use-migemo t))

    ;; anything-c-moccur
    (require 'anything-c-moccur)
    (setq anything-c-moccur-anything-idle-delay 0.2 ;`anything-idle-delay'
    anything-c-moccur-higligt-info-line-flag t ; `anything-c-moccur-dmoccur'などのコマンドでバッファ情報をハイライト
    anything-c-moccur-enable-auto-look-flag t ; 現在選択中の候補の位置を他のwindowに表示
    anything-c-moccur-enable-initial-pattern t) ; `anything-c-moccur-occur-by-moccur'の起動時にポイントの位置の単語を初期パターンにする
    (lazyload (anything-c-moccur-occur-by-moccur
    anything-c-moccur-dmoccur
    anything-c-moccur-dired-do-moccur-by-moccur) "anything-c-moccur"
    (setq anything-c-moccur-anything-idle-delay 0.2 ;`anything-idle-delay'
    anything-c-moccur-higligt-info-line-flag t ; `anything-c-moccur-dmoccur'などのコマンドでバッファ情報をハイライト
    anything-c-moccur-enable-auto-look-flag t ; 現在選択中の候補の位置を他のwindowに表示
    anything-c-moccur-enable-initial-pattern t)) ; `anything-c-moccur-occur-by-moccur'の起動時にポイントの位置の単語を初期パターンにする

    (global-set-key (kbd "M-o") 'anything-c-moccur-occur-by-moccur) ;バッファ内検索
    (global-set-key (kbd "C-M-o") 'anything-c-moccur-dmoccur) ;ディレクトリ
    (add-hook-fn 'dired-mode-hook ;dired
    (local-set-key (kbd "O") 'anything-c-moccur-dired-do-moccur-by-moccur))
    (local-set-key (kbd "O") 'anything-c-moccur-dired-do-moccur-by-moccur))

    ;;====================
    ;; Visual
    ;;====================
    ;; color-themeの設定
    (require 'color-theme)
    (color-theme-initialize)
    (color-theme-arjen)
    (ifload color-theme
    (color-theme-initialize)
    (color-theme-arjen))

    ;; キーワードのカラー表示を有効化
    (global-font-lock-mode t)
    @@ -339,11 +361,11 @@
    (show-paren-mode 1)

    ;; 全角空白、Tab、改行表示
    (require 'jaspace)
    (setq jaspace-alternate-jaspace-string ""
    jaspace-alternate-eol-string "\n"
    jaspace-highlight-tabs t)
    (append-to-list jaspace-mode (mapcar 'car my-fav-modes))
    (ifload jaspace
    (setq jaspace-alternate-jaspace-string ""
    jaspace-alternate-eol-string "\n"
    jaspace-highlight-tabs t)
    (append-to-list jaspace-mode (mapcar 'car my-fav-modes)))

    ;; カーソル行をハイライト
    (defface hlline-face
    @@ -362,91 +384,60 @@
    ;;====================
    ;; Window System
    ;;====================
    (defun my-set-fontset ()
    (create-fontset-from-ascii-font
    "-apple-monaco-medium-normal-normal-*-12-*" nil "hirakaku12")

    (set-default-font "fontset-hirakaku12")
    (add-to-list 'default-frame-alist '(font . "fontset-hirakaku12"))

    (set-fontset-font
    "fontset-hirakaku12"
    'japanese-jisx0208
    "-apple-hiragino_kaku_gothic_pro-medium-normal-normal-*-14-*-iso10646-1")

    (set-fontset-font
    "fontset-hirakaku12"
    'jisx0201
    "-apple-hiragino_kaku_gothic_pro-medium-normal-normal-*-14-*-iso10646-1")

    (set-fontset-font
    "fontset-hirakaku12"
    'japanese-jisx0212
    "-apple-hiragino_kaku_gothic_pro-medium-normal-normal-*-14-*-iso10646-1")

    (set-fontset-font
    "fontset-hirakaku12"
    'katakana-jisx0201
    "-apple-hiragino_kaku_gothic_pro-medium-normal-normal-*-14-*-iso10646-1"))

    (when window-system
    (server-start) ;; Emacs serverを起動
    (set-frame-parameter nil 'alpha 80) ;; フレームを透過
    (menu-bar-mode 0) ;; メニューバーを消す
    (tool-bar-mode 0) ;; ツールバーを消す
    (toggle-scroll-bar nil) ;; スクロールバーを消す
    (if (= emacs-major-version 23) (my-set-fontset))) ;; フォント設定
    (toggle-scroll-bar nil)) ;; スクロールバーを消す

    ;;====================
    ;; Syntax
    ;;====================
    ;; lisp (slime)
    (require 'slime-autoloads)
    (setq slime-lisp-implementations
    `((sbcl ("/usr/local/bin/sbcl"))))
    (add-hook-fn 'lisp-mode-hook
    (cond ((not (featurep 'slime))
    (require 'slime)
    (normal-mode))))
    (eval-after-load "slime"
    '(slime-setup '(slime-fancy slime-banner)))
    (lazyload (slime-autoloads) "slime-autoloads"
    (setq slime-lisp-implementations
    `((sbcl ("/usr/local/bin/sbcl"))))
    (add-hook-fn 'lisp-mode-hook
    (cond ((not (featurep 'slime))
    (require 'slime)
    (normal-mode))))
    (eval-after-load "slime"
    '(slime-setup '(slime-fancy slime-banner))))

    ;; php-mode
    (autoload 'php-mode "php-mode")
    (setq php-mode-force-pear t)
    (add-hook-fn 'php-mode-hook
    (require 'php-completion)
    (php-completion-mode t)
    (define-key php-mode-map (kbd "C-o") 'phpcmp-complete)
    (when (require 'auto-complete nil t)
    (make-variable-buffer-local 'ac-sources)
    (add-to-list 'ac-sources 'ac-source-php-completion)
    (auto-complete-mode t)))

    (add-hook-fn 'php-mode-hook
    (setq c-basic-offset 2)
    (setq c-tab-width 2)
    (setq c-indent-level 2)
    (setq tab-width 2)
    (setq-default tab-width 2)
    (c-set-offset 'substatement-open 0)
    (c-set-offset 'block-open 0)
    (c-set-offset 'case-label '+)
    (c-set-offset 'statement-case-open 0))

    (require 'symfony)
    (lazyload (php-mode) "php-mode"
    (add-hook-fn 'php-mode-hook
    (require 'php-completion)
    (php-completion-mode t)
    (define-key php-mode-map (kbd "C-o") 'phpcmp-complete)
    (when (require 'auto-complete nil t)
    (make-variable-buffer-local 'ac-sources)
    (add-to-list 'ac-sources 'ac-source-php-completion)
    (auto-complete-mode t))
    (setq c-basic-offset 2
    c-tab-width 2
    c-indent-level 2
    tab-width 2)
    (setq-default tab-width 2)
    (c-set-offset 'substatement-open 0)
    (c-set-offset 'block-open 0)
    (c-set-offset 'case-label '+)
    (c-set-offset 'statement-case-open 0))
    (setq php-mode-force-pear t))

    (ifload symfony)

    ;; ruby
    (add-to-list 'interpreter-mode-alist '("ruby" . ruby-mode))
    (autoload 'run-ruby "inf-ruby" "Run an inferior Ruby process")
    (autoload 'inf-ruby-keys "inf-ruby"
    "Set local key defs for inf-ruby in ruby-mode")
    (add-hook-fn 'ruby-mode-hook (inf-ruby-keys))
    (lazyload (run-ruby inf-ruby-keys) "inf-ruby"
    (add-hook-fn 'ruby-mode-hook (inf-ruby-keys)))

    (require 'ruby-electric)
    (add-hook-fn 'ruby-mode-hook (ruby-electric-mode t))
    (require 'ruby-block)
    (ruby-block-mode t)
    (setq ruby-block-highlight-toggle t)
    (lazyload (ruby-electric-mode) "ruby-electric"
    (add-hook-fn 'ruby-mode-hook (ruby-electric-mode t)))
    (lazyload (ruby-block-mode) "ruby-block"
    (ruby-block-mode t)
    (setq ruby-block-highlight-toggle t))

    (autoload 'rubydb "rubydb3x"
    "run rubydb on program file in buffer *gud-file*.
    @@ -464,37 +455,37 @@ and source-file directory for your debugger." t)
    (setq cssm-indent-function 'cssm-c-style-indenter)

    ;; mmm-mode
    (require 'mmm-auto)
    (setq mmm-global-mode 'maybe)
    (mmm-add-classes
    '((embedded-css
    :submode css-mode
    :front "<style[^>] *>"
    :back "<style>")))
    (mmm-add-mode-ext-class nil "\\.html\\'" 'embedded-css)
    (ifload mmm-auto
    (setq mmm-global-mode 'maybe)
    (mmm-add-classes
    '((embedded-css
    :submode css-mode
    :front "<style[^>] *>"
    :back "<style>")))
    (mmm-add-mode-ext-class nil "\\.html\\'" 'embedded-css))

    ;; AUCTeX
    (require 'tex-site)
    (require 'tex-jp)
    (setq TeX-default-mode 'japanese-latex-mode)
    (setq japanese-LaTeX-command-default "platex")
    (setq japanese-LaTeX-default-style "jarticle")
    (setq kinsoku-limit 10)
    (setq LaTeX-indent-level 4)
    (setq LaTeX-item-indent 2)
    (setq TeX-output-view-style '(("^dvi$" "." "pxdvi '%d'")))
    (setq preview-image-type 'dvipng)
    (add-hook-fn 'LaTeX-mode-hook
    (add-to-list 'TeX-command-list
    '("ptex" "%(PDF)ptex %`%S%(PDFout)%(mode)%' %t"
    TeX-run-TeX nil (plain-tex-mode) :help "Run ASCII pTeX"))
    (add-to-list 'TeX-command-list
    '("platex" "%(PDF)platex %`%S%(PDFout)%(mode)%' %t"
    TeX-run-TeX nil (latex-mode) :help "Run ASCII pLaTeX"))
    (add-to-list 'TeX-command-list
    '("pdfview" "okular '%s.pdf' " TeX-run-command t nil))
    (add-to-list 'TeX-command-list
    '("pdfbuild" "dvipdfmx -V 4 '%s' " TeX-run-command t nil)))
    (lazyload (japanese-latex-mode) "tex-site"
    (setq TeX-default-mode 'japanese-latex-mode)
    (setq japanese-LaTeX-command-default "platex")
    (setq japanese-LaTeX-default-style "jarticle")
    (setq kinsoku-limit 10)
    (setq LaTeX-indent-level 4)
    (setq LaTeX-item-indent 2)
    (setq TeX-output-view-style '(("^dvi$" "." "pxdvi '%d'")))
    (setq preview-image-type 'dvipng)
    (add-hook-fn 'LaTeX-mode-hook
    (require 'tex-jp)
    (add-to-list 'TeX-command-list
    '("ptex" "%(PDF)ptex %`%S%(PDFout)%(mode)%' %t"
    TeX-run-TeX nil (plain-tex-mode) :help "Run ASCII pTeX"))
    (add-to-list 'TeX-command-list
    '("platex" "%(PDF)platex %`%S%(PDFout)%(mode)%' %t"
    TeX-run-TeX nil (latex-mode) :help "Run ASCII pLaTeX"))
    (add-to-list 'TeX-command-list
    '("pdfview" "okular '%s.pdf' " TeX-run-command t nil))
    (add-to-list 'TeX-command-list
    '("pdfbuild" "dvipdfmx -V 4 '%s' " TeX-run-command t nil))))

    ;; nxml-mode
    (setq nxml-slash-auto-complete-flag t)
    @@ -508,9 +499,6 @@ and source-file directory for your debugger." t)
    ;; Syntax Checking
    ;;====================
    ;; flymake
    (require 'flymake)
    (global-set-key "\C-cd" 'flymake-display-err-menu-for-current-line)

    (defmacro def-flymake-init (name masks exec error)
    (let ((init-name (intern (format "flymake-%s-init" name))))
    `(when (not (fboundp ',init-name))
    @@ -530,16 +518,22 @@ and source-file directory for your debugger." t)
    (cons ',error flymake-err-line-patterns)))
    (add-hook-fn ',(intern (format "%s-mode-hook" name)) (flymake-mode t)))))

    ;; JavaScript
    (def-flymake-init js ("\.js$")
    `("jsl" ("-process" ,local-file))
    ("\(.+\)(\([0-9]+\)): \(?:lint \)?\(\(?:Warning\|SyntaxError\):.+\)" 1 2 nil 3))
    (lazyload (flymake-mode) "flymake"
    (global-set-key "\C-cd" 'flymake-display-err-menu-for-current-line)

    (eval-after-load "flymake"
    '(progn

    ;; JavaScript
    (def-flymake-init js ("\.js$")
    `("jsl" ("-process" ,local-file))
    ("\(.+\)(\([0-9]+\)): \(?:lint \)?\(\(?:Warning\|SyntaxError\):.+\)" 1 2 nil 3))

    ;; PHP
    (def-flymake-init php ("\.php[345]?")
    `("php" ("-f" ,local-file "-l"))
    ("\(\(?:Parse error\|Fatal error\|Warning\): .*\) in \(.*\) on line \([0-9]+\)" 2 3 nil 1))
    ;; PHP
    (def-flymake-init php ("\.php[345]?")
    `("php" ("-f" ,local-file "-l"))
    ("\(\(?:Parse error\|Fatal error\|Warning\): .*\) in \(.*\) on line \([0-9]+\)" 2 3 nil 1))

    ;; Ruby
    (def-flymake-init ruby ()
    `("ruby" ("-c" ,local-file)) nil)
    ;; Ruby
    (def-flymake-init ruby ()
    `("ruby" ("-c" ,local-file)) nil))))
  13. fukamachi revised this gist Feb 15, 2010. 1 changed file with 30 additions and 61 deletions.
    91 changes: 30 additions & 61 deletions .emacs.el
    Original file line number Diff line number Diff line change
    @@ -1,44 +1,14 @@
    ;;====================
    ;; Functions
    ;;====================
    (eval-when-compile (require 'cl))
    (require 'cl)

    (defmacro add-hook-fn (name &rest body)
    `(add-hook ,name (lambda () ,@body)))

    (defmacro append-to-list (to lst)
    `(setq ,to (append ,lst ,to)))

    (defun g!-symbol-p (s)
    (and (symbolp s)
    (> (length (symbol-name s)) 2)
    (string= (symbol-name s)
    "G!"
    :start1 0
    :end1 2)))

    (defun flatten (x)
    (labels ((rec (x acc)
    (cond ((null x) acc)
    ((atom x) (cons x acc))
    (t (rec
    (car x)
    (rec (cdr x) acc))))))
    (rec x nil)))

    (defmacro defmacro/g! (name args &rest body)
    (let ((syms (remove-duplicates
    (remove-if-not 'g!-symbol-p
    (flatten body)))))
    `(defmacro ,name ,args
    (let ,(mapcar
    (lambda (s)
    `(,s (gensym ,(subseq
    (symbol-name s)
    2))))
    syms)
    ,@body))))

    ;;====================
    ;; General
    ;;====================
    @@ -75,12 +45,6 @@
    ;; C-kで行全体を削除
    (setq kill-whole-line t)

    ;; カーソル移動を物理行単位に
    (require 'physical-line)
    (setq-default physical-line-mode t)
    ;; dired-modeは論理行移動のままにする
    (setq physical-line-ignoring-mode-list '(dired-mode))

    ;; 終了してもカーソル位置を記録
    (require 'session)
    (setq session-initialize '(de-saveplace session keys menus places)
    @@ -111,7 +75,6 @@

    ;; *scratch*を消さない
    (defun my-make-scratch (&optional arg)
    (interactive)
    ;; "*scratch*" を作成して buffer-list に放り込む
    (set-buffer (get-buffer-create "*scratch*"))
    (funcall initial-major-mode)
    @@ -223,17 +186,39 @@
    ;; outputz
    (require 'outputz)
    (setq outputz-key "My Private Key")
    (setq outputz-uri "http://emacs.jp/%s")
    (setq outputz-uri "http://%s/emacs.%s")
    (global-outputz-mode t)
    (remove-hook 'after-save-hook 'outputz)
    (add-hook 'kill-buffer-hook 'outputz)
    (defvar my-before-kill-emacs-hook nil
    "Hook to run before `save-buffers-kill-emacs'.")
    (defun outputz-buffers ()
    (dolist (buf (buffer-list))
    (with-current-buffer buf
    (outputz))))
    (add-hook 'my-before-kill-emacs-hook 'outputz-buffers)
    (defadvice save-buffers-kill-emacs (around before-kill-emacs-hook activate)
    (run-hook 'my-before-kill-emacs-hook)
    (sleep-for 1)
    ad-do-it)

    (defadvice outputz (before outputz-setup-uri)
    (setq outputz-uri
    (format outputz-uri
    (replace-regexp-in-string "-mode$" "" (symbol-name major-mode))
    (system-name))))
    (ad-activate-regexp "outputz-setup-uri")

    ;; anything
    (require 'anything-startup)

    ;; sense-region
    ;; cua-mode
    ;; 矩形選択を簡単に
    (autoload 'sense-region-on "sense-region"
    "System to toggle region and rectangle." t nil)
    (sense-region-on)
    (cua-mode t)
    (setq cua-enable-cua-keys nil)

    ;; current-string-to
    (require 'current-string-to)

    ;; auto-complete
    ;; 補完候補を自動ポップアップ
    @@ -244,8 +229,8 @@
    ;; auto-insert
    ;; ファイル形式に応じて自動でテンプレート挿入
    (add-hook 'find-file-hooks 'auto-insert)
    (setq auto-insert-directory "~/.emacs.d/templates")
    (setq auto-insert-alist
    (setq auto-insert-directory "~/.emacs.d/templates"
    auto-insert-alist
    '((perl-mode . "perl-template.pl")
    (html-mode . "html-template.html")
    ("base.css" . "base.css")
    @@ -273,22 +258,6 @@
    (define-key elscreen-map "\C-z" 'iconify-or-deiconify-frame)
    (define-key elscreen-map "\C-z" 'suspend-emacs))

    (defmacro elscreen-create-automatically (ad-do-it)
    `(unless (elscreen-one-screen-p)
    ,ad-do-it
    (elscreen-create)
    (elscreen-notify-screen-modification 'force-immediately)
    (elscreen-message "New screen is automatically created")))

    (defadvice elscreen-next (around elscreen-create-automatically activate)
    (elscreen-create-automatically ad-do-it))

    (defadvice elscreen-previous (around elscreen-create-automatically activate)
    (elscreen-create-automatically ad-do-it))

    (defadvice elscreen-toggle (around elscreen-create-automatically activate)
    (elscreen-create-automatically ad-do-it))

    ;; dmacro
    ;; 2回同じ操作をすると自動でマクロ登録
    (defconst *dmacro-key* "\C-q")
  14. fukamachi created this gist Feb 15, 2010.
    576 changes: 576 additions & 0 deletions .emacs.el
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,576 @@
    ;;====================
    ;; Functions
    ;;====================
    (eval-when-compile (require 'cl))

    (defmacro add-hook-fn (name &rest body)
    `(add-hook ,name (lambda () ,@body)))

    (defmacro append-to-list (to lst)
    `(setq ,to (append ,lst ,to)))

    (defun g!-symbol-p (s)
    (and (symbolp s)
    (> (length (symbol-name s)) 2)
    (string= (symbol-name s)
    "G!"
    :start1 0
    :end1 2)))

    (defun flatten (x)
    (labels ((rec (x acc)
    (cond ((null x) acc)
    ((atom x) (cons x acc))
    (t (rec
    (car x)
    (rec (cdr x) acc))))))
    (rec x nil)))

    (defmacro defmacro/g! (name args &rest body)
    (let ((syms (remove-duplicates
    (remove-if-not 'g!-symbol-p
    (flatten body)))))
    `(defmacro ,name ,args
    (let ,(mapcar
    (lambda (s)
    `(,s (gensym ,(subseq
    (symbol-name s)
    2))))
    syms)
    ,@body))))

    ;;====================
    ;; General
    ;;====================
    ;; load-pathを追加
    (append-to-list load-path
    '("/usr/local/share/emacs/site-lisp"
    "/opt/local/share/emacs/site-lisp"
    "/opt/local/share/emacs/site-lisp/slime"
    "/opt/local/share/emacs/site-lisp/apel"
    "/opt/local/share/emacs/23.1/site-lisp/emu"
    "~/.emacs.d/elisp"))

    (append-to-list exec-path
    '("/usr/bin" "/bin"
    "/usr/sbin" "/sbin" "/usr/local/bin"
    "/usr/X11/bin"))

    ;; テキストエンコーディングとしてUTF-8を優先使用
    (prefer-coding-system 'utf-8)

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

    ;; zshを使う
    (setq shell-file-name "/bin/zsh")

    ;; Tabの代わりにスペースでインデント
    (setq-default indent-tabs-mode nil)
    (setq-default tab-width 2 indent-tabs-mode nil)

    ;; shell-modeでpasswordを隠す
    (add-hook 'comint-output-filter-functions 'comint-watch-for-password-prompt)

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

    ;; カーソル移動を物理行単位に
    (require 'physical-line)
    (setq-default physical-line-mode t)
    ;; dired-modeは論理行移動のままにする
    (setq physical-line-ignoring-mode-list '(dired-mode))

    ;; 終了してもカーソル位置を記録
    (require 'session)
    (setq session-initialize '(de-saveplace session keys menus places)
    session-globals-include '((kill-ring 50)
    (session-file-alist 500 t)
    (file-name-history 10000))
    session-globals-max-string 100000000
    history-length t
    session-undo-check -1)
    (add-hook 'after-init-hook 'session-initialize)

    ;; "yes or no"を"y or n"に
    (fset 'yes-or-no-p 'y-or-n-p)

    ;; minibufferでC-wで前の単語を削除
    (define-key minibuffer-local-completion-map "\C-w" 'backward-kill-word)

    ;; 改行コードを表示
    (setq eol-mnemonic-dos "(CRLF)"
    eol-mnemonic-mac "(CR)"
    eol-mnemonic-unix "(LF)")

    ;; 1行ずつスクロール
    (setq scroll-conservatively 35
    scroll-margin 0
    scroll-step 1)
    (setq comint-scroll-show-maximum-output t) ;; for shell-mode

    ;; *scratch*を消さない
    (defun my-make-scratch (&optional arg)
    (interactive)
    ;; "*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-fn 'kill-buffer-query-functions
    ;; *scratch* バッファで kill-buffer したら内容を消去するだけにする
    (if (string= "*scratch*" (buffer-name))
    (progn (my-make-scratch 0) nil)
    t))

    (add-hook-fn 'after-save-hook
    ;; *scratch* バッファの内容を保存したら *scratch* バッファを新しく作る
    (unless (member (get-buffer "*scratch*") (buffer-list))
    (my-make-scratch 1)))

    ;; C-x bでミニバッファにバッファ候補を表示
    (iswitchb-mode t)
    (iswitchb-default-keybindings)

    ;; 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)

    ;; \C-aでインデントを飛ばした行頭に移動
    (defun beginning-of-indented-line (current-point)
    "インデント文字を飛ばした行頭に戻る。ただし、ポイントから行頭までの間にインデント文字しかない場合は、行頭に戻る。"
    (interactive "d")
    (if (string-match
    "^[ ¥t]+$"
    (save-excursion
    (buffer-substring-no-properties
    (progn (beginning-of-line) (point))
    current-point)))
    (beginning-of-line)
    (back-to-indentation)))

    (defun beginning-of-visual-indented-line (current-point)
    "インデント文字を飛ばした行頭に戻る。ただし、ポイントから行頭までの間にインデント文 字しかない場合は、行頭に戻る。"
    (interactive "d")
    (let ((vhead-pos (save-excursion (progn (beginning-of-visual-line) (point))))
    (head-pos (save-excursion (progn (beginning-of-line) (point)))))
    (cond
    ;; 物理行の1行目にいる場合
    ((eq vhead-pos head-pos)
    (if (string-match
    "^[ ¥t]+$"
    (buffer-substring-no-properties vhead-pos current-point))
    (beginning-of-visual-line)
    (back-to-indentation)))
    ;; 物理行の2行目以降の先頭にいる場合
    ((eq vhead-pos current-point)
    (backward-char)
    (beginning-of-visual-indented-line (point)))
    ;; 物理行の2行目以降の途中にいる場合
    (t (beginning-of-visual-line)))))

    (global-set-key "\C-a" 'beginning-of-visual-indented-line)
    (global-set-key "\C-e" 'end-of-visual-line)

    ;;; for Mac
    ;; Command-Key and Option-Key
    (setq ns-command-modifier 'meta)
    (setq ns-alternate-modifier 'super)

    ;;; for Kayac Emacs
    ;; fullscreen
    (global-set-key (kbd "M-<RET>") 'ns-toggle-fullscreen)

    ;; よく使うモード
    (setq my-fav-modes
    '((scheme-mode . "\\.scm$")
    (php-mode . "\\.php[45]?$")
    (yaml-mode . "\\.ya?ml$")
    (js-mode . "\\.js$")
    (ruby-mode . "\\.rb$")
    (text-mode . "\\.txt$")
    (fundamental-mode . nil)
    (LaTeX-mode . "\\.tex$")
    (org-mode . "\\.org$")
    (css-mode . "\\.css$")
    (nxml-mode . "\\.\(xml\|svg\|wsdl\|xslt\|wsdd\|xsl\|rng\|xhtml\)\'")))

    ;; auto-mode-alist
    (loop for (k . v) in my-fav-modes
    do (unless (null v) (add-to-list 'auto-mode-alist (cons v k))))

    ;;====================
    ;; Utilities
    ;;====================
    ;; auto-install
    ;; elispのインストールを簡単に
    (require 'auto-install)
    (setq auto-install-directory "~/.emacs.d/elisp/")
    (auto-install-update-emacswiki-package-name t)
    (auto-install-compatibility-setup)

    ;; outputz
    (require 'outputz)
    (setq outputz-key "My Private Key")
    (setq outputz-uri "http://emacs.jp/%s")
    (global-outputz-mode t)

    ;; anything
    (require 'anything-startup)

    ;; sense-region
    ;; 矩形選択を簡単に
    (autoload 'sense-region-on "sense-region"
    "System to toggle region and rectangle." t nil)
    (sense-region-on)

    ;; auto-complete
    ;; 補完候補を自動ポップアップ
    (require 'auto-complete)
    (global-auto-complete-mode t)
    (add-to-list 'ac-modes 'js-mode)

    ;; auto-insert
    ;; ファイル形式に応じて自動でテンプレート挿入
    (add-hook 'find-file-hooks 'auto-insert)
    (setq auto-insert-directory "~/.emacs.d/templates")
    (setq auto-insert-alist
    '((perl-mode . "perl-template.pl")
    (html-mode . "html-template.html")
    ("base.css" . "base.css")
    (css-mode . "css-template.css")))

    ;; shell-pop
    ;; C-tでshellをポップアップ
    (require 'shell-pop)
    (shell-pop-set-internal-mode "ansi-term")
    (shell-pop-set-internal-mode-shell "/bin/zsh")
    (defvar ansi-term-after-hook nil)
    (add-hook-fn 'ansi-term-after-hook
    (define-key term-raw-map "\C-t" 'shell-pop))
    (defadvice ansi-term (after ansi-term-after-advice (org))
    "run hook as after advice"
    (run-hooks 'ansi-term-after-hook))
    (ad-activate 'ansi-term)
    (global-set-key "\C-t" 'shell-pop)

    ;; ElScreen
    ;; EmacsでGNU screen風のインターフェイスを使う
    (setq elscreen-prefix-key "\C-z")
    (require 'elscreen)
    (if window-system
    (define-key elscreen-map "\C-z" 'iconify-or-deiconify-frame)
    (define-key elscreen-map "\C-z" 'suspend-emacs))

    (defmacro elscreen-create-automatically (ad-do-it)
    `(unless (elscreen-one-screen-p)
    ,ad-do-it
    (elscreen-create)
    (elscreen-notify-screen-modification 'force-immediately)
    (elscreen-message "New screen is automatically created")))

    (defadvice elscreen-next (around elscreen-create-automatically activate)
    (elscreen-create-automatically ad-do-it))

    (defadvice elscreen-previous (around elscreen-create-automatically activate)
    (elscreen-create-automatically ad-do-it))

    (defadvice elscreen-toggle (around elscreen-create-automatically activate)
    (elscreen-create-automatically ad-do-it))

    ;; dmacro
    ;; 2回同じ操作をすると自動でマクロ登録
    (defconst *dmacro-key* "\C-q")
    (global-set-key *dmacro-key* 'dmacro-exec)
    (autoload 'dmacro-exec "dmacro" nil t)

    ;; global
    ;; 関数定義に飛ぶ (gtags)
    (autoload 'gtags-mode "gtags" "" t)
    (setq gtags-mode-hook
    (lambda ()
    (local-set-key "\C-cf" 'gtags-find-tag)
    (local-set-key "\M-r" 'gtags-find-rtag)
    (local-set-key "\M-s" 'gtags-find-symbol)
    (local-set-key "\C-cp" 'gtags-pop-stack)))
    (add-hook-fn 'c-mode-common-hook
    (gtags-mode 1)
    (gtags-make-complete-list))

    ;; w3m
    (load "w3m")
    (setq w3m-use-cookies t)
    (setq browse-url-browser-function 'w3m-browse-url)

    ;; org-mode
    ;; Emacsでメモ・TODO管理
    (require 'org-install)
    (define-key global-map "\C-cl" 'org-store-link)
    (define-key global-map "\C-ca" 'org-agenda)
    (define-key global-map "\C-cr" 'org-remember)
    (setq org-startup-truncated nil
    org-return-follows-link t)
    (org-remember-insinuate)
    (setq org-directory "~/Dropbox/memo/")
    (setq org-default-notes-file (concat org-directory "notes.org"))
    (setq org-agenda-files `(,org-default-notes-file))
    (setq org-remember-templates
    '(("Todo" ?t "** TODO %?\n %i\n %a\n %t" nil "Inbox")
    ("Bug" ?b "** TODO %? :bug:\n %i\n %a\n %t" nil "Inbox")
    ("Idea" ?i "** %?\n %i\n %a\n %t" nil "New Ideas")))

    ;;; color-moccur.el
    (require 'color-moccur)
    (setq moccur-split-word t) ;; 複数の検索語や、特定のフェイスのみマッチ
    ;; migemo
    (if (require 'migemo nil t)
    (setq moccur-use-migemo t))

    ;; anything-c-moccur
    (require 'anything-c-moccur)
    (setq anything-c-moccur-anything-idle-delay 0.2 ;`anything-idle-delay'
    anything-c-moccur-higligt-info-line-flag t ; `anything-c-moccur-dmoccur'などのコマンドでバッファ情報をハイライト
    anything-c-moccur-enable-auto-look-flag t ; 現在選択中の候補の位置を他のwindowに表示
    anything-c-moccur-enable-initial-pattern t) ; `anything-c-moccur-occur-by-moccur'の起動時にポイントの位置の単語を初期パターンにする

    (global-set-key (kbd "M-o") 'anything-c-moccur-occur-by-moccur) ;バッファ内検索
    (global-set-key (kbd "C-M-o") 'anything-c-moccur-dmoccur) ;ディレクトリ
    (add-hook-fn 'dired-mode-hook ;dired
    (local-set-key (kbd "O") 'anything-c-moccur-dired-do-moccur-by-moccur))

    ;;====================
    ;; Visual
    ;;====================
    ;; color-themeの設定
    (require 'color-theme)
    (color-theme-initialize)
    (color-theme-arjen)

    ;; キーワードのカラー表示を有効化
    (global-font-lock-mode t)

    ;; 選択範囲をハイライト
    (setq-default transient-mark-mode t)

    ;; バッファ一覧をまともに
    (global-set-key "\C-x\C-b" 'bs-show)

    ;; 対応するカッコをハイライト
    (show-paren-mode 1)

    ;; 全角空白、Tab、改行表示
    (require 'jaspace)
    (setq jaspace-alternate-jaspace-string ""
    jaspace-alternate-eol-string "\n"
    jaspace-highlight-tabs t)
    (append-to-list jaspace-mode (mapcar 'car my-fav-modes))

    ;; カーソル行をハイライト
    (defface hlline-face
    '((((class color)
    (background dark))
    (:background "dark slate gray"))
    (((class color)
    (background light))
    (:background "ForestGreen"))
    (t
    ()))
    "*Face used by hl-line.")
    (setq hl-line-face 'hlline-face)
    (global-hl-line-mode)

    ;;====================
    ;; Window System
    ;;====================
    (defun my-set-fontset ()
    (create-fontset-from-ascii-font
    "-apple-monaco-medium-normal-normal-*-12-*" nil "hirakaku12")

    (set-default-font "fontset-hirakaku12")
    (add-to-list 'default-frame-alist '(font . "fontset-hirakaku12"))

    (set-fontset-font
    "fontset-hirakaku12"
    'japanese-jisx0208
    "-apple-hiragino_kaku_gothic_pro-medium-normal-normal-*-14-*-iso10646-1")

    (set-fontset-font
    "fontset-hirakaku12"
    'jisx0201
    "-apple-hiragino_kaku_gothic_pro-medium-normal-normal-*-14-*-iso10646-1")

    (set-fontset-font
    "fontset-hirakaku12"
    'japanese-jisx0212
    "-apple-hiragino_kaku_gothic_pro-medium-normal-normal-*-14-*-iso10646-1")

    (set-fontset-font
    "fontset-hirakaku12"
    'katakana-jisx0201
    "-apple-hiragino_kaku_gothic_pro-medium-normal-normal-*-14-*-iso10646-1"))

    (when window-system
    (server-start) ;; Emacs serverを起動
    (set-frame-parameter nil 'alpha 80) ;; フレームを透過
    (tool-bar-mode 0) ;; ツールバーを消す
    (toggle-scroll-bar nil) ;; スクロールバーを消す
    (if (= emacs-major-version 23) (my-set-fontset))) ;; フォント設定

    ;;====================
    ;; Syntax
    ;;====================
    ;; lisp (slime)
    (require 'slime-autoloads)
    (setq slime-lisp-implementations
    `((sbcl ("/usr/local/bin/sbcl"))))
    (add-hook-fn 'lisp-mode-hook
    (cond ((not (featurep 'slime))
    (require 'slime)
    (normal-mode))))
    (eval-after-load "slime"
    '(slime-setup '(slime-fancy slime-banner)))

    ;; php-mode
    (autoload 'php-mode "php-mode")
    (setq php-mode-force-pear t)
    (add-hook-fn 'php-mode-hook
    (require 'php-completion)
    (php-completion-mode t)
    (define-key php-mode-map (kbd "C-o") 'phpcmp-complete)
    (when (require 'auto-complete nil t)
    (make-variable-buffer-local 'ac-sources)
    (add-to-list 'ac-sources 'ac-source-php-completion)
    (auto-complete-mode t)))

    (add-hook-fn 'php-mode-hook
    (setq c-basic-offset 2)
    (setq c-tab-width 2)
    (setq c-indent-level 2)
    (setq tab-width 2)
    (setq-default tab-width 2)
    (c-set-offset 'substatement-open 0)
    (c-set-offset 'block-open 0)
    (c-set-offset 'case-label '+)
    (c-set-offset 'statement-case-open 0))

    (require 'symfony)

    ;; ruby
    (add-to-list 'interpreter-mode-alist '("ruby" . ruby-mode))
    (autoload 'run-ruby "inf-ruby" "Run an inferior Ruby process")
    (autoload 'inf-ruby-keys "inf-ruby"
    "Set local key defs for inf-ruby in ruby-mode")
    (add-hook-fn 'ruby-mode-hook (inf-ruby-keys))

    (require 'ruby-electric)
    (add-hook-fn 'ruby-mode-hook (ruby-electric-mode t))
    (require 'ruby-block)
    (ruby-block-mode t)
    (setq ruby-block-highlight-toggle t)

    (autoload 'rubydb "rubydb3x"
    "run rubydb on program file in buffer *gud-file*.
    the directory containing file becomes the initial working directory
    and source-file directory for your debugger." t)

    ;; js2-mode
    (setq js-indent-level 2)

    ;; yaml-mode
    (autoload 'yaml-mode "yaml-mode")

    ;; css-mode
    (autoload 'css-mode "css-mode")
    (setq cssm-indent-function 'cssm-c-style-indenter)

    ;; mmm-mode
    (require 'mmm-auto)
    (setq mmm-global-mode 'maybe)
    (mmm-add-classes
    '((embedded-css
    :submode css-mode
    :front "<style[^>] *>"
    :back "<style>")))
    (mmm-add-mode-ext-class nil "\\.html\\'" 'embedded-css)

    ;; AUCTeX
    (require 'tex-site)
    (require 'tex-jp)
    (setq TeX-default-mode 'japanese-latex-mode)
    (setq japanese-LaTeX-command-default "platex")
    (setq japanese-LaTeX-default-style "jarticle")
    (setq kinsoku-limit 10)
    (setq LaTeX-indent-level 4)
    (setq LaTeX-item-indent 2)
    (setq TeX-output-view-style '(("^dvi$" "." "pxdvi '%d'")))
    (setq preview-image-type 'dvipng)
    (add-hook-fn 'LaTeX-mode-hook
    (add-to-list 'TeX-command-list
    '("ptex" "%(PDF)ptex %`%S%(PDFout)%(mode)%' %t"
    TeX-run-TeX nil (plain-tex-mode) :help "Run ASCII pTeX"))
    (add-to-list 'TeX-command-list
    '("platex" "%(PDF)platex %`%S%(PDFout)%(mode)%' %t"
    TeX-run-TeX nil (latex-mode) :help "Run ASCII pLaTeX"))
    (add-to-list 'TeX-command-list
    '("pdfview" "okular '%s.pdf' " TeX-run-command t nil))
    (add-to-list 'TeX-command-list
    '("pdfbuild" "dvipdfmx -V 4 '%s' " TeX-run-command t nil)))

    ;; nxml-mode
    (setq nxml-slash-auto-complete-flag t)

    ;; git commit
    (add-hook-fn 'server-visit-hook
    (if (string-match "COMMIT_EDITMSG" buffer-file-name)
    (set-buffer-file-coding-system 'utf-8)))

    ;;====================
    ;; Syntax Checking
    ;;====================
    ;; flymake
    (require 'flymake)
    (global-set-key "\C-cd" 'flymake-display-err-menu-for-current-line)

    (defmacro def-flymake-init (name masks exec error)
    (let ((init-name (intern (format "flymake-%s-init" name))))
    `(when (not (fboundp ',init-name))
    ,(unless (null masks)
    `(setq flymake-allowed-file-name-masks
    (append flymake-allowed-file-name-masks
    ',(mapcar (lambda (x) (list x init-name)) masks))))
    (defun ,init-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))))
    ,exec))
    ,(unless (null error)
    `(setq flymake-err-line-patterns
    (cons ',error flymake-err-line-patterns)))
    (add-hook-fn ',(intern (format "%s-mode-hook" name)) (flymake-mode t)))))

    ;; JavaScript
    (def-flymake-init js ("\.js$")
    `("jsl" ("-process" ,local-file))
    ("\(.+\)(\([0-9]+\)): \(?:lint \)?\(\(?:Warning\|SyntaxError\):.+\)" 1 2 nil 3))

    ;; PHP
    (def-flymake-init php ("\.php[345]?")
    `("php" ("-f" ,local-file "-l"))
    ("\(\(?:Parse error\|Fatal error\|Warning\): .*\) in \(.*\) on line \([0-9]+\)" 2 3 nil 1))

    ;; Ruby
    (def-flymake-init ruby ()
    `("ruby" ("-c" ,local-file)) nil)