コメントをいただいたので,以下の点に追記しました.
- *.el を置く場所
- ことえりで日本語入力時に必ず全角スペースになる件
- ウィンドウの透明化
はじめに
MacBookと暮らし初めてひと月半ほど経ちました.
Macでは,テキストエディタとして Carbon Emacs (以下,emacs)を使っています.それまで使ってきた(現在もときどき使ってますが) xyzzy との微妙な差異に最初は多少悩まされましたが,ここ最近で,ようやく慣れてきた感があります.
その間,自分が使いやすいようにと,先人の記録を参考に,emcas 設定を追加・変更してきました.
以下,そんな設定の現状についてメモ的にまとめてみました.特に目新しいものなどはありませんが.
設定の前に
*.el を置く場所
拡張する際,先人が書かれた emacs lisp ファイルを特定の場所に置く必要が出ることがありますが,その場所がまったくわからなかったので,参考にさせていただいたものが以下.
また、MacOSXでメジャーなCarbon Emacsのsite-lispディレクトリの位置は非常にわかりにくく、パッケージ内となっている。Carbon Emacsをアプリケーションフォルダ内に入れている場合、パスは「/Applications/Emacs.app/Contents/Resources/site-lisp」となる。
Emacsの初期設定ファイル (Kanasansoft Web Lab.)
そんなわけで,
/Applications/Emacs.app/Contents/Resources/site-lisp/
に置きましょう,ということになります.
次のような 1行を追加することで,任意の場所におけるようですね.
(setq load-path (cons "/Users/iwata/site-lisp/" load-path))
なるほど,この方が,デフォルトのものと追加したものとの住み分けができてメンテナンス的にもよさげですね.
複数起動する
先日参加した Kanasan.JS の懇親会で,次のようにするといいよ,という話をいただきました.
% open -n /Applications/Emacs.app
現在は,これを cemacs という名前で alias して使っています.
alias cemacs="open -n /Applications/Emacs.app"
毎回(Visorで)ターミナルを呼び出して起動していますが,なかなかメンドイ.ランチャからコマンドをたたける方法とかないのかな,と思い始めている今日この頃です.
見た目に関する設定
ウィンドウサイズの位置とかサイズとか
できるだけモニタいっぱいに,左のDockにはかからないように...で試行錯誤の結果が以下です.
(if window-system (progn (setq initial-frame-alist '((width . 202)(height . 58)(top . 0)(left . 48))) (set-background-color "Black") (set-foreground-color "White") (set-cursor-color "Gray") ))
フォント
「Options → Show/Hide → Font Panel」メニューでフォント選択なGUIを呼び出して「どのフォントにしようかな?」といった感じで1つ1つ切り替えながら選んでたので,それがはき出したコードかな?
(if (eq window-system 'mac)(require 'carbon-font)) (fixed-width-set-fontset "hirakaku_w3" 10)
キーバインド
改行後にインデント
(global-set-key "\C-m" 'newline-and-indent)
効果があるのかないのか,最初から有効になっているのか...あまりよくわかってません ><
Ctrl-H でヘルプを表示させずに Backspace を機能させる
linuxとか使っていると,Ctrl-H は Backspace の役割を果たすものだと体が覚えてしまいます(ですよね?)(Windows でも XKeymacs を使ってそのように割り当てています),「あ,間違えた → Ctrl-H Ctrl-H Ctrl-H...」といった感じで.Windows でも XKeymacs というツールを使って,そのようにキーバインドを変更しています.
しかし,emacs のデフォルトでは,Ctrl-H (を2回?)すると,ヘルプっぽいもの(?)が出てきてしまいます.これはうざい.
次の2行を追加することで,そんなストレスから解放されます.
(load "term/bobcat") (when (fboundp 'terminal-init-bobcat) (terminal-init-bobcat))
行カーソル
カーソルの点滅のみだとどうも位置を見失うので,現在の行をハイライトするようなものが欲しくて,検索して見つけたエントリ(後述)を参考に,次のようなスクリプトになりました.
(defface hlline-face '((((class color) (background dark)) ;;(:background "dark state gray")) (:background "gray10" :underline "gray24")) (((class color) (background light)) (:background "ForestGreen" :underline nil)) (t ())) "*Face used by hl-line.") (setq hl-line-face 'hlline-face) ;;(setq hl-line-face 'underline) (global-hl-line-mode)
参考
js2-mode
デフォルトで入っている javascript-mode がなんだか残念なので,それにとって代わる JavaScript 用のモードを探してみたところ,js2-mode なるものが評判いいようで.
コーディング中にリアルタイムで文法チェックなどを行ってくれたりします,ちょっとお節介と感じるくらいに.
コンパイル
js2-mode のサイトにある js2-*.el(現時点では js2-20080616a.el)をダウンロードし,js2.el などとして先で触れたパスに置きます.
そして,M-x byte-compile-file を実行,置いたファイル(この場合,/Applications/Emacs.app/Contents/Resources/site-lisp/js2.el のようになります)を指定することで,コンパイルが行われます.
.emacs に追記
コンパイルが完了したら,.emacs に次のようなスクリプトを追加します.
(autoload 'js2-mode "js2" nil t) (add-to-list 'auto-mode-alist '("\\.js$" . js2-mode)) (add-to-list 'auto-mode-alist '("\\.json$" . js2-mode)) ;; http://8-p.info/emacs-javascript.html (setq-default c-basic-offset 4) (when (load "js2" t) (setq js2-cleanup-whitespace nil js2-mirror-mode nil js2-bounce-indent-flag nil) (defun indent-and-back-to-indentation () (interactive) (indent-for-tab-command) (let ((point-of-indentation (save-excursion (back-to-indentation) (point)))) (skip-chars-forward "\s " point-of-indentation))) (define-key js2-mode-map "\C-i" 'indent-and-back-to-indentation) (define-key js2-mode-map "\C-m" nil))
この場合,js,json を拡張子に持つファイルを読み込んだ場合に js2-mode が起動するようになります.
参考
tt-mode
Template Toolkit 向けテンプレートの記述向けのモードです.[% ... %] な表記がハイライトなどされます.
コンパイル
次のサイトから tt-mode.el をダウンロード,例のパスに置きます.そして,M-x byte-compile-file します.
.emacs に追記
拡張子に連動してモードを起動したい場合,その拡張子に合わせて次のようなものを .emacs に追記します.
(autoload 'tt-mode "tt-mode" nil t) (add-to-list 'auto-mode-alist '("\\.tt$" . tt-mode)) ;;(add-to-list 'auto-mode-alist '("\\.tpl$" . tt-mode))
参考
jaspace-mode
Mac デフォルトの IME である「ことえり」では,日本語入力時,スペースは必ず全角となり,これを半角に設定することもできないっぽいです.
そのため,ソースコードを書いているときなどに,意図せず全角スペースが混入することがときたま発生してくれちゃったりします.しかも見えません.カーソルを乗せないと判別できません.
全角スペースを入力した場合,デフォルトでの表示単なる「空白」であり,特に見えるわけでもありません.カーソルを乗せたときにそれが全角かどうかがわかるくらいです.
これでは体に悪いので,何かないかと探してみたところ,全角スペースやタブを可視化してくれる jaspace-mode の存在を知りました.
コンパイル
次のサイトから jaspace-mode.el をダウンロード,例のパスに置き,M-x byte-compile-file します.
.emacs に追記
以下のスクリプトを .emacs に追記します.
(when (require 'jaspace nil t) (when jaspace-modes (append jaspace-modes (list 'lisp-mode 'yaml-mode 'perl-mode 'js2-mode 'javascript-mode 'python-mode 'ruby-mode 'php-mode 'xml-mode 'html-mode 'css-mode 'text-mode 'tt-mode 'fundamental-mode )))) (when (boundp 'jaspace-alternate-jaspace-string) (setq jaspace-alternate-jaspace-string "□")) (when (boundp 'jaspace-highlight-tabs) (setq jaspace-highlight-tabs ?^)) (add-hook 'jaspace-mode-off-hook (lambda() (when (boundp 'show-trailing-whitespace) (setq show-trailing-whitespace nil)))) (add-hook 'jaspace-mode-hook (lambda() (progn (when (boundp 'show-trailing-whitespace) (setq show-trailing-whitespace t)) (face-spec-set 'jaspace-highlight-jaspace-face '((((class color) (background light)) (:foreground "blue")) ;;(t (:foreground "green")))) (t (:foreground "gray32")))) (face-spec-set 'jaspace-highlight-tab-face '((((class color) (background light)) (:foreground "red" :background "unspecified" :strike-through nil :underline t)) ;;(t (:foreground "purple" (t (:foreground "gray16" :background "unspecified" :strike-through nil :underline t)))) (face-spec-set 'trailing-whitespace '((((class color) (background light)) (:foreground "red" :background "unspecified" :strike-through nil :underline t)) ;;(t (:foreground "purple" (t (:foreground "gray16" :background "unspecified" :strike-through nil :underline t)))))))
一部のモードで自動的に起動しない
このスクリプトの冒頭ですが,「このモードでは jaspace-mode も起動してね」的なことと解釈していろいろなモードを追加してみました.
しかし,一部のモードでは自動的に起動してくれません.自分で M-x jaspace-mode すればちゃんと起動してくれるのですが...
この辺, lisp(emacs lisp)がわかっていればきっと修正できるんでしょうけど,現状さっぱりです.しばらく手動で起動するしかなさげですかね ><
ちなみに
本エントリを書いている現在,ATOKが入ってますw
参考
- おまけ for GNU Emacs
- 続・Emacsでタブ・全角スペース・行末の空白文字列を目立たせる — ディノオープンラボラトリ
- Meadow/Emacs memo: 表示のカスタマイズ — 背景色,メニュー
当時は知らなかったのですが、実はことえりでも、日本語入力モードで常時「半角スペース」にする事ができます。
Macはじめました。: ことえりで、常に「半角スペース」が入力されるようにする方法
こちらのエントリにあるとおり,
% defaults write com.apple.inputmethod.Kotoeri zhsy -dict-add " " -bool no % killall Kotoeri
とすることで日本語入力時でも半角スペースを入力できるようになるみたいですね.
私の環境でも入力を確認できました.Space のみで全角,Shift + Space で半角,となるのは,ATOKが混じっているからでしょうか...
その他こまごましたもの
保存時にバックアップファイルを作らない
バージョン管理していれば,まず要りませんよね.
(setq backup-inhibited t) (setq make-backup-files nil)
拡張子がhtml,tplなファイルをxml-modeでロード
Webなアプリ開発とかでテンプレートファイルとして tpl という拡張子をよく使っているので.
(setq auto-mode-alist (append '(("\\.html$" . xml-mode)) auto-mode-alist)) (setq auto-mode-alist (append '(("\\.tpl$" . xml-mode)) auto-mode-alist))
バッテリの残量を表示する
お出かけ先での開発には重宝するかも? (まぁ,メニューバーに最初からバッテリの残量が表示されてますけどね...)
(display-battery-mode t)
起動時のアレを表示しない
毎回要りません.
(setq inhibit-startup-message t)
タイトルバーに現在のファイル名を表示する
現在開いているファイルのフルパスがすぐに確認できるのでありがたいです.
(setq frame-title-format (format "%%f - Emacs@%s" (system-name)))
動作していないっぽい
ウィンドウ(フレーム?)の透明化
ウィンドウが透明化してくれるらしいのですが...
(setq default-frame-alist (append (list '(active-alpha . 0.90) '(inactive-alpha . 0.75) ) default-frame-alist))
透明化できました.(画像は75%のものです.)
;;(setq default-frame-alist ;; (append (list '(active-alpha . 0.90) ;; '(inactive-alpha . 0.75) ;; ) default-frame-alist)) (set-frame-parameter nil 'alpha 80)
yaml-modeでのインデントが変?
設定関係ではありませんが...
yaml-mode使用時,Tabキーでインデントすると通常は数個のスペースが入ります.しかし,データの構造によって,ときどきタブが入っちゃうんですよね.
これを YAML::Syck とかで読むと,エラーが出てしまうので,毎回スペースに置き換えたりと,なかなか困りものです.
こちらのものを入れてみたのですが,この件については特に変わらず,です.
文法的に問題あるのかなぁ,でも,スペース使っていればちゃんと読んでくれるし...
おわりに
以上,私が追加などしている Carbon Emacs の設定の現状についてまとめてみました.
emacs lisp とかわかっていると,もっと細かいレベルでの設定なんかも可能なんでしょうね.まぁ時間があったら勉強してみたいところではあります.
参考
先であげた以外に,以下のサイト・エントリも参考にさせていただいてます.




> *.elを置く場所
確かにデフォルトはそこなんですが階層が深いのと面倒なのでこうすれば好きな場所に指定できます。
(setq load-path (cons “/Users/hogehoge/site-lisp/” load-path))
> ことえりの半角スペースの件
できますよー。
http://hajimemasita.blogspot.c.....st_18.html
> windowの透過
set-frame-parameterで設定します。
(set-frame-parameter nil ‘alpha 90)
みたいに
@samurai20000
コメントありがとうございます.
エントリに追記しておきました.
setq load-path とか set-frame-parameter とかのキーワードをみると,
何となく elisp の基礎の基礎,という感じがします.
私の elisp の知らなさを露呈してしまってますね ><