MacBookAirのEmacs環境を整えるよ!

前回Windows環境でのEmacs導入備忘録を書いていて、
あれ?そういえばMacの時の、は?
書いてないなぁ・・・、と思い至りました。
ので、またまたEmacsですが、備忘録で。
※尚使い方については、wadapさんの”これからemacsを使い始めたい人へ送るチュートリアル 第2回”を参照されると良いと思います!


前回と違い今回はウチの母艦、MacBookAirでのEmacs設定に触れたいと思います。
基本的な内容は前回のWindow時と全く同じと言っても良いのですが、やはり細かい部分で違いがありますので、おさらいしながら進めて行きたいと思います。
勿論、同じEmacsといってもWindowsの場合、個人的には使いやすいのはMeadowですし、Macの場合始めから入っているEmacsがありますので、それだけでも違いがあるとも言えるでしょう。


では早速ターミナルを起動しましょう!
ターミナルはDockにショートカットがあれば。
なければFinderからアプリケーションを選択し、”ターミナル.app”を起動してください。
ついでにDeckに追加してしまうと幸せになれるかもしれません。
ターミナルを起動し、emacsと打ち込むとなんとEmacsが起動します!
Macはこの購入したその時から、いきなりコーディングをできる環境が整っているのがいいですね!


とはいっても、デフォルトのままですと、少々味気ない。
例えば簡単な話、phpファイルを開いたらきれいに色分けされていてほしいし、括弧の始まりや終わりにカーソルが言ったら対応する部分がハイライトされてほしいのです。
ではそれらの諸設定をどうするかなのですが、以外と単純で.emacsファイルを新規で作成し以下として保存を行うだけなのです。

/Users/ユーザ名/.emacs

勿論まず最初は、中身がからっぽで構いません。
これから進めて行く内容から、お好きなものを埋めて行けば良いのです。


ここで1つ、前もって設定を行いたいのが、Carbon Emacsを使っている場合どうしても、C-Spaceでマークを設定しようとするとMacのSpotlightが起動してしまいます。
この時に他の方法、というのも手なのですが、手っ取り早くシステム環境設定からSpotlightのキーボードショートカットを変更してしまいましょう。
やはりここで手段を変えてしまうと、環境による戸惑いが出てしまいますので。。。


では早速.emacsを埋めて行きます。
基本的に設定はAsialブログの記事”PHP開発で追加しておきたいEmacs Lisp 8選”を見ながら進めて行きます!ありがとうございます><

1. PHP mode for Emacs

さっくりphpmode.elをダウンロードしてフォルダ

/usr/share/emacs/22.1/site-lisp

へ放り込みます。
※移動先フォルダはsudo mv〜としないと移動できませんので注意してください
次に入力補完の為に、PHPのHTMLマニュアルをダウンロード
こちらは分かりやすいように以下へ保存します。

/usr/share/emacs/22.1/site-lisp/html

設定はそのままで以下を。
>|*||
(autoload 'php-mode "php-mode")
(setq auto-mode-alist
(cons '("\\.php\\'" . php-mode) auto-mode-alist))
(setq php-mode-force-pear t)
(add-hook 'php-mode-user-hook
'(lambda ()
(setq php-manual-path "/usr/share/emacs/22.1/html")
(setq php-manual-url "http://www.phppro.jp/phpmanual/")))
|

2. flymake.el

php-modeのおかげでphpの開発効率アップ!
ときたら更なる開発効率のアップを目指したいところ。
という訳でon the flyにmakeしてくれるflymake.elを導入します。
なんとエラーをハイライト表示してくれちゃう優れもの!でござます。
詳細はDinoオープンラボラトリの記事Flymakeのススメ(PHP版 , JS版) を参照しました。
さっくりflymake.elをダウンロードして例のごとくsite-lispフォルダへ移動行います。
で、設定はそのままで以下を。
>|*||
;; flymake (Emacs22から標準添付されている)
(when (require 'flymake nil t)
(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* *1
(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
'*2
;; flymake-javascript-initが未定義のバージョンだったら、自分で定義する
(defun flymake-javascript-init ()
(let* *3
(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
'*4: \\(?:lint \\)?\\(\\(?:warning\\|SyntaxError\\):.+\\)" 1 2 nil 3)
flymake-err-line-patterns)))
(add-hook 'php-mode-hook
'(lambda() (flymake-mode t)))
(add-hook 'javascript-mode-hook
'(lambda() (flymake-mode t))))
|

10. wb-line-number.el

ラインナンバーは後ろの設定でも行ってますが、mode-lineに表示されるので人によってはいらないかもしれません。
ですが、ボク個人としてはやはり左側にないと落ち着かないので導入します。
こちらもwb-line-number.el
をダウンロードしやはりsite-lispフォルダへ。
設定としては以下を追記すれば良いかなと。
>|*||
(require 'wb-line-number)
(wb-line-number-toggle)
(setq truncate-partial-width-windows nil)
(set-scroll-bar-mode nil)
(setq wb-line-number-scroll-bar t)
|

以上で大きな設定は終わりになるかなと思います。


最後に細かい設定をして行きましょう。
>|*||
;;; ;;OthersSettings

;;;ファイル更新日の自動書き換え
(require 'time-stamp)
(add-hook 'before-save-hook 'time-stamp)
(setq time-stamp-active t)
(setq time-stamp-start "Last updated : ")
(setq time-stamp-format "%04y/%02m/%02d-%02H:%02M:%02S")
(setq time-stamp-end " \\|$")

;;;終了時に自動生成されたオートセーブファイルを削除行う
(setq delete-auto-save-files t)

;;;対応する括弧をハイライト表示行う
(show-paren-mode 1)

;;;カーソルの位置をモードラインに表示する
(column-number-mode t)
(line-number-mode t)

;;;モードラインへ現在時刻を表示行う
(display-time)

;;;折り返し表示をなくす
(setq truncate-lines t)
(setq truncate-partial-width-windows t)

;;;インデントの設定
(setq c-tab-always-indent t)
(setq default-tab-width 4)
(setq indent-line-function 'indent-relative-maybe) ;;直前行と同じインデント
(global-set-key "\C-x\C-i" 'indet-region) ;;選択範囲をインデント
(global-set-key "\C-m" 'newline-and-indent) ;;リターン押下で改行とインデント
(global-set-key "\C-j" 'newline) ;;改行
(global-set-key "\C-cc" 'comment-region) ;;C-c cで選択範囲をコメント
(global-set-key "\C-cu" 'uncomment-region) ;;C-c uで選択範囲のコメントを解除
|

*1:temp-file (flymake-init-create-temp-buffer-copy 'flymake-create-temp-inplace

*2:"\\.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

*3:temp-file (flymake-init-create-temp-buffer-copy 'flymake-create-temp-inplace

*4:"\\.json$" flymake-javascript-init) ("\\.js$" flymake-javascript-init)))) (setq flymake-err-line-patterns (cons '("\\(.+\\)(\\([0-9]+\\