スキップしてメイン コンテンツに移動

投稿

ラベル(emacs)が付いた投稿を表示しています

2011-11-30

fswiki-mode.el もどき FreeStyleWiki のテキストを効率よく編集したいと思い、Emacs のメジャーモード fswiki-mode を書いてみた。以下のサイトに、ダウンロード先と使用方法を載せた。 http://wiki.clearise.tk/?page=fswiki%2Dmode%2Eel+%A4%E2%A4%C9%A4%AD

2011-10-06

スティーブ・ジョブズ死去 今朝このニュースを聞いたときは本当に衝撃だった.人の命を価値に置き換えるのは道徳上よろしくないと思うが,彼の死は全世界にとって多きな損失になるのだろう.彼が生きていれば実現できた未来は来ないかもしれないと思うと,とても残念だ.彼の能力は技術的なものだけではない.これまでに,彼に関する本を何冊か読んだが,彼の言動や考え方から学ぶことはとても多い.そんな彼の死を惜しみ,Appleのウェフサイトでは,お悔みのメールを受け付けている. http://www.apple.com/stevejobs/ EMMSの導入 EMMSを導入して,Emacsでの生活をより快適にしようとしている.これまで,Emacsで音楽を再生するためにmpg123.elを使用してきた.しかし,もの足りないと感じる点がいくつかあった.例えば,楽曲のタイトルの文字化けや,プレイリストの操作のし難さなど. http://www.gnu.org/s/emms/

Emacs Lisp でローカル関数を定義する

Emacs Lispにおいて、ローカル関数を定義し,これを呼び出すサンプルコードを以下に示す. (let ((p (lambda (a) (message a)))) (funcall p "hoge")) => "hoge" このコードで何がおこなわれているか,簡単に説明する.作成する関数の本体は (lambda (a) (message a)) である.このlambdaで定義した匿名の関数を,letを用いて変数pに代入する.funcallを用いて,変数pを関数として呼び出す.関数の引数は,pに続いて記述する. letで定義された変数はローカルスコープであるため,pはローカル関数であることがわかる.ちなみに,defunはグローバル関数を定義する関数である.ローカル関数を定義する関数は存在しない. ちなみに再帰関数も定義できる.以下は,再帰関数の代表例である,階乗を計算する関数.この例では,引数に7を与えて,7の階乗を求めている. (let ((f (lambda (num) (cond (( (t (* num (funcall f (- num 1)))))))) (funcall f 7)) => 5040

Emacs Lispのススメ

概要 私の受ける印象では,Emacs Lispを敬遠している人が多すぎる.多くの場合,この理由は,(1) Lispが嫌い,(2) Emacsが嫌い,のいずれかである.後者は思想の違いなのでどうしようも無いが,前者の理由で使わないのであれば,損をしていると私は考える. ここでは,私がEmacs Lispを実際に利用する場面を,ケーススタディとして示す.Lispが嫌いな方が退屈しないよう,Lispの構文については触れない. Emacs Lispを実行するには まず,Emacs Lispを実行する方法を知らなければならない.手っ取り早く実行する方法として,次の2種類の方法がある.この他にも数種類の方法があるが,ここでは省略する. *scratch*バッファを使う Emacsを引数なしで起動すると,*scratch*バッファが開かれる.このバッファで\C-jと入力すると,カーソルの直前にあるLispを実行する. 例えば次のコードは,hogeと出力するものである. (message "hoge") この「)」の次にカーソルを合わせて\C-jを入力すれば,カーソル位置に"hoge"と出力される. (message "hoge") [ここにカーソルを置いて\C-jと入力] => "hoge" eval-last-sexp関数を使う 上記のコードにて,上記と同様「)」の次にカーソルを合わせる.そして,\C-x\C-eと入力すると,直前のLispを実行する. 入力シーケンス \C-x\C-eは,M-x eval-last-sexpと同様.上記と同様,カーソル位置の手前にあるLispを評価する. *scratch*バッファとの違いは,実行結果がミニバッファに表示される点,一般のファイル(*scratch*バッファ以外)でも実行できる点,である. ケーススタディ 簡単な計算をする Emacs Lispを用いると,簡単な四則演算が可能. 例えば,次のLispは1日の秒数を計算する. (* 60 60 24) => 86400 また,あるファイルに次のような数値の羅列が保存されているとする. 34 42 ... 56 これらの数値の合計を求めるには,前後にLispを加えれば良い. (+ 34 42 ....

shの設定: emacsclient.sh

emacs-serverとemacsclientを使って,1つのemacsウィンドウを有効に利用する方法.指定したファイルを,emacs-serverを立ち上げているemacsウィンドウで開く.これにより,emacsウィンドウの乱立を防ぎ,すっきりとしたデスクトップで生活できる. シェルの初期化スクリプトに,以下のスクリプトを加える. e() { file=$1 echo $1 | grep -v '^/' >/dev/null 2>&1 && file=${PWD}/$file emacsclient -e "(find-file \"${file}\")" } unset file ターミナルから, $ e filename と実行することで,既に立ち上がっているemacsウィンドウでファイルを開く.

Emacsで外部コマンドを起動する

外部プロセスを起動する 同期プロセスの起動 外部コマンドを呼び出し,これが実行を終了するまで待ち合わせる. 例1 tgifを起動する まず,何もオプションの無い,最も簡単な呼び出し方を紹介する. (call-process "tgif") これを実行すれば,tgifが起動する.しかし,同期プロセスであるため,tgifで作業はできても,emacsの作業はできないことに気づくだろう.シェルでtgifをフォアグラウンドで起動すると,tgifを終了するかサスペンドするまで,シェルの操作ができないのと同様である. 例2 ディレクトリ内のファイルを挿入する 次に,出力先をカレントバッファに設定する例を紹介する. (call-process "ls" nil t nil "/usr/") ここで,\C-xe を入力し実行すると,次の出力が得られる. X11 X11R6 bin etc include ... 上の例では,/usr/直下のファイル一覧を,カーソル位置に展開する.ここでは,3番目の引数 (destination) にtを指定し,出力先をカレンドバッファとしている. 非同期プロセスの呼び出し 例1 tgifを起動する 例によって,最も簡単なtgifの起動について紹介する. (start-process "tgif" "*tgif*" "tgif") 1個目の引数はEmacsが内部で識別する名前である.2個目の引数は起動するプロセスの標準出力と標準エラー出力が表示されるバッファ名である.3個目の引数は起動するプロセスのコマンドである. こちらは非同期であるため,tgifもemacsも作業できる.シェルにおけるバックグラウンド実行に似ている.

dot.Xresources

  私の.Xresourcesファイルの中身を以下に示す.ここでは,xterm,kterm,emacs,tgifの設定を記述している.基本的な設定は,フォント,カラー,ウィンドウサイズである.   emacsについては,使用するフォントを.emacs.elで指定するよりも,.Xresourcesに記述するほうが,emacsの起動時間の短縮に繋がる.   tgifについては,使用可能な色を増やす際に,.Xresourcesを使用する.まず,Tgif.MaxColorsで使用する色数を指定する.そして,Tgif.Color[n]で,n番目の色をRGBそれぞれ16進数で指定する.   .Xresourcesを書き直したら, $ xrdb -merge ~/.Xresources で設定を更新するのを忘れずに. !!!!!!!! ~/.Xresources !!!!!!! vt xterm kterm emacs xdvi tgif !!!!!!!! xterm XTerm*metaSendsEscape: true XTerm*eightBitInput: false XTerm*selectToClipboard: true XTerm*geometry: 128x78+250+0 XTerm*curses: on XTerm*multiScroll: on XTerm*jumpScroll: on XTerm*reverseWrap: on XTerm*foreground: white XTerm*background: #000000 XTerm*font: -*-lucidatypewriter-medium-r-*-*-12-*-*-*-*-*-*-* !!!!!!!! kterm KTerm*kanjiMode: euc KTerm*visualBell: on Kterm*Geometry: 80x50 KTerm*ScrollBar: on KTerm*saveLines: 1000 KTerm*openIm: true KTerm*background: #000000 KTerm*foreground: #f0f0f0 K...

Emacsのキーバインドを調べる

  キーボードのキーバインドを調べたいときがある.この際には,次のコマンドを利用できる. M-x describe-key   これを入力した後,調べたいキーを入力する.これにより,次の内容が表示される. バインドされている関数名 関数が定義されているファイル名 動作説明

emacsの設定: ファイル構成

  私のemacsの設定ファイルのファイル構成を以下に示す. base.el: 基本的なemacsの設定をおこなう. ime.el: OSや環境によって,適当なIMEの設定をおこなう. anthy.el: anthy-elの設定をおこなう. atokx.el: atokx for linuxの設定をおこなう. canna.el: japanese-cannaの設定をおこなう. msime.el: windows imeの設定をおこなう. faces.el: 配色などの表示関連の設定をおこなう. packages.el: site-lispの読み込みをおこなう. key-assign: キーボード入力に対する処理方法をいくつか定義する. mouse.el: マウス入力の設定をおこなう. server.el: emacsserverを立ち上げる. hook.el: プログラムフックの設定をおこなう.   ディレクトリ構成は以下のようにしている. ~/ lib/ conf/ emacs/ dot.emacs.el anthy.el atokx.el base.el canna.el faces.el hook.el ime.el key-assign.el mouse.el msime.el package.el server.el

emacsの設定: atokx.el

  ~/lib/conf/emacs/atokx.el (progn (require 'un-define) (setq coding-category-utf-8 'utf-8) (setq iiimcf-server-control-hostlist '("localhost")) (setq iiimcf-server-control-default-language "ja") (setq default-input-method 'iiim-server-control) (require 'iiimcf-sc) ;; 変換トグルの設定 (define-key global-map "\C-\\" 'toggle-input-method) ;; Shift-Space または 半角/全角 でも起動 (global-set-key [?\S-\ ] 'toggle-input-method) (global-set-key [zenkaku-hankaku] 'toggle-input-method) ;;モードライン表示をすっきりと ;;(setcar default-mode-line-format "") ) >> emacsの設定

emacsの設定: dot.emacs.el

  ~/lib/conf/emacs/dot.emacs.el (load "~/lib/conf/emacs/base.el") (load "~/lib/conf/emacs/ime.el") (load "~/lib/conf/emacs/server.el") (load "~/lib/conf/emacs/faces.el") (load "~/lib/conf/emacs/mouse.el") (load "~/lib/conf/emacs/hook.el") (load "~/lib/conf/emacs/key-assign.el") (load "~/lib/conf/emacs/package.el") >> emacsの設定

emacsの設定: canna.el

  ~/lib/conf/emacs/canna.el (progn (if (and (or (and (boundp 'CANNA) CANNA) ( (not (equal emacs-ime "canna-tamago"))) (progn ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; emacs-dl-canna/emcws の場合 (load-library "canna") ;; color-mate を使わないで、漢字変換に色を付けたい時に ;(setq canna-use-color t) ;; フェンスモードでなくアンダーラインを使う ;;(setq canna-with-fences nil) ;;(setq canna-underline t) ;; Canna サーバの指定 (if (null (getenv "CANNA_SERVER")) (setq canna-server "unix") (setq canna-server (getenv "CANNA_SERVER"))) (canna) ;; Canna を Ctrl-\ で起動します。コメントアウトすれば、 ;; Ctrl-\ で skk が立ち上がります。 (global-set-key "\C-\\" 'canna-toggle-japanese-mode) (global-set-key "\C-o" 'canna-toggle-japanese-mode) ;; Shift-Space または 半角/全角 でも起動 (global-set-key [?\S-\ ] 'canna-toggle-japanese-mode) (global-set-key [zenkaku-hankaku] 'canna-toggle-jap...

emacsの設定: base.el

  ~/lib/conf/emacs/base.el ;;; 言語環境の指定 (set-language-environment "Japanese") ;;; 漢字コードの設定 (if (equal (getenv "LANG") "ja_JP.UTF-8") (progn (cond (( (require 'un-define))) (set-default-coding-systems 'utf-8) (set-buffer-file-coding-system 'utf-8-unix) (set-terminal-coding-system 'utf-8) (set-keyboard-coding-system 'utf-8)) ;;; 日本語メニューバー (UTF-8のメニューバーを用意?) ;(cond ; (and (>= emacs-major-version 21) ; (equal (substring (concat (getenv "LANG") "__") 0 2) "ja") ; (load "menu-tree-utf8"))) (progn (set-default-coding-systems 'euc-jp) (set-buffer-file-coding-system 'euc-jp-unix) (set-terminal-coding-system 'euc-jp) (set-keyboard-coding-system 'euc-jp) ;;; 日本語メニューバー ;(cond ;((and (>= emacs-major-version 21) ;(equal (substring (concat (getenv "LANG") "__") 0 2) ...

emacsの設定: msime.el

  ~/lib/conf/emacs/msime.el (when (fboundp '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 '("[--]" "[あ]" "[--]")) (mw32-ime-initialize) (wrap-function-to-control-ime 'y-or-n-p nil nil) (wrap-function-to-control-ime 'yes-or-no-p nil nil) (wrap-function-to-control-ime 'universal-argument t nil) (wrap-function-to-control-ime 'read-string nil nil) (wrap-function-to-control-ime 'read-from-minibuffer nil nil) (wrap-function-to-control-ime 'read-key-sequence nil nil) (wrap-function-to-control-ime 'map-y-or-n-p nil nil) (wrap-function-to-control-ime 'read-passwd t t) ; don't work as we expect. ) >> emacsの設定

emacsの設定: faces.el

  ~/lib/conf/emacs/faces.el ;;; 起動画面の非表示 (setq inhibit-startup-message t) ;;; タイトルバー ;;(setq frame-title-format (format "emacs@%s : %%f" (system-name))) ;;; メニューバーを消す (menu-bar-mode nil) ;;; ツールバーを消す (tool-bar-mode nil) ;;; cursor の blink を止める ;(blink-cursor-mode nil) ;;; スクロールバーを右側に表示する (set-scroll-bar-mode 'right) ;;; visible-bell (setq visible-bell nil) ;;; 行番号を表示する (line-number-mode t) ;;; active でない window の空 cursor を出さない (setq cursor-in-non-selected-windows nil) ;;; フォントのスケールをしない (setq scalable-fonts-allowed nil) ;;; mark 領域に色付け (setq transient-mark-mode nil) ;;; image.el における JPEG の判定基準を緩める ;(eval-after-load "image" ; '(setq image-type-regexps ; (cons (cons "^\377\330" 'jpeg) image-type-regexps))) ;;; 表示の行間を拡げる (setq line-spacing 2) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; フォントの設定 ;; ~/.emacsによるフォントの読み込みは遅いので, ;; UNIX系OSの場合は~/.Xresourcesに記述 ;; Windowsの場合は以下で設定 ;;(if (eq window-system ...

emacsの設定: hook.el

  ~/lib/conf/emacs/hook.el ;;;;;;;;;;;;;;;;;;;; ;; verilog-mode ;;;;;;;;;;;;;;;;;;;; (add-hook 'verilog-mode-hook '(lambda () (font-lock-mode 1))) ;;;;;;;;;;;;;;;;;;;; ;; Dired ;;;;;;;;;;;;;;;;;;;; ;; Dired のリストフォーマット設定 (ls へのオプション) ;; (setq dired-listing-switches "-aoFLt") ;; ls の出力を英語にする(ls を LANG=C で実行) (add-hook 'dired-mode-hook '(lambda () (setenv "LANG" "C"))) ;;;;;;;;;;;;;;;;;;;; ;; c-mode ;;;;;;;;;;;;;;;;;;;; (add-hook 'c-mode-common-hook '(lambda () (setq indent-tabs-mode nil) ; use 'spaces' instead of 'tab' (c-set-style "k&r") ;; c-mode, two space 'tab', replace tab with spaces ;;(setq-default tab-width 5) (setq c-basic-offset 4))) ;(put 'set-goal-column 'disabled nil) ;;;;;;;;;;;;;;;;;;;; ;; wanderlust ;;;;;;;;;;;;;;;;;;;; (add-hook 'wl-summary-mode-hook '(lambda () (defun wl-summary-redisplay-force () ...

emacsの設定: ime.el

  ~/lib/conf/emacs/ime.el ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; IMEの設定 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (cond ((eq system-type 'berkeley-unix) (setq emacs-ime (getenv "EMACS_IME"))) ((eq system-type 'gnu/linux) (setq emacs-ime (getenv "EMACS_IME"))) ((eq system-type 'linux) (setq emacs-ime (getenv "EMACS_IME"))) ((eq system-type 'berkeley-unix) (setq emacs-ime (getenv "EMACS_IME"))) ((eq system-type 'windows-nt) (setq emacs-ime "ms-ime")) ((eq system-type 'darwin) (setq emacs-ime "kotoeri")) ((eq system-type 'cygwin) (setq emacs-ime "none")) (t (setq emacs-ime "none"))) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; かんなの設定 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (if (or (equal emacs-ime "canna...

emacsの設定: mouse.el

  ~/lib/conf/emacs/mouse.el ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; ホイールマウス対応 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (defun up-slightly () (interactive) (scroll-up 5)) (defun down-slightly () (interactive) (scroll-down 5)) (global-set-key [mouse-4] 'down-slightly) (global-set-key [mouse-5] 'up-slightly) (defun up-one () (interactive) (scroll-up 1)) (defun down-one () (interactive) (scroll-down 1)) (global-set-key [S-mouse-4] 'down-one) (global-set-key [S-mouse-5] 'up-one) (defun up-a-lot () (interactive) (scroll-up)) (defun down-a-lot () (interactive) (scroll-down)) (global-set-key [C-mouse-4] 'down-a-lot) (global-set-key [C-mouse-5] 'up-a-lot) >> emacsの設定

emacsの設定: package.el

  ~/lib/conf/emacs/package.el ;; load-path (setq load-path (append '( "~/lib/conf/emacs/site-lisp/apel" "~/lib/conf/emacs/site-lisp/elscreen" "~/lib/conf/emacs/site-lisp/emu" "~/lib/conf/emacs/site-lisp/flim" "~/lib/conf/emacs/site-lisp/gnuplot-mode" "~/lib/conf/emacs/site-lisp/howm" "~/lib/conf/emacs/site-lisp/ruby-mode" "~/lib/conf/emacs/site-lisp/semi" "~/lib/conf/emacs/site-lisp/w3m" "~/lib/conf/emacs/site-lisp/wl" "~/lib/conf/emacs/site-lisp/riece" "~/lib/conf/emacs/site-lisp/yatex" ) load-path)) ;;;;;;;;;;;;;;;;;;;; ;; dot-mode ;;;;;;;;;;;;;;;;;;;; (load-file "~/lib/conf/emacs/site-lisp/dot-mode/graphviz-dot-mode.el") ;;;;;;;;;;;;;;;;;;;; ;; gnuplot-mode ;;;;;;;;;;;;;;;;;;;; ;; these lines enable the use of gnuplot mode (autoload 'gnuplot-mode "gnuplot...