前振り その昔、NitemacsっていうMS-DOSで動くエディタがあった。これが最初に使ったエディタ。文字通りEmacsに似ていたみたいだがこれしか知らんから普通に使ってた。その後SE3っていう教育用エディタに移って、Macintoshに乗り換えた。MacOS-9ではYooEditを愛用してて、ほとんどマウス操作だったために特に問題なく使ってた。この頃のHTMLなんて1.0とかっていうごく単純なものだったため、そんな操作でも問題なく書けてた。その後不覚にも社会人になってしまい、なぜかまだDOSだったため支給されたMIFESを使用した。そのままの流れで職場のWindowsではMIFES、家ではMacOS-9のYooEditだったんだが・・・。MacOS-Xが出てエディタ難民になってしまった。 このページのコンセプトだいたい以下の通り。
CarbonEmacsとMeadowMacで動くEmacsもWindowsで動くEmacsもいくつか種類がある。MacOS-Xでは本家、Emacs on Aqua、Aquamacs Emacs。WindowsではNTEmacs、Meadowかな?、NTEmacsが本家かな?、よくわからんけど。WindowsのほうはググルとMeadowが主流らしいのでMeadowを使う。MacOS-Xのほうは本家のEmacsのcarbonで動くやつを日本でパッケージ化して配布してくれている人がいるのでこれを使う。中身はCarbonEmacsがEmacs22でMeadow2.0のほうはEmacs21ベース。 それぞれの作法に従い適当にインストール。 HOMEと.emacs.elとemacs.el< 用意ができたらカスタマイズの記述をする.emacs.elを用意する。.emacs.elはhomeディレクトリに置くわけだが、MacOS-Xは中身がUNIXなんで普通にhomeデイレクトリがあるけど、windowsはそういうのないんで自分で設定せにゃならん。HOME環境変数を設定するとそこがhomeディレクトリになる。やり方は覚えてないんで"環境変数 設定 WIN32"とかでググル。MacOS-Xの方はこのアイコンがついてるところがhome。 ;;==================================================== ;; .emacs.el ;; carbon emacs & meadow共通 ;;==================================================== (setq load-path (append (list (expand-file-name "~/lisp") ) load-path)) (load "emacs") ;;end of file これで、lispフォルダを作って、その中に空のemacs.elを置けばとりあえずの準備は完了。参考サイトは以下のところその他多数。見つけられたら引用もとも書いとく。
最低限の設定 ここからは、emacs.elを編集する。最低限の日本語が使えないとお話にならない。けど、MeadowもCarbon Emacsのパッケージ版も日本の人が配布してるので、どっちもデフォルトで日本語が使えるようになってる。なってなければ以下をemacs.elに書く。";"以降はコメント。 ;;日本語環境 (set-language-environment 'Japanese) 日本語がでなかったら、meadowのページやcarbon emacsに行くと色々書いてある。現時点での日本語関連の俺の設定は以下。 ;;----------------------------------------------------- ;;日本語設定 ;;----------------------------------------------------- (set-language-environment 'Japanese) (if (eq window-system 'mac) (progn (set-default-coding-systems 'euc-jp-unix) (set-buffer-file-coding-system 'euc-jp-unix) (set-clipboard-coding-system 'sjis-mac) (utf-translate-cjk-mode 1) (set-file-name-coding-system 'utf-8) (if window-system (set-keyboard-coding-system 'sjis-mac) (progn (set-keyboard-coding-system 'utf-8) (set-terminal-coding-system 'utf-8) )) )) (if (eq window-system 'w32) (progn (set-language-environment "Japanese") (set-default-coding-systems 'sjis) (set-keyboard-coding-system 'sjis) (set-terminal-coding-system 'sjis) (setq file-name-coding-system 'sjis) (set-clipboard-coding-system 'sjis-dos) (set-w32-system-coding-system 'sjis-dos) (mw32-ime-initialize) (setq default-input-method "MW32-IME") (setq-default mw32-ime-mode-line-state-indicator "[--]") (setq mw32-ime-mode-line-state-indicator-list '("[--]" "[あ]" "[--]")) (add-hook 'mw32-ime-on-hook (function (lambda () (set-cursor-height 2)))) (add-hook 'mw32-ime-off-hook (function (lambda () (set-cursor-height 4)))) )) どっちもどこかからかパクってきた。ifから始まる行にmacって入っているのがcarbon emacs用。w32って入っているのがWindows用。Emacsのバージョンじゃなくてwinかmacかで分岐したいのでこうしてる。Macほうは、通常であれば、sjis-macなんだけど、ruby1.6.8がeuc-jpじゃないとうまく機能しなかったのでeuc-jpにしてる。変更するとしたらここくらい。 マウスの右クリックでコピペをやっぱり、googleとか探してきて、コピペするのにはマウスの方が便利だよね。MacOS-Xの方にもスクロールマウスをつけているので、右クリックでのコピペができる用にする。これは、編集メニューの項目を右クリックで出すようにするもの。 ;;------------------------------------------------------ ;; マウス設定 ;;------------------------------------------------------ (if window-system (progn ;; 右ボタンの割り当て(押しながらの操作)をはずす。 (global-unset-key [down-mouse-3]) ;; マウスの右クリックメニューを出す(押して、離したときにだけメニューが出る) (defun bingalls-edit-menu (event) (interactive "e") (popup-menu menu-bar-edit-menu)) (global-set-key [mouse-3] 'bingalls-edit-menu) )) これもどっかから持ってきただけだから中身はよくわからん。とりあえず、これでMeadowでもcarbon emacsでも動いてるよ。とりあえず、色々調べながらコピペしてemacs.elを作る準備はできた。(meadow/emacs memoから取ってきた。) 外観の設定次は外観(笑)。基本となる色の設定とwindowサイズの設定。 ;;------------------------------------------------------- ;;ベースとなるColorの設定 ;;M-x list-colors-display でリストが出せる ;;-------------------------------------------------------- (if window-system (progn ;;フレームのサイズ (if (eq window-system 'mac) (progn (setq initial-frame-alist '((width . 80) (height . 46))) )) (if (eq window-system 'w32) (progn (setq initial-frame-alist '((width . 80) (height . 50) (top . 55) )) )) ;;背景色 (set-background-color "#00004A") ;;文字色 (set-foreground-color "AntiqueWhite") ;;カーソルカラー (set-cursor-color "Gray") ;;モードライン背景色 (set-face-background 'modeline "darkorange") ;;モードライン文字色 (set-face-foreground 'modeline "black") )) 色はwindowsとmacで同じ色を使うwindowのサイズと表示位置はmacとwindowでわけてる。同じでもいいんだけど、windowsのタスクバーを上にしてるので毎回ずらすのが面倒でtopからの位置を55に設定してる。色のリストはM-x list-colors-displayで出せる。キーの操作としてはESCキーを押してxを入力すると、モードラインの下に"M-x"って出てくるのでそこにlist-colors-displayと入れてリターンするとリスト一覧が見れる。ESCキーじゃなくてもいいけど、俺のキーボードHHKだから、他がなんていうキーだかわからん。適当に押して"M-"とかって出るキーがそれ。ない色は背景色のところみたいにRGBで入れる。 これだけやってもキーワードの色分け表示がされないので、font-lockを設定する。MIFES5だとCのキーワードしか表示されなかったけど、様々な言語のキーワードを色づけしてくれる。 (if window-system (progn (require 'font-lock) (global-font-lock-mode t) (set-face-foreground 'font-lock-comment-face "lime green") (set-face-foreground 'font-lock-keyword-face "DeepSkyBlue1") ; (set-face-foreground 'font-lock-string-face "purple") ; (set-face-foreground 'font-lock-function-name-face "blue") ; (set-face-bold-p 'font-lock-function-name-face t) ; (set-face-foreground 'font-lock-variable-name-face "black") ; (set-face-foreground 'font-lock-type-face "LightSeaGreen") ; (set-face-foreground 'font-lock-builtin-face "purple") ; (set-face-foreground 'font-lock-constant-face "black") ; (set-face-foreground 'font-lock-warning-face "blue") ; (set-face-bold-p 'font-lock-warning-face nil) ;;対応する括弧をハイライトする (show-paren-mode t) ;; マッチした場合の色 (set-face-background 'show-paren-match-face "RoyalBlue1") (set-face-foreground 'show-paren-match-face "AntiqueWhite") ;; マッチしていない場合の色 (set-face-background 'show-paren-mismatch-face "Red") (set-face-foreground 'show-paren-mismatch-face "black") )) キーワードの色づけだけするならとりあえず上の2,3行だけでいい。(global-font-lock-mode t)で全域で色づけを行うっていう指定。これもどこかからかパクってきたんだけど、コメントしてあるところはデフォルトの色でいいやと思ったところ。見にくい色だけ換えればいいんじゃん?。括弧のハイライト表示指定もしてる。これをしておくとemacs.elのsyntaxチェックで楽、括弧だらけだからねぇ。 Fontの設定Fontの設定はMacとWinで違うので別々に。 CarbonEmacsのFont設定Windowsは仕事で仕方なく使ってるだけだからMacの設定から。CarbonEmacsではインストールされているほとんどのフォントが使える。使えるフォントの一覧は以下の式を評価すると全部出る。 (insert (prin1-to-string (x-list-fonts "*"))) これをemacsのどこかのバッファにコピペして、一番最後の括弧の後ろにカーソルを置いて、Ctrl+xCtrl+eと押すと出てくる。結構時間かかるんで、一回出したらどこかに保存しておいた方がいい。(Emacs21 on Mac入門から中毒までからのパクり) (if (eq window-system 'mac) (progn (create-fontset-from-fontset-spec (concat "-*-fixed-medium-r-normal-*-14-*-*-*-*-*-fontset-motoyamono14," "japanese-jisx0208:-apple-fmotoyacedar w1 mono-medium-r-normal--14-0-75-75-m-0-jisx0208.1983-sjis," "ascii:-apple-fmotoyacedar w1 mono-medium-r-normal--14-0-75-75-m-0-jisx0201.1976-0") ) (set-default-font "fontset-motoyamono14") (setq default-frame-alist (append '((font . "fontset-motoyamono14"))) ) ;;アンチエイリアシングoff (setq mac-allow-anti-aliasing nil) ;;行間0 (modify-frame-parameters nil '((line-spacing . 0))) )) これが今の俺の設定。(create-fontset-from-specで始まるブロックは複数書ける。いくつか書いて状況によって使い分けてもいい。引用府でくくられてる部分がFontを指定しているところだが、1行目はFontSetを指定してる。motoyamono14ってやつね。2行目はjapanese-jisx0208のフォントを指定してる。3行目はasciiコードのしていだね。デフォルトでインストールされているフォントを色々試したんだけど、どれも納得いかなくて、結局、以前Mifesとmiで使ってたモトヤシーダってフォントを使ってる。モトヤフォントここから落とせる。登録しなきゃだめだけど。このフォントを14ポイントで使うと下のような感じになる。アンチエイリアシングをoffにしてるけど、実は効いてるっぽい。 MeadowのFont設定 Meadowのほうは簡単なFontの設定と面倒くさいFontの設定がある。簡単な方だと意図通りにならなかったので、面倒くさい方式でやる。 ; windows用 ; (if (eq window-system 'w32) (progn ;;; NFモトヤシーダ設定 (w32-add-font "motoya9-font" '((spec ((:char-spec ascii :height any) strict (w32-logfont "MS ゴシック" 0 -15 400 0 nil nil nil 0 1 3 49)) ((:char-spec ascii :height any :weight bold) strict (w32-logfont "MS ゴシック" 0 -15 700 0 nil nil nil 0 1 3 49)) ((:char-spec ascii :height any :slant italic) strict (w32-logfont "MS ゴシック" 0 -15 400 0 t nil nil 0 1 3 49)) ((:char-spec ascii :height any :weight bold :slant italic) strict (w32-logfont "MS ゴシック" 0 -15 700 0 t nil nil 0 1 3 49)) ((:char-spec japanese-jisx0208 :height any) strict (w32-logfont "NFモトヤシーダ1" 0 -15 400 0 nil nil nil 128 1 3 49)) ((:char-spec japanese-jisx0208 :height any :weight bold) strict (w32-logfont "NFモトヤシーダ1" 0 -15 700 0 nil nil nil 128 1 3 49) ((spacing . -1))) ((:char-spec japanese-jisx0208 :height any :slant italic) strict (w32-logfont "NFモトヤシーダ1" 0 -15 400 0 t nil nil 128 1 3 49)) ((:char-spec japanese-jisx0208 :height any :weight bold :slant italic) strict (w32-logfont "NFモトヤシーダ1" 0 -15 700 0 t nil nil 128 1 3 49) ((spacing . -1)))))) (set-face-attribute 'variable-pitch nil :font "motoya9-font") (setq default-frame-alist (append (list '(font . "motoya9-font") '(ime-font . (w32-logfont "NFモトヤシーダ1" 0 -13 400 0 nil nil nil 128 1 3 49)) ; TrueType のみ )default-frame-alist)) (modify-frame-parameters nil '((line-spacing . 1))) )) 使いたいフォントは以下の式を評価することで得られる。 (setq eval-expression-print-level nil) (setq eval-expression-print-length nil) (w32-query-get-logfont) 1行目から順番に括弧の最後で"C-xC-e"とするとフォントを選択するパネルが現れるので使いたいフォントを選択する。すると、minibufferに上の設定に入れる値が表れる。とりあえず見てみたい場合には、上のacsii,jisx0208のそれぞれの1行目だけをセットしてみればいい。ボールド体やイタリック体は別に後でもいいでしょ。 やっぱりOS-Xのアンチエイリアシングのほうが綺麗だね。。WindowsXPってアンチエイリアシング効くんだっけ?。 beepを切る!emacs.elを書いていると、ファイルの頭に来たり終わりに来たりするとbeepがうるさい!。ってことで消す。 ; beepを消す ;(setq visible-bell t) ;何もおこらなくする (setq ring-bell-function '(lambda ())) beepを消すと今度は画面がフラッシュするので、それもイヤだから、何も起こらなくしてる。画面をフラッシュさせたいなら上。何もしないなら下の設定で。 キー設定キーはねぇ、それぞれ好みがあるからねぇ。とりあえずwindows風にしたければcua-modeってやつを自分でつくったlispディレクトリの中に放り込んで、 (require 'cua) (CUA-mode t) ってやれば、windows風に"C-c","C-v","C-x"が使えるようになるし、Shift-矢印で選択もできる。でもDOS時代からのMIFESユーザーってF6キーで選択開始じゃない?。Shift-矢印で選択できるってつい最近知ったよ、使ってないけど。 キーに割り当てられてるコマンドを調べる/コマンドがどのキーに割り当てられているか調べるとりあえず、"C-h b"ってやると、どのキーにどのコマンドが割り当てられているかはわかる。これを見ながら自分の好きなように入れ替えてく。入れ替えちゃうと元のキーがわからないから、一度出したらカスタマイズする前に保存することをお薦めする(笑)。"C-h a"ってやると使えるコマンド全部と、そのコマンドがどこに割り振られているかわかる。 グローバルキー,ローカルキー こんな名前だったかな・・・。Emacsにはメジャーモードってのがあって、そこではローカルキーをセットできる。ローカルキーでセットされていないキーはグローバルキーが有効になる。メジャーモードってのはc-modeとかhtmlモードとかって書く言語によってモードを変化させられるもの、例えばC言語を編集している時にはCキーワードを色表示し、htmlモードではhtmlタグを色表示してくれる。またそれぞれの独特の操作もキーに割り当てられてる。MIFESにはない機能だがこれを覚えると楽。MIFESだとグローバルキーで全部やるって感じかな。慣れてくると自然に手が動くようになるみたい。 (global-set-key "\C-c" 'kill-ring-save) バックスベースをセットする場合はこう。 (global-set-key [backspace] 'backward-delete-char) コピーはemacs標準のコピーコマンドだけど、バックスベースには標準でないものを割り当ててる。通常は、TABを入れた後バックスベースを押すといったんスペースに変換してスペースを1つずつ消す、というコマンドが割り当てられてる。慣れないと不便なので、MIFESとあった感じのコマンドに換えた。 メジャーモードのローカルキーを無効にする "C-c"にコピーを割り当ててると、ローカルキーで別のキーが割り当てられてしまうことがよくある。例えば、cc-modeっていうC言語、java、C++なんかのキーワードカラーやら、TABの挙動やらをアシストしてくれるメジャーモードがあるが、ここでは"C-c"がローカルキーに割り当てられてしまっていてコピーができない。これかなり重要。 (defun my-c-mode-common-hook () (local-unset-key "\C-c") ) (add-hook 'c-mode-common-hook 'my-c-mode-common-hook) こんな感じ。hookってやつはモジュールの機能のカスタマイズに使用する。cc-modeの場合c-mode-common-hookってやつがjavaやC++と共通してるhook関数なので、ここにhookしてローカルキーの定義を取り消してやると、cc-modeが受け持ってるすべてのモードで"C-c"がコピーとして使える。hookは持ってきたモジュールのメインになる.elのファイルをhookで検索してやれば見つかる。 MIFES風のキーコマンドを作るたぶんここが本題。Emacsで設定されているコマンドだけじゃ、MIFESちっくな動きには出来ない。慣れちゃえば問題ないんだろうけど、使ってて間違えるようなものはMIFESの挙動にあわせるためにMIFES風のコマンドを作る。そいつを、MIFESと同じキーにバインドすれば完璧だ。 選択開始/選択解除コピペコマンドは以下のように設定していて、選択範囲は色が変わるようにしている。 ;;++++コピペ関連 +++++++++++++++++++ ;;Ctrl+c (copy) (global-set-key "\C-c" 'kill-ring-save) ;;Ctrl+v (paste) (global-set-key "\C-v" 'yank) ;;Ctrl+w (cut) (global-set-key "\C-w" 'kill-region) (transient-mark-mode 1) (if window-system (progn (set-face-background 'region "royal blue") (set-face-foreground 'region "black") )) ところが、MIFESではF6で選択開始/解除とトグルになっていたんだが、Emacsにはそういうコマンドはなさげ。そこで選択開始/解除と交互に作用するやつを作ると。 (defun toggle-select-region() (interactive) (if (eq mark-active nil) (set-mark (point)) (setq mark-active nil)) ) (global-set-key "\C-r" 'toggle-select-region) これで"C-r"で選択範囲を交互に切り替えられる。 行選択開始/行選択解除いやまてよ・・・MIFESのF6に振られてたのは行選択開始/解除だったような・・。ってことでこれも作る。 (defun toggke-select-line () (interactive) (beginning-of-line) (if (eq mark-active nil) (set-mark (point)) (setq mark-active nil)) ) (global-set-key [f6] 'toggle-select-line) これはMIFES同様F6に振ってみた。 行末まで削除、行頭まで削除、1行削除 Emacsの削除コマンドはCUTコマンドでDeleteコマンドではないらしい。MIFESにあった行頭まで削除や、1行削除はクリップボードには入らずに削除される仕様だった。ところがEmacsで削除コマンドを使うとクリップボードに入ってしまう。別のところでコピーしておいて、ペースト先で「この行イラネ」とかって削除すると、「ガーン、コピーしておいたところ消えた。また戻らなきゃ」ってことになる。Emacsはクリップボードがキューイングされるので、消えた訳じゃないので呼び出せるんだが、削除は削除だろ!ってことでMIFESにあわせる。 ;;+++削除コマンド+++++++++++ ;;Ctrl+k (行末まで削除) (defun delete-line-end () (interactive) (delete-region (point) (progn (end-of-line) (point))) ) (global-set-key "\C-k" 'delete-line-end) ;;Ctrl+u (行頭まで削除) (defun backward-delete-line () (interactive) (delete-region (point) (progn (beginning-of-line) (point))) ) (global-set-key "\C-u" 'backward-delete-line) ;;Ctrl+y (1行削除) (defun kill-line-all () (interactive) (beginning-of-line) (delete-region (point) (progn (end-of-line)(point))) (delete-indentation) (next-line 1) (beginning-of-line) ) (global-set-key "\C-y" 'kill-line-all) 割り当てるキーは好きなように。。1行削除はMIFESでは改行まで含めて1行削除なんで、"C-y"を連打するとどんどん行がなくなっていくようになってた。"C-y"だったかどうかは定かではないが、多分そう。。 行指定ジャンプ通常HOMEキーやENDキーなんかでページの最初や最後に飛べるが、HHKのキーボード以外ではHOMEキーもENDキーも遠いので、行指定ジャンプはよく使ってた。emacsでも同じことができるので、MIFESの時に割り当てていた"C-j"に割り当てる。 ;; goto-line を C-j (global-set-key "\C-j" (lambda (x) (interactive "nLine: ") (goto-line x))) (Petit emacs lisp tips on .emacs.elから取ってきた。) 前方検索 MIFESの検索はグローバル検索と、カレントファイル内の検索だったが、Emacsには便利なインクリメンタルサーチがついてる!。これを使わない手を使わない手はないでしょう・・。それはそのまま"C-s"に振っておいて、"C-f"にMIFESチックな検索を割り振りたい。 ;;---------------------------- ;; Current Wordを取得する ;;---------------------------- (defun mf_current-word() "カーソルのある位置の単語を取得する。" (save-excursion (let ((ret_value nil)) (if (string-match "\\w+\\W*" (char-to-string (char-before (+ 1 (point))))) ;カーソルの位置が単語文字と一致したら (progn (if (string-match "\\w+\\W*" (char-to-string (char-before))) (backward-word 1) ) (set-mark (point)) (forward-word 1) (copy-region-as-kill (mark) (point)) (setq ret_value (car kill-ring-yank-pointer)) (rotate-yank-pointer 1) ) ) ret_value ) ) ) ;;---------------------------------- ;; 前方検索 ;;--------------------------------- (defvar mf-word-search-value nil "search-value") (defun mf-word-search-forward () "カーソル位置の単語をデフォルトキーワードとして前方検索する。" (interactive) (let ((str "search-forward:")(old_point (point))) (setq str (read-string str (mf_current-word))) (search-forward str) (backward-word 1) (if (equal old_point (point)) (progn (forward-char) (search-forward str) (backward-word 1) ) ) (setq mf-word-search-value str) ) ) ;;---------------------------------- ;; 前方再検索 ;;--------------------------------- (defun mf-word-search-forward-next () "前方再検索。" (interactive) (forward-char) (search-forward mf-word-search-value) (backward-word 1) ) (global-set-key "\C-f" 'mf-word-forward-search) 新規バッファー作成 Emacsではタイトルなしのバッファーを作って、最後にファイルに保存するという方法はとらず、まずファイルを作成する。ここで拡張子が確定するために、その拡張子にあったメジャーモードをロードして通常編集時と同じように色付けされる。Macやwindowsの一般的なエディタは最初に名前なしのバッファを作って編集してから保存する。MIFESもご多分に漏れずこのタイプ。ちょっとメモを取るだけの場合気軽に新しいバッファを作れる方が便利だと思うが、ソースコードを書いていて長くなってくると一度保存して色付けされるように開き直すこともある。結局どっちもどっちか。。 ;;---------------------------------- ;; 新規バッファーを作る ;;---------------------------------- (defvar mf-newbuffer-count 1 "new bufferを作った数") (defun mf-new-buffer () "新規にuntitled-Nというバッファーを作る。" (interactive) (switch-to-buffer (concat "untitled-" (number-to-string mf-newbuffer-count))) (setq mf-newbuffer-count (+ 1 mf-newbuffer-count)) ) (global-set-key "\C-n" 'mf-new-buffer) 別フレームで単独にバッファー一覧 MIFESではF2を押すと編集中のbuffer一覧を表示できた。通常はbuffer切り替えで事足りるが、bufferが増えてくると一覧を出してその中から選びたい時もある。デフォルトのbuffer一覧ではかなりむかつくが、Meadow/Emacs Memoで紹介されてた"ibuffer"ってのを使うとかなり便利になる。入手先と書いてあるところには、どこにあるんだかようわからん。。ibufferでググってどっかに入れておくと。 ;;---------------------------------- ;; バッファリスト ;;---------------------------------- (require 'font-lock) (global-font-lock-mode t) (require 'ibuffer) (setq ibuffer-formats '((mark modified read-only " " (name 30 30) " " (size 6 -1) " " (mode 16 16) " " filename) (mark " " (name 30 -1) " " filename))) (defvar mf-main-frame nil "main frame keep") (defvar mf-ibuffer-frame nil "ibuffer frame keep") (defun mf-buffer-visit-main-frame () (interactive) (let ((buf (ibuffer-current-buffer))) (raise-frame mf-main-frame) ;main-frameを表に (select-frame mf-main-frame) ;main-frameにFocusをあてる (unless (buffer-live-p buf) (error "Buffer %s has been killed!" buf)) (bury-buffer (current-buffer)) (switch-to-buffer buf)) ) (defun my-ibuffer-mode-hook () (define-key ibuffer-mode-map (kbd "RET") 'mf-buffer-visit-main-frame ) (define-key ibuffer-mode-map (kbd "e") 'mf-buffer-visit-main-frame ) (define-key ibuffer-mode-map (kbd "f") 'mf-buffer-visit-main-frame ) ) (add-hook 'ibuffer-mode-hooks 'my-ibuffer-mode-hook) ;;frame一覧の中にIBufferがあるかのチェック ;; (defun mf-frame-list-check (fl) (let ((element (car fl))) (if element (progn (if (equal mf-ibuffer-frame element) t (mf-frame-list-check (cdr fl)) )) nil ) ) ) (defun mf-buffer-list () "MIFESみたいなバッファ一覧" (interactive) (if (not (mf-frame-list-check (frame-list))) (progn (setq mf-main-frame (selected-frame)) (select-frame (make-frame '( (height . 24) (minibuffer . nil) (background-color . "#00004A") (foreground-color . "AntiqueWhite") (cursor-color . "Yellow") (background-mode . dark) ))) (ibuffer) (setq mf-ibuffer-frame (selected-frame)) ) (raise-frame mf-ibuffer-frame) (select-frame mf-ibuffer-frame) ) ) (global-set-key [f2] 'mf-buffer-list) なっげーな。もうちょっと短くならんのか・・・。しかし、オブジェクト指向でないカプセル化されてない言語ってのはカスタマイズするには楽だね。通常ならprivateな変数を平気で使えるしね。ん?、継承して関数をオーバーライドする方が楽か?。 Carbon Emacs ビルドしてみたりしてなんとなく気に食わないところとか自分でいじれるかなと。cvsからチェックアウトしてきてビルドする。どこかにprojectてフォルダを作って、terminalを立ち上げて、 $cd project $export CVS_RSH="ssh" $cvs -z3 -d:ext:anoncvs@savannah.gnu.org:/cvsroot/emacs co emacs でほっといて寝る。全部cvsで落としてくるの時間掛かるのよねぇ。 アーカイブしてくれるcvsWebのプラグインみたいのもあるみたいなのにねぇ。 起きた。お、終わってる。時間かかったので、もう一回チェックアウトする。 $cvs -z3 -d:ext:anoncvs@savannah.gnu.org:/cvsroot/emacs co emacs おもむろにREADMEを見てみる。英語でわからんorz。 $./configure --with-carbon --without-x $./make bootstrap $make install おぉ、macフォルダの中に16MBくらいのcarbon-emacsが出来た。おぉ、動いたー。しかもちょっと早いー。インライン変換できないけど。 $cd mac $./make-package --self-contained powerpc-apple-darwin8-gcc-4.0.0: getopt.o: No such file or directory powerpc-apple-darwin8-gcc-4.0.0: getopt1.o: No such file or directory make[1]: *** [movemail] Error 1 make: *** [lib-src] Error 2 Make failed... Aborting make-package. ありゃ?。止まっちまった。なんかもう一個それっぽいオプションがある。それもつけてみよう。。 $./make-package --self-contained --build-in-place イメージ作成エンジンを準備中... “Driver Descriptor Map (DDM : 0)”を読み込み中... (CRC32 $45F59280:Driver Descriptor Map (DDM : 0)) “Apple (Apple_partition_map : 1)”を読み込み中... (CRC32 $CE3D9F9A:Apple (Apple_partition_map : 1)) “disk image (Apple_HFS : 2)”を読み込み中... .............................................................................. (CRC32 $779D4F7B:disk image (Apple_HFS : 2)) “ (Apple_Free : 3)”を読み込み中... ............................................................................... (CRC32 $00000000: (Apple_Free : 3)) リソースを追加中... ............................................................................... 経過時間: 4.969s ファイルサイズ:31310677 バイト、チェックサム:CRC32 $0AF336D2 処理されたセクタ数:70834、61137 コピーしました 速度:6.0M バイト/秒 節約率:13.7% created: /Users/tuck/pj/emacs/emacs/mac/../mac/EmacsInstaller.dmg Cleaning up the staging directory ヤッターデキター。 ここをみると、G4に最適化するってのも乗ってる。 CFLAGS="-fast -mcpu=7450" ./configure だそうな。。 $CFLAG="-fast -mcpu=7450" ./configure --with-carbon --without-x ってやらなくていいのかな?。なんかほかのREADMEなんかを見てると、jpg,gif,pngなんかの画像をサポートしないオプションとかあるみたい。emacs-w3mとか使わんし、mailもつかわないから画像表示なんかいらん。 今はTigerに移行したばっかりで不具合が多く、日に日に改善されてるみたいだからCVSを追っかけていたいんだけど、いちいちcvsのチェックアウトからdmg作成まで手動でやるのイヤになってきた・・。簡単なスクリプトを作る。 #/bin/sh cd ~/pj/emacs export CVS_RSH="ssh" cvs -z3 -d:ext:anoncvs@savannah.gnu.org:/cvsroot/emacs co emacs cd ~/pj/emacs/emacs CFLAG="-fast -mcpu=7450" ./configure --with-carbon --without-x ./make bootstrap make install cd ~/pj/emacs/emacs/mac DAY=`date +%Y%m%d` mv EmacsInstaller.dmg emacs$DAY.dmg ./make-package --self-contained --build-in-place autoemacs.commandとして保存して"chmod 755 autoemacs.command"で実行権を与えればダブルクリックで起動するぜ。pathとかはまねしちゃだめ。MacOS-Xで.commandって名前にすると、ダブルクリックでシェルスクリプトを実行できるようになる。applescriptを覚えるのもいいけど、mac上でしか動かない言語覚える気になれん。当然VBAとかC#も全く興味なし。 |
Copyright (C) 2005 俺 All right reserved.