Created
February 15, 2010 02:59
-
-
Save fukamachi/304391 to your computer and use it in GitHub Desktop.
Revisions
-
fukamachi revised this gist
Dec 7, 2010 . 2 changed files with 1100 additions and 683 deletions.There are no files selected for viewing
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 charactersOriginal file line number Diff line number Diff line change @@ -1,684 +1,6 @@ (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)) (if (file-exists-p (locate-library "init")) (load (locate-library "init") nil t nil)) 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 charactersOriginal 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) -
fukamachi revised this gist
May 25, 2010 . 1 changed file with 273 additions and 132 deletions.There are no files selected for viewing
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 charactersOriginal file line number Diff line number Diff line change @@ -1,9 +1,24 @@ ;;==================== ;; 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を追加 (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 @@ -115,13 +109,6 @@ (save-excursion (byte-compile-file "~/.emacs.el")))) ;;; 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) ;; よく使うモード (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のインストールを簡単に @@ -192,7 +253,6 @@ auto-install-from-gist auto-install-batch) "auto-install" (setq auto-install-directory "~/.emacs.d/elisp/") (auto-install-compatibility-setup)) ;; 終了してもカーソル位置を記録 @@ -207,13 +267,14 @@ 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 @@ -224,7 +285,9 @@ (load "outputz-conf")) ;; anything (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 '(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") (".*\\.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 '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") @@ -270,15 +362,7 @@ ;; EmacsでGNU screen風のインターフェイスを使う (req elscreen (setq elscreen-prefix-key "\C-z") (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 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 @@ -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)) ;; 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" @@ -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 ())) 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) @@ -451,7 +577,9 @@ (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") @@ -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 ',(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)) -
fukamachi revised this gist
Mar 11, 2010 . 1 changed file with 6 additions and 5 deletions.There are no files selected for viewing
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 charactersOriginal file line number Diff line number Diff line change @@ -28,7 +28,8 @@ ;; 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")) @@ -179,7 +180,7 @@ redmine-show-activity redmine-show-revisions redmine-select-project) "redmine" (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 "outputz-conf")) ;; anything (req anything-startup) @@ -348,7 +349,7 @@ ;; emacs-jabber (lazyload (jabber-connect) "jabber" (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 "erc-conf")) ;;==================== ;; Visual -
fukamachi revised this gist
Mar 11, 2010 . 1 changed file with 57 additions and 50 deletions.There are no files selected for viewing
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 charactersOriginal 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を追加 (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")))) ;; 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-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") (load "~/.emacs.d/outputz.el")) ;; anything (req anything-startup) @@ -332,7 +318,12 @@ (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)) ;; 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) (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 (and (functionp 'color-theme-initialize) (color-theme-initialize)) (color-theme-arjen)) ;; キーワードのカラー表示を有効化 @@ -408,15 +413,17 @@ ;;==================== ;; Syntax ;;==================== ;; 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" -
fukamachi revised this gist
Mar 5, 2010 . 1 changed file with 38 additions and 25 deletions.There are no files selected for viewing
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 charactersOriginal 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))) (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))) ;; 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) ;; よく使うモード (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 (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) (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" -
fukamachi revised this gist
Mar 1, 2010 . 1 changed file with 2 additions and 2 deletions.There are no files selected for viewing
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 charactersOriginal 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 (ruby-electric-mode) "ruby-electric") (lazyload (ruby-block-mode) "ruby-block" -
fukamachi revised this gist
Feb 28, 2010 . 1 changed file with 11 additions and 20 deletions.There are no files selected for viewing
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 charactersOriginal file line number Diff line number Diff line change @@ -178,18 +178,9 @@ (setq windmove-wrap-around t) ;; ウィンドウ内のカーソル移動 (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 "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 (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 'block-open '+ 'case-label 1 'statement-case-open 0 'arglist-intro '+ 'arglist-close 0)) ;; ruby (add-to-list 'interpreter-mode-alist '("ruby" . ruby-mode)) -
fukamachi revised this gist
Feb 28, 2010 . 1 changed file with 80 additions and 94 deletions.There are no files selected for viewing
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 charactersOriginal 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) (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 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のインストールを簡単に (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) ;; auto-complete ;; 補完候補を自動ポップアップ (req auto-complete (global-auto-complete-mode t) (append-to-list ac-modes '(js-mode php-mode))) ;; auto-insert ;; ファイル形式に応じて自動でテンプレート挿入 @@ -258,17 +263,17 @@ ;; 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") (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))) (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風のインターフェイスを使う @@ -280,34 +285,29 @@ ;; dmacro ;; 2回同じ操作をすると自動でマクロ登録 (lazyload (dmacro-exec) "dmacro") (defconst *dmacro-key* "\C-q") (global-set-key *dmacro-key* 'dmacro-exec) ;; 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)) (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) @@ -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" (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")))) (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" (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") (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 (setq js-indent-level 2) ;; 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 @@ -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))) ;; 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)) ;; 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) -
fukamachi revised this gist
Feb 27, 2010 . 1 changed file with 38 additions and 37 deletions.There are no files selected for viewing
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 charactersOriginal 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 "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 (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" (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)))) `(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) ;; 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)) -
fukamachi revised this gist
Feb 26, 2010 . 1 changed file with 47 additions and 42 deletions.There are no files selected for viewing
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 charactersOriginal 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 req (lib &rest body) `(when (locate-library ,(symbol-name lib)) (require ',lib) ,@body)) @@ -200,13 +200,13 @@ ;;==================== ;; auto-install ;; elispのインストールを簡単に (req auto-install (setq auto-install-directory "~/.emacs.d/elisp/") (auto-install-update-emacswiki-package-name t) (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) @@ -217,7 +217,7 @@ session-undo-check -1)) ;; 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 (req anything-startup) ;; cua-mode ;; 矩形選択を簡単に (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)) @@ -258,7 +258,7 @@ ;; shell-pop ;; C-tでshellをポップアップ (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風のインターフェイスを使う (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") ("Memo" ?m "** %?\n :Memo:\n %t" nil "Memo")))) ;;; color-moccur.el (req color-moccur (setq moccur-split-word t)) ;; 複数の検索語や、特定のフェイスのみマッチ ;; 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の設定 (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 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 @@ -416,17 +421,16 @@ (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) ;; 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 (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)))))) (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))) (loop for m in '(php js ruby) do (add-hook-fn (intern (format "%s-mode-hook" m)) (flymake-mode t)))) -
fukamachi revised this gist
Feb 19, 2010 . 1 changed file with 1 addition and 1 deletion.There are no files selected for viewing
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 charactersOriginal file line number Diff line number Diff line change @@ -218,7 +218,7 @@ ;; outputz (ifload outputz (setq outputz-key "My Private Key") (setq outputz-uri "http://%s/emacs.%s") (global-outputz-mode t) -
fukamachi revised this gist
Feb 19, 2010 . 1 changed file with 222 additions and 228 deletions.There are no files selected for viewing
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 charactersOriginal file line number Diff line number Diff line change @@ -1,25 +1,31 @@ ;;==================== ;; 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))) (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を追加 (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) ;; "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) ;; beepを消す (defun my-bell-function () @@ -151,9 +145,13 @@ (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 "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のインストールを簡単に (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 (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 (ifload anything-startup) ;; cua-mode ;; 矩形選択を簡単に (cua-mode t) (setq cua-enable-cua-keys nil) ;; current-string-to (ifload current-string-to) ;; auto-complete ;; 補完候補を自動ポップアップ (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をポップアップ (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風のインターフェイスを使う (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) (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 (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管理 (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 (ifload color-moccur (setq moccur-split-word t)) ;; 複数の検索語や、特定のフェイスのみマッチ ;; migemo (ifload migemo (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)) ;;==================== ;; Visual ;;==================== ;; color-themeの設定 (ifload color-theme (color-theme-initialize) (color-theme-arjen)) ;; キーワードのカラー表示を有効化 (global-font-lock-mode t) @@ -339,11 +361,11 @@ (show-paren-mode 1) ;; 全角空白、Tab、改行表示 (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 ;;==================== (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)) ;; スクロールバーを消す ;;==================== ;; Syntax ;;==================== ;; 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)))) ;; 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 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)) (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-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 (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 (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 (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))))) (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)))) -
fukamachi revised this gist
Feb 15, 2010 . 1 changed file with 30 additions and 61 deletions.There are no files selected for viewing
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 charactersOriginal file line number Diff line number Diff line change @@ -1,44 +1,14 @@ ;;==================== ;; Functions ;;==================== (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))) ;;==================== ;; General ;;==================== @@ -75,12 +45,6 @@ ;; C-kで行全体を削除 (setq kill-whole-line t) ;; 終了してもカーソル位置を記録 (require 'session) (setq session-initialize '(de-saveplace session keys menus places) @@ -111,7 +75,6 @@ ;; *scratch*を消さない (defun my-make-scratch (&optional arg) ;; "*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://%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) ;; cua-mode ;; 矩形選択を簡単に (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" 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)) ;; dmacro ;; 2回同じ操作をすると自動でマクロ登録 (defconst *dmacro-key* "\C-q") -
fukamachi created this gist
Feb 15, 2010 .There are no files selected for viewing
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 charactersOriginal 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)