Emacs setting example for PHP development
;; .emacs
;; turn on font-lock mode
(when (fboundp 'global-font-lock-mode)
(global-font-lock-mode t))
(load-library "term/bobcat")
(when (fboundp 'terminal-init-bobcat)
(terminal-init-bobcat))
(setq inhibit-startup-message t)
(line-number-mode t)
(column-number-mode t)
(setq load-path
(cons "~/lib/emacs" load-path))
(global-set-key "\C-xy" 'goto-line)
(global-set-key "\C-xw" 'what-line)
;; 行末のスペースを削除する
(add-hook 'before-save-hook
(lambda ()
(delete-trailing-whitespace)))
;; japanese
(set-language-environment "Japanese")
(prefer-coding-system 'utf-8)
(set-terminal-coding-system 'utf-8)
(set-keyboard-coding-system 'utf-8)
(set-buffer-file-coding-system 'utf-8)
(set-default-coding-systems 'utf-8)
(require 'install-elisp)
(setq install-elisp-repository-directory "~/lib/emacs")
;;;
;;; anything.el
;;;
(if (> emacs-major-version 21)
(require 'anything)
;(require 'anything-config)
)
;;;
;;; GNU GLOBAL
;;;
(autoload 'gtags-mode "gtags" "" t)
(setq gtags-mode-hook
'(lambda ()
(local-set-key "\M-t" 'gtags-find-tag)
(local-set-key "\M-r" 'gtags-find-rtag)
(local-set-key "\M-s" 'gtags-find-symbol)
(local-set-key "\C-t" 'gtags-pop-stack) ))
;;
;; PHP
;;
(autoload 'php-mode "php-mode")
(setq auto-mode-alist
(cons '("\\.php\\'" . php-mode) auto-mode-alist))
(add-to-list 'auto-mode-alist '("\\.ctp$" . php-mode)) ; CakePHP
(setq php-mode-force-pear t)
(add-hook 'php-mode-hook
(lambda ()
(setq indent-tabs-mode nil)
(setq tab-width 4)
(c-set-style "stroustrup")
(setq c-comment-only-line-offset -4) ; コメントの前に出さないときは 0
(setq c-basic-offset 4)
(c-set-offset 'arglist-close 0)
(when (string-match "\\.ctp\\(\\..+\\)?$" (buffer-file-name))
; .ctp のときだけ
(progn
(setq c-auto-newline nil) ; 全自動インデントを無効
(setq c-tab-always-indent t) ; [TAB]キーでインデント実施
(setq-default c-electric-flag nil)))
(setq php-manual-path "/usr/local/share/php/php-chunked-xhtml")
(setq php-manual-url "http://www.phppro.jp/phpmanual/")
;; CakePHP
(add-to-list 'load-path "~/lib/emacs/cake-mode")
(when (require 'cake nil t)
(cake-set-default-keymap))
;;
(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))))
;;
;; JavaScript
;;
(add-hook 'javascript-mode-hook
(lambda ()
(setq indent-tabs-mode nil)
(setq tab-width 4)
(c-set-style "stroustrup")
(setq c-comment-only-line-offset -4)
(setq c-basic-offset 4)
(c-set-offset 'arglist-close 0)
(setq c-auto-newline nil) ; 全自動インデントを無効
(setq c-tab-always-indent t)) ) ; [TAB]キーでインデント実施
;; flymake (Emacs22から標準添付されている)
(if (> emacs-major-version 21)
(when (require 'flymake nil t)
(require 'flymake-cursor)
(global-set-key "\C-cd" 'flymake-display-err-menu-for-current-line)
;; PHP用設定
(when (not (fboundp 'flymake-php-init))
;; flymake-php-initが未定義のバージョンだったら、自分で定義する
(defun flymake-php-init ()
(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))))
(list "php" (list "-f" local-file "-l"))))
(setq flymake-allowed-file-name-masks
(append
flymake-allowed-file-name-masks
'(("\\.php[345]?$" flymake-php-init))))
(setq flymake-err-line-patterns
(cons
'("\\(\\(?:Parse error\\|Fatal error\\|Warning\\): .*\\) in \\(.*\\) on line \\([0-9]+\\)" 2 3 nil 1)
flymake-err-line-patterns)))
;; JavaScript用設定
(when (not (fboundp 'flymake-javascript-init))
;; flymake-javascript-initが未定義のバージョンだったら、自分で定義する
(defun flymake-javascript-init ()
(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))))
;;(list "js" (list "-s" local-file))
(list "jsl" (list "-process" local-file))
))
(setq flymake-allowed-file-name-masks
(append
flymake-allowed-file-name-masks
'(("\\.json$" flymake-javascript-init)
("\\.js$" flymake-javascript-init))))
(setq flymake-err-line-patterns
(cons
'("\\(.+\\)(\\([0-9]+\\)): \\(?:lint \\)?\\(\\(?:warning\\|SyntaxError\\):.+\\)" 1 2 nil 3)
flymake-err-line-patterns)))
;; エラー、ウォーニング時のフェイス
(set-face-background 'flymake-errline "red4")
(set-face-foreground 'flymake-errline "black")
(set-face-background 'flymake-warnline "yellow")
(set-face-foreground 'flymake-warnline "black")
;; エラーをミニバッファに表示
;; http://d.hatena.ne.jp/xcezx/20080314/1205475020
(defun flymake-display-err-minibuf ()
"Displays the error/warning for the current line in the minibuffer"
(interactive)
(let* ((line-no (flymake-current-line-no))
(line-err-info-list (nth 0 (flymake-find-err-info flymake-err-info line-no)))
(count (length line-err-info-list)))
(while (> count 0)
(when line-err-info-list
(let* ((file (flymake-ler-file (nth (1- count) line-err-info-list)))
(full-file (flymake-ler-full-file (nth (1- count) line-err-info-list)))
(text (flymake-ler-text (nth (1- count) line-err-info-list)))
(line (flymake-ler-line (nth (1- count) line-err-info-list))))
(message "[%s] %s" line text)))
(setq count (1- count)))))
(add-hook 'php-mode-hook
'(lambda() (flymake-mode t)))
(add-hook 'javascript-mode-hook
'(lambda() (flymake-mode t))))
)
;; eof