Created
February 15, 2010 02:59
-
-
Save fukamachi/304391 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| ;;==================== | |
| ;; 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))) | |
| (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)) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment