最新情報

2016年2月8日Emacs
#8 カスタマブルな Emacs Lisp 製シェル「eshell」 (Software Design 2014年12月号掲載記事) Emacs インストール 設定 使い方
2016年2月7日dired
#7 多機能ファイラー「dired」 (Software Design 2014年11月号掲載記事) Emacs dired wdired インストール 設定 使い方
2016年2月6日Emacs
emacs hemisu-theme.el : 白背景・黒背景カラーテーマセット | MELPA Emacs Lisp Elisp パッケージ インストール 設定 使い方 スクリーンショット
2016年2月5日Emacs
emacs ir-black-theme.el : 真っ黒背景のカラーテーマ | MELPA Emacs Lisp Elisp パッケージ インストール 設定 使い方 スクリーンショット
2016年2月4日Emacs
emacs soothe-theme.el : 黒背景のカラーテーマ | MELPA Emacs Lisp Elisp パッケージ インストール 設定 使い方 スクリーンショット

このエントリーを含むはてなブックマーク Buzzurlにブックマーク livedoorクリップ Yahoo!ブックマークに登録

#8 カスタマブルな Emacs Lisp 製シェル「eshell」 (Software Design 2014年12月号掲載記事) Emacs インストール 設定 使い方

Software Design連載記事を掲載します。

株式会社技術評論社の許可を得て掲載しています。
草稿なので細かい部分は実際の記事とは異なることがあります。

他の記事は左下にある「■雑誌連載中(全文公開)」から見られます。

eshellとは

 Emacs 24.4がリリースされましたね!筆者のサイト「日刊Emacs」でも新機能レビューしています。http://rubikitch.com/category/emacs-24-4/

 Emacsでは様々なアプリケーションがEmacs Lispで書かれています。eshellはEmacs Lispで書かれたシェルです。Emacsとシェルといえば通常のシェル(bash、zshなど)をEmacsのバッファで動かすM-x shellがありますが、eshellはそれよりもEmacsとの親和性が強いです。シェルスクリプトよりもEmacsが好きな筆者は、eshellを愛用しています。

 eshellはすべてがEmacs Lispで書かれています。その事実はたくさんのメリットをもたらします。

 まず、eshellはプラットフォームを選びません。Emacsが動く環境であればすべての環境でeshellが動きます。特にUnix系OSを得意とする人がWindowsを使わされている場合、eshellは強い味方になります。WindowsでもGNU Screenやzshなどを導入できますが、eshellはEmacsさえインストールすれば即座に使える手軽さがあります。代表的なUnixコマンドもEmacs Lispで実装されているので、そのままでcpやmvなどが実行できます。WindowsでもUnix系OSに負けない強力なシェルが使えるということです。

 そして、前回のdiredのところでお話したように、Emacs Lispで書かれているということは、すべての挙動がコントロール可能ということです。他のシェルでもシェルスクリプトで柔軟にカスタマイズできますが、それにも限界があります。シェルのコアとなる部分がC言語で書かれているので、コアに触れるカスタマイズまではできません。対してeshellはコアも含めてEmacs Lispで書かれているので、コアを再定義できます。新機能追加も自由自在で、あっさりとオレオレeshellが構築できます。

 M-x shellのメリットはすべて受け継いでいます。バッファに出力が蓄積するのでスクロールしてしまった出力をあっさり遡れます。入力補完機能も当然あります。コマンドの出力を他のバッファに貼り付けるのも楽勝です。

 とはいえM-x shellではシェル本来の機能を発揮しきれない欠点があります。とくにzshには、Emacsではないかと錯覚してしまうほどの能力を持っています。実際zshにおいてM-xをタイプすると、様々なコマンドが実行できます。zshは実際のところ行指向どころか画面指向のシェルという様相です。設定すればM-x tetrisでzshでテトリスが遊べてしまいます。M-x shellでは、シェル独自の機能を殺してしまうのです。eshellはそれ自体が完結されたシェルであるため、当然M-x shellよりもシェルとして作り込まれています。

 eshellはEmacsのシェルだけあって、Emacs Lispとの連携ができます。具体的にはeshellから直接Emacs Lisp式を評価させたり、Emacsのコマンドを実行したりもできます。さらにおもしろいことに、Emacs Lispの任意の関数をシェル形式で呼び出せます。とにかくeshellからはすべてのEmacsの機能が呼び出せるので、eshellのバックにはすべてのEmacsの関数・コマンドが味方についているのです。Emacsのスキルが上がれば自動的にeshellも強化されます。まさにEmacsヘビーユーザーにとって最強のシェルといえるでしょう。

 eshellはそれ自体がシェルの働きをするので、シェルの基本的な機能はすべておさえてあります。リダイレクト・パイプ、複文、コマンド・ファイル名補完、バッククォート、シェル変数、エイリアスも実装されています。複雑なので本稿では解説しませんが、状況に応じて補完できるプログラマブル補完(pcomplete)もあります。また、zshのグロブ(ワイルドカード)も実装されています。

 一方でeshellはEmacsの機能にシェルのインターフェースでアクセスしているものと考えることができます。Emacsは元来テキストエディタであり2次元ですが、シェルのコマンドラインは1次元です。テキストエディタがシェルを模倣するのは容易いことです。eshellで書かれた命令を内部でLispに変換してEmacsに送信しています。

起動

 eshellを起動するには、M-x eshellを実行します。すると、M-x shell同様なプロンプトが出てきます。あとは通常通りシェルとして使っていけばいいです。

 eshellは複数枚立ち上げられます。C-u M-x eshellで新しいeshellバッファが作成されます。C-u 数字 M-x eshellで *eshell*<数字> バッファが作成されます。それぞれのeshellバッファは独立したカレントディレクトリが持てます。複数のディレクトリで作業する場合に便利です。

20140910091545.png
Fig1: M-x eshell

20140910091602.png
Fig2: C-u 22 M-x eshell

 M-x eshell-commandは、M-!のeshell版です。eshellで一回だけコマンドを実行するのに便利です。

リダイレクト・パイプ

 eshellは出力リダイレクト・パイプが実装されています。使い方は通常のシェルと変わりません。

~ $ echo xxx > test.txt
~ $ cat test.txt
xxx
~ $ echo foo | wc
      0       1       3

 zshと同様に複数のファイルに書き込んだり、リダイレクト後にパイプを通すことも可能です。eshell版echoはデフォルトでは改行を入れないので-nで改行を入れています。

~ $ echo -n hoge > a > b > c | wc
      1       1       5
~ $ cat a
hoge
~ $ cat b
hoge
~ $ cat c
hoge

 eshellならではの仮想デバイスもあります。/dev/nullはeshell側で実装されているのでWindowsでも使えます。

~ $ echo test > /dev/null
[出力を非表示にする]
~ $ echo test > /dev/kill
[出力をキルリングに入れる(内容:test)]
~ $ echo test >> /dev/kill
[出力をキルリングに追記する(内容:testtest)]
~ $ echo test > /dev/clip
[出力をクリップボードに入れる]

 リダイレクト先にバッファも指定できるのはさすがEmacs上のシェルです。話の都合上、先に出してしまいましたが、eshellではLisp式を評価させることができます。

~ $ echo buf > #<buffer output>
[バッファoutputに出力する]
~ $ (with-current-buffer "output" (buffer-string))
[バッファoutputの内容を表示する]
buf
~ $ echo buf >> #<buffer output>
[バッファoutputに追記する]
~ $ (with-current-buffer "output" (buffer-string))
bufbuf
~ $ (with-current-buffer "output" (goto-char 4))
[バッファoutputのカーソルを移動させる]
4
~ $ echo X >>> #<buffer output>
[バッファoutputの現カーソル位置に出力する]
~ $ (with-current-buffer "output" (buffer-string))
bufXbuf

複文

 eshellでの複文はUnixシェルと同じです。

  • 「;」で続けてコマンドを実行
  • 「&&」で前のコマンドが正常終了なら次のコマンドを実行
  • 「||」で前のコマンドが異常終了なら次のコマンドを実行
~ $ echo a; echo b
[echo aとecho bを実行する]
a
b

~ $ sh -c 'exit 0' && echo normal
[終了ステータス0(正常終了)なのでnormalが表示される]
normal
~ $ sh -c 'exit 1' && echo normal
[終了ステータスが1(異常終了)なのでnormalは表示されない]
~ $ sh -c 'exit 0' || echo abnormal
[正常終了なのでechoは実行されない]
~ $ sh -c 'exit 1' || echo abnormal
[異常終了なのでechoは実行される]
abnormal

シェル変数

 eshellにおけるシェル変数はEmacsの変数です。シェル変数を設定するにはsetqコマンドを使います。シェル変数は変数名の前に$をつけて参照します。

~ $ setq a 10
10
~ $ echo $a
10
~ $ echo a=$a
a=10

 文字列は通常のシェル同様””と”で囲むことができ、両者の違いも同じです。

~ $ echo "a=$a"
a=10
~ $ echo 'a=$a'
a=$a
~ $ echo "a"$a"a"
a10a
~ $ echo a$a"a"
a10a

コマンド実行結果を引数にする

 eshellでコマンド実行結果を引数にするには {〜} を使います。シェルのバッククォートとは異なるので気をつけてください。{〜}の中はeshellのコマンドそのものなので、Lisp式も書けます。文字列に埋め込むには${〜}を使います。

~ $ cd /
/ $ pwd
/
/ $ echo `pwd`
`pwd`
/ $ echo {pwd}
/
/ $ echo ${pwd}
/
/ $ echo pwd=${pwd}
pwd=/
/ $ echo "pwd=${pwd}"
pwd=/
/ $ echo {(+ 3 4)}
7

Lisp式評価

 eshellはEmacs Lispで書かれたシェルなので、eshellの中でLisp式を評価させることも簡単です。関数呼び出し(開括弧から始まる)についてはそのまま実行できます。なおconcat関数は引数に指定した文字列を結合した文字列を返します。

~ $ (+ 1 2)
3
~ $ (concat "foo" "bar")
foobar

 関数呼び出しそのものもeshellのコマンドになるので、「;」で区切って複数の実行結果を得ることもできます。

~ $ (+ 1 2); (+ 3 4)
3
7

 関数呼び出しの結果を文字列に埋め込むには$(〜)を使います。なお、*echoはeshellの内部コマンドのechoではなくて外部コマンドのechoを呼び出します。内部コマンドのechoは複数の引数をリスト化する性質があります。

~ $ echo $(+ 1 2) $(+ 3 4)
(3 7)
~ $ echo "$(+ 1 2) $(+ 3 4)"
3 7
~ $ *echo $(+ 1 2) $(+ 3 4)
3 7

 ただし、変数の値を得る場合は変数名がコマンド名とみなされるため、そのままではうまくいきません。Lisp式の評価値を表示するeshell/e関数を定義することで、eshellでeコマンドが使えるようにしておきます。(List1)

 eコマンドは変数の評価値をきれいな表示形式(pp形式)で出力します。表示形式にすると文字列は””で囲まれ、nilはnilと表示されます。通常の表示形式(prin1形式)ではなくてきれいな表示形式にすると、ネストしたリストは複数行に分けて見やすく表示してくれます。

== List1:Emacs Lisp評価関数

(defun eshell/e (arg)
  (eshell-printn (pp-to-string (eval (if (listp arg) arg (read (format "%s" arg))))))
  nil)

==

~ $ setq a 1
1
~ $ a
a: command not found
~ $ echo $a
1
~ $ e a
1
~ $ e emacs-version
"24.4.1"
~ $ e nil
nil

 元々Emacs Lispをシェル的インターフェースで評価するM-x ielmがありますが、eshellを使えばもはや不要です。

Emacs Lispをシェル的に実行させる

 eshellにおいては、Lisp関数をシェルコマンドのように呼び出せます。Lisp関数呼び出しは
(関数名 引数 引数…)
の形式ですが、この機能を使うことで括弧が省けます。

<書式>
関数名 引数 引数...
~ $ find-file ~/.emacs.d/init.el
#<buffer init.el>

 この場合、Emacs Lispをeshellのコマンドとして実行しています。このように実体がEmacs Lispであってもeshellの文法に則り、$で変数の値を参照します。

~ $ find-file $user-init-file
#<buffer init.el>

 引数に渡されたオブジェクトは適宜型変換されます。たとえば整数を渡したら整数型に、小数を渡したら浮動小数点数型になります。型変換を抑制し、文字列そのものとして渡すには””か”で囲みます。

 シンボルを渡すには「`」でバッククオートします。Emacs Lispにおいてバッククォートはリスト展開機能を含むクオート(‘)で、複雑なリストを作成したりマクロを定義するときに使われます。Emacs Lispの関数呼び出しにおいて、シンボルを渡すにはシンボル名にクオートするのとバッククォートするのとでは同じ結果になります。eshellではクオートはシェルの文字列表現として使われているので、バッククォートがeshellにおけるシンボル渡しに適任なのです。eshellでシェル的バッククォートが使えないのは、こういう背景があるからです。

~ $ symbol-name `a
a

 バッククォートが“のように囲まれている場合は、文字列としてそのまま渡されます。

~ $ echo `pwd`
`pwd`
~ $ echo `pwd
pwd

 引数にリストを渡す場合もバッククォートします。eコマンドにリストを渡したらそれを関数呼び出しとして評価します。そのため、関数を評価するときにはバッククォートを置く必要があります。

~ $ e (concat "foo" "bar")
[評価結果foobarを変数名として参照するため未定義エラー]
Symbol's value as variable is void: foobar
~ $ e `(concat "foo" "bar")
"foobar"
~ $ e `(+ 1 2)
3
~ $ e `(symbol-name `a)
"a"

優先順位

 なお、Lisp関数のシェル的呼び出しが使えるのには条件があります。この条件がなければ、同名のシェルコマンドが存在するのに実行できなくなり、意図しない結果になるからです。

  1. eshell/CMD関数が定義されているときはそれを実行
  2. CMDシェルコマンドが存在するときはシェルコマンドを実行
  3. CMD関数が定義されているときはそれを実行

 eshell/CMDはeshell専用のコマンドで、シェルコマンドよりも優先されます。さきほど定義したeshell/eがまさにその例で、eshellでのみeコマンドが使えるようになりました。e関数として定義してしまうと、Emacs全体で使えるようになり範囲が広すぎます。おまけにeシェルコマンドが存在するときはそれが実行されてしまうことになります。

 この優先順位の差をうまく使っているのがeshell/grepです。eshell上でファイルに対してgrepを呼び出すとM-x grepが実行されます。grepシェルコマンドが存在し、grep関数(M-x grep)も定義されていますが、eshell/grepはeshellで渡された引数をM-x grepに合うように変換してM-x grepを実行しています。他にもeshell/egrepやeshell/fgrepやeshell/agrepも定義されており、同名のシェルコマンドの実行結果をM-x grepで実行するようになっています。

 eshell/grepは賢い挙動をします。ファイルに対してgrepを実行したらgrep -nをM-x grepで表示します。対して、パイプ経由でgrepが呼ばれた場合はM-x grepを使いません。このように、eshell/grepは空気を読んでくれます。あなたは、ただ普通にgrepを実行するだけでいいのです。

エイリアス

 eshellにもエイリアス機能があります。eshellのエイリアスは定義すると即座にファイルに保存され、永続化されます。

<書式>
alias 別名 '定義'

 「ll」を「ls -l」のエイリアスに定義します。それでは、以下のように打ち込んでください。

~ $ alias ll 'ls -l $*'

 他のシェルとは異なり、エイリアスに渡された引数に展開する$*が必要です。また、$*をそのまま渡す必要があるため、エイリアス定義には’ ‘で囲む必要もあります。

 定義を省略することで、そのエイリアスを削除します。

~ $ alias ll

 エイリアスはコマンド実行の優先順位では最上位に位置します。そのため、たとえeshell/ll関数が定義されていたとしても、エイリアスllが定義されているときには、ls -lにエイリアス展開されます。

弱点

 eshellは魅力的なシェルですが、弱点もいくつかあります。弱点はeshellがEmacs Lispで書かれていることとEmacsのバッファに起因します。ですが、ちゃんと抜け道もあるので安心してください。筆者はeshellを愛用しているのは、それぞれの弱点を克服する方法があり、eshellのメリットが強力だからです。そもそも弱点にひっかかる頻度は多くないです。

  • リダイレクト・パイプの処理速度がとても遅い
  • 他の文字コード・バイナリデータが扱えない
  • 入力リダイレクトが未実装
  • 画面指向プログラムがそのまま実行できない
  • Emacs Lisp版Unixコマンドが遅い

リダイレクト・パイプの弱点を克服する

 リダイレクト・パイプもelispで実装されていて、バッファを経由します。これはWindowsでもそのまま動作する利点はあるものの、欠点の方が目立ちます。

 まず、処理速度が通常のシェルと比べて圧倒的に遅いです。少量のデータならば問題ないですが、大量のデータは扱えません。

 次にエンコーディングの問題です。通常のシェルではバイナリデータとして扱いますが、eshellではいつものエンコーディング(UTF-8など)で処理してしまいます。そのため、バイナリファイルや他のエンコーディングのテキストを扱うときに混乱してしまいます。

 おまけに、入力リダイレクトも実装されていません。おそらく使用頻度が低いことと、実装が困難だからでしょう。入力リダイレクトは使えないもののcatとパイプで代用する方法もあります。

 これらの問題を克服するには本物のシェルを呼び出します。zsh -c ‘〜’で(shでも可)囲んでしまいます。「’」の中で「’」を埋め込むには「”」を使います。

~ $ zsh -c 'echo ''foo'''
foo
~ $ wc ~/.emacs.d/init.el
 11  32 388 /r/.emacs.d/init.el
~ $ zsh -c 'wc < ~/.emacs.d/init.el'
 11  32 388
~ $ cat ~/.emacs.d/init.el | wc
     11      32     388
~ $ zsh -c 'nkf -e utf8.txt > euc.txt'

 アーカイブをダウンロードしながら展開する場合もeshellでは困難です。かといってシェルを呼び出しても冗長になります。こういう場合はエイリアスでカバーしましょう。dextgzのエイリアス定義はクオートの関係でちょっと複雑です。エイリアス定義の際には””で囲まれた中で$もそのまま渡しておきたいので、\$と指定しています。もちろん専用のシェルスクリプトを書く方法もあります。

~ $ zsh -c 'curl -s http://example.com/foo.tar.gz | tar xzvf -'
~ $ alias dextgz zsh -c "\"curl -s '\$1' | tar xzvf -\""
~ $ dextgz http://example.com/foo.tar.gz

画面指向のプログラムを実行する

 eshellはEmacsのバッファで実装されているため、画面全体を使うコンソールアプリはそのままでは動きません。たとえばw3mやlynxといったテキストブラウザ、topなどのcursesアプリケーションです。これらをeshellで直接動かすとeshell自体が混乱してしまいます。そこで端末エミュレーターを使って起動させるように設定します。

 eshell-visual-commands(List2)に指定したコマンドをeshellから起動すると、端末エミュレーターを使います。

List1:eshell-visual-commands初期値

(setq eshell-visual-commands
  '("vi"                                ; what is going on??
    "screen" "top"                      ; ok, a valid program...
    "less" "more"                       ; M-x view-file
    "lynx" "ncftp"                      ; w3.el, ange-ftp
    "pine" "tin" "trn" "elm")           ; GNUS!!
   )

 eshellで使う端末エミュレーターはEmacs Lispで書かれたtermがデフォルトですが、いかんせん動作が遅いです。そこでtermの代わりにxtermなどを使うとよいです。筆者は高速軽量なrxvt-unicode(urxvt)を使っています。eshellがtermを呼び出すeshell-exec-visual関数を丸ごと再定義しています。(List3)

List2:eshellからurxvtを呼び出す設定

(require 'em-term)
(defun eshell-exec-visual (&rest args)
  (apply 'start-process
         "eshell-exec-visual" " eshell-exec-visual"
         "urxvt" "-title" "eshell-exec-visual" "-e" args)
  nil)

Unixコマンドエミュレーションを無効にする

 eshellには内部コマンドとしてcpやmvなどの基本的なUnixコマンドが定義されています。このおかげでWindowsでもそれらのコマンドが使えます。

 しかし、それらはelispで実装されているため、動作はとても遅いです。しかもコピー動作中はEmacsが固まってしまうので、大きいファイルを扱うときには耐えがたい苦痛です。おまけにサポートされているオプションが本物よりも少ないです。

 この「劣化Unixコマンド問題」を回避するには以下をeshell関連の設定の先頭に加えます。eshellはモジュール構成になっているので、不要なモジュールを読み込まないようにすればいいのです。(List4)

List3:Unixコマンドエミュレーション無効化

(eval-after-load "esh-module"
    '(setq eshell-modules-list (delq 'eshell-ls (delq 'eshell-unix eshell-modules-list))))

 eshellの挙動の一貫性を保つためだとは思いますが、本物のUnixコマンドが存在するのにEmacs Lisp版がデフォルトで実行されるのは、やりすぎだと筆者は考えています。それならば、Windowsであってもgnupack(Cygwin含む日本語Emacs環境)等で基本的なUnixコマンドをインストールした方が快適です。

 ですが根本的にはGNU/LinuxなどのUnix系OSをメイン環境にすることが一番です。Windowsでは外部プログラム周りで余計な苦労をします。まるで持病のようです。特にCygwinとMinGWとWindowsネイティブ間でのくい違いはあまりにも痛いです。確かにパッケージマネージャーChocolateyは便利ですが提供されているバイナリが古いこともあります。

 Windowsしか使っていないのであれば、この機会にぜひ一度GNU/Linuxを試してみてください。Emacsに限らず最新ソフトウェアをコマンド一発でインストールできます。Windowsでは動作しなかった、あるいは動作させるのにものすごく苦労したものがGNU/Linuxではあっさり動作することが多々あります。非本質的な問題によるストレスから解放された喜びをぜひとも感じていただきたいです。Emacsをここまで乗りこなせたあなたならばすぐに慣れます。

まとめ

 eshellの主な操作方法を表にまとめておきます。eshellはとても奥が深い世界であり、ここで伝えたことはほんのさわりに過ぎません。シェルコマンドとEmacs Lispが絶妙なバランスで調和した世界をお楽しみください。

表:eshell操作方法のまとめ

キー 解説
RET コマンド実行
M-p 前の履歴を取り出す
M-n 後の履歴を取り出す
C-a コマンドラインの行頭へ
C-c C-c コマンドを強制終了
C-c C-d EOFを送信
C-c C-e コマンドラインを最下行に持っていく
C-c C-r 直前のコマンド出力の先頭へ
C-c C-l 履歴を一覧表示
C-c C-m 現在のコマンドラインをコピー
C-c C-p 前のコマンドラインへ
C-c C-n 後のコマンドラインへ
C-c C-u コマンドラインをキル
C-c C-y 直前の引数をコピー

タグ

#7 多機能ファイラー「dired」 (Software Design 2014年11月号掲載記事) Emacs dired wdired インストール 設定 使い方

Software Design連載記事を掲載します。

株式会社技術評論社の許可を得て掲載しています。
草稿なので細かい部分は実際の記事とは異なることがあります。

他の記事は左下にある「■雑誌連載中(全文公開)」から見られます。

Emacsに備わった最強のファイラー

 ども、Emacs情報サイトrubikitch.comの運営が軌道に乗ってきたるびきちです。今回採り上げるのは、diredというEmacsに備わったファイラーです。ファイラーとは、ディレクトリ内のファイルを一覧したり、ファイルを開いたり、1つ以上のファイルをコピー、移動、削除などを行うアプリケーションです。これまで「文字入力の一元化」というコンセプトでEmacsのテキストエディタとしての機能を解説してきましたが、実はファイル管理においてもそれが活きてきます。

 ファイラーは今や星の数ほど存在します。有名どころにFDCloneやMidnight Commanderなどがありますが、筆者は使ったことがありません。カスタマイズ性を謳ったファイラーもありますが、diredはそんなのとは次元そのものが異なります。diredはEmacs Lispで書かれているので、diredの挙動「すべて」を自由にコントロールできるのです。そう、すべてです。なぜならdired含むEmacs LispアプリケーションはコアとなるLisp関数をも再定義可能です。もしそこにバグがあったり気に入らなければ自分で再定義して解決できます。その他のファイラーは「ここがこうだったらいいのに」と思ってもカスタマイズできない部分に遭遇したら解決できません。コアの再定義などできるはずがありません。

 すべてがコントロール可能という特性は、Emacs入門者にとっては特にメリットに感じないかもしれません。けれども、Emacsを長年使っていくことで自分の知識・スキルが上がるようになれば、自分にとっての理想像ができてきます。入門者でも使えるし、熟練者の要望にも応えてくれるのがEmacs Lispのすごいところです。diredの理想像を表現したものとして、diredの拡張パッケージがたくさん存在します。

 Emacsユーザにとって最強のファイラーはdiredです。EmacsがLispという言語を拡張言語として採用した時点で最強は決まっています。diredがあれば、他のファイラーはいりません。歴史があって安定していてたくさんの拡張パッケージがあって、その気になれば自分で自在にコントロールできるのですから。

起動方法

 diredの主な起動方法は2つあります。ひとつめはC-x C-fでディレクトリを開く方法です。C-x C-fは本来ファイルを開くコマンドですが、ディレクトリを開こうとするとdiredが立ち上がります。C-x C-fがファイルとディレクトリそれぞれにおいて別の挙動を持っていることから、diredはEmacsの生態系において自然に溶け込んでいることがわかります。

 もうひとつはC-x dを使う方法です。これはdiredコマンドであり、ワイルドカードが使えるメリットがあります。C-x C-fでワイルドカードを指定するとマッチするファイルすべてを開きますが、C-x dはマッチするファイルのみをdiredで表示します。たとえばC-x d *.txtで拡張子.txtのファイルがdiredで表示されます。

 シェルを使っていればとりあえずlsを実行してファイルを一覧したくなるときがありますよね。そんなときはdiredを起動すればファイルが一覧されるだけでなく、ファイルに対してコピーやシェルコマンド実行などの処理が行えます。複数のファイルをマークすることで、簡単に複数のファイルを処理できます。

20140811013609.png
Fig1: C-x d /tmp/*.txt を実行したところ

ファイルを開く

 diredを使えば、そこからファイルを開くことは簡単になります。ファイル名が一覧されているので、たとえファイル名がうろ覚えでも確実に目的のファイルを指定できます。その場合、diredを開いた直後にisearchを使うと早いです。

 diredからファイルを開くのはRETですが、eとfも使えます。aも似ていますが、ファイルを開いた後にdiredバッファを削除する点が異なります。

 diredを見ながらファイルを開くにはoです。oはdiredバッファの隣のウィンドウでファイルを開きます。ウィンドウが分割されていないときは分割します。

 diredからファイルを閲覧する方法は2つあります。C-oではdiredの隣にファイルを開きますがウィンドウは選択しません。vはRETと同様にdiredからそのファイルにカレントバッファを切り替えますが、その後にview-modeにします。view-modeとは、読み込み専用バッファで閲覧に特化した操作法を提供するマイナーモードです。ファイルを閲覧するときはview-modeにしておけば、Ctrlを使わずに操作できるので、指をいたわることになります。

コピー・移動・削除

 diredはファイラーなので、ファイルに対して様々な処理が行えます。ファイルのコピー、移動(リネーム)、削除などがあります。これらは一貫して大文字のキーに割り当てられています。

 Table1は主なファイル操作をまとめたものです。他にもchmodなり圧縮なりありますが、使用頻度が低いので覚える必要はありません。後述するシェルコマンド実行機能を使えば間に合うからです。

 ファイルを削除するDを実行すると、念のため本当に削除するかどうか聞いてきます。とくにLinuxのファイルシステムにおいてファイル削除は復元困難なので慎重に行う必要があります。削除してハッと気付いても遅いです。大惨事を防ぐためには毎日バックアップをとることが重要です。筆者はバックアップに『何度も』救われました。

 ファイルのリネームと移動は内部的には同じ意味です。同一ディレクトリ内においては文字通りリネームですが、別のディレクトリにおいては「移動」と表現を変えているに過ぎません。移動とはフルパスのリネームと考えてください。

Table1: 主なファイル操作

キー 操作
C コピー
D 削除
R リネーム・移動
H ハードリンク作成
S シンボリックリンク作成

マーク

 複数のファイルを選択して一括した処理を行うのもファイラーの重要な機能です。diredではこの機能を「マーク」といいます。

 マークのコマンドは最低限2つだけ覚えればよいです。ファイルをマークするm、マークを外す(アンマーク)するuです。余裕があればマークを反転させたり、すべてアンマークしたり、マークされたファイル間のカーソル移動、正規表現に基くマークも知っておくに越したことはありません。

 ファイルをマークした後に前述のファイル操作コマンドを使えば、操作対象がマークされたファイルになります。Fig2において、CategoryGamesとCategoryGuileEmacsをマークしているので、処理対象がこれらのファイルであることがわかります。ファイル操作コマンドはマークの有無で一貫した挙動をとります。

20140817012310.png
Fig2: 2つのファイルをマークしCを押したところ

Table2: 主なマークコマンド

キー 操作
m カーソル位置のファイルをマーク
u カーソル位置のファイルをアンマーク
t マークを反転
U 全ファイルをアンマーク
M-{ マークされたファイルへ移動(後方)
M-} マークされたファイルへ移動(前方)
% m 正規表現にマッチするファイルをマーク
* % 正規表現にマッチするファイルをマーク
% g 内容が正規表現にマッチするファイルをマーク

diredを2画面ファイラーとして使う

 diredを2画面ファイラーとして扱うことができます。List1の設定を加えてdiredを2つ開いて配置させたとき、一方のdiredがコピー、移動、リンク作成しようとしたとき、デフォルトの対象ディレクトリが他方のdiredのディレクトリになります。(Fig3)

== List1: 2画面ファイラー用の設定

(setq dired-dwim-target t)

==

20140817012747.png
Fig3: 隣のウィンドウのディレクトリがデフォルト!

ファイル削除に特化した方法

 ファイルを削除する方法は実はDだけではありません。ここで紹介する方法は削除に特化したやり方であり、不要なバックアップファイルなどの掃除もできます。

 diredにはマーク以外にも「削除フラグ」というマークの変種があります。マークは一般的なファイル操作に使えるのに対して、削除フラグは削除に特化したマークといった感じです。

 ファイルを削除する流れは削除対象のファイルに削除フラグをつけて、xで実際に削除をします。カーソル位置のファイルに削除フラグをつけるにはdを押します。d→xという流れです。もちろんマークを使ってm→Dでも削除できます。

 削除フラグを付けるコマンドは他にもあります。#はauto-saveファイルすべてが対象です。~はバックアップファイルが対象です。これらのファイルには#や~が付くので覚えやすいかと思います。

 % &はゴミファイルに削除フラグをつけます。dired-garbage-files-regexpという正規表現にマッチしたものをゴミファイルとみなします。デフォルト設定はList2です。% &を使いたい人は適宜修正してください。

== List2: dired-garbage-files-regexpのデフォルト設定

(setq dired-garbage-files-regexp
      (concat (regexp-opt
               '(".log" ".toc" ".dvi" ".bak" ".orig" ".rej" ".aux"))
              "\\'"))

==

 % dは正規表現にマッチするファイルに削除フラグを付けますが、実際にところはM-!でrmを実行した方が早いと思います。diredの機能をすべて使うのではなく、既存の知識と併用して柔軟に対処するのが大事です。

 マークと削除フラグは* cで交換できます。マークを削除フラグにするには * c * D を、削除フラグをマークにするには * c D * を使います。

Table3: 削除フラグ関係のコマンド

キー 操作
d カーソル位置のファイルに削除フラグ
x 削除フラグのファイルを削除
# auto-saveファイルすべてに削除フラグ
~ バックアップファイルすべてに削除フラグ
% & ゴミファイルすべてに削除フラグ
% d 正規表現にマッチするファイルに削除フラグ
* c * D マークを削除フラグに
* c D * 削除フラグをマークに

diredからシェルコマンドを実行する

 diredからシェルコマンドを実行するには「!」を使います。これさえ知っていれば、たとえ他のファイル操作コマンドを忘れていたとしても同じことができます。Emacsからシェルコマンドを実行するM-!との対比から、忘れにくいと思います。

 !も他のファイル操作コマンドの例に漏れず、マークの有無で挙動が変わります。マークがないときは現在のファイルを、マークがあるときはマークされたファイルが対象になります。

 !の基本的な挙動は、シェルコマンドの後ろにファイル名を指定したシェルコマンドを各々のファイルに対して実行するものです。たとえば、2つのファイルaとbにマークされている状態で「echo 1」を実行したら、「echo 1 a」と「echo 1 b」が実行されます。

 ファイル名の埋め込み方は任意に指定できます。デフォルトではシェルコマンドの後ろに1ファイルとなりますが、「?」「*」という文字を使えば別な場所にできます。たとえば、diredで/tmp/を開いていて、ファイルaとbにマークがしてあるとします。

Table4: !を実行した結果

指定したシェルコマンド echo x echo x ? echo * x echo ? x
実行されるシェルコマンド echo x a echo x a echo a b x echo a x
  echo x b echo x b   echo b x
実行結果 x a x a a b x a x
  x b x b   b x

 シェルコマンドの最後に「&」を指定すれば、非同期実行になります。つまり、シェルコマンドを実行中でもEmacsを操作できます。

diredでファイル名のみを表示する

 通常のdiredはls -lの出力結果を表示するため、ファイル名がどうしても右端に表示されてしまいます。これだと、単にファイル一覧のみを見たい場合には煩わしいものです。そこで、dired-details.elを使ってファイルの詳細を隠してしまいましょう。

 Emacsにはバッファの任意の部分を非表示にする機能があります。dired-details.elではこの機能を活用することで、実際のバッファにはデータ上はls -lの結果が入っていますが、見かけ上はファイル名のみを表示できるのです。

 dired-details.elと組み合わせると便利なのがdired-toggle.elです。M-x dired-toggleを実行するとdiredを左端に表示させ、qでdiredをウィンドウごと削除します。dired-details.elによりファイル名のみが表示される状態で使うと、カレントディレクトリのファイルが左端にきれいに表示されるようになります。(Fig4)

 どちらもMELPAというパッケージ登録所に登録されているので、パッケージの設定(List3)さえしてしまえばEmacsの中でインストールできます。

M-x package-refresh-contents
M-x package-install dired-details
M-x package-install dired-toggle

== List3:パッケージを使うための初期設定

(package-initialize)
(add-to-list 'package-archives '("marmalade" . "http://marmalade-repo.org/packages/"))
(add-to-list 'package-archives '("melpa" . "http://melpa.org/packages/") t)

==

== List4:dired-details/dired-toggleを使うための設定
(require ‘dired)
(require ‘dired-details)
(dired-details-install)
(setq dired-details-hidden-string “”)
(setq dired-details-hide-link-targets nil)
==

20140911084423.png
Fig4: dired-details + dired-toggle

真のDirectory editor「wdired」

 最後にお伝えしたいのは、diredをDIRectory EDitorと呼ぶのにふさわしいwdiredという機能です。wdiredとはWritable DIREDの略で、diredバッファを書き換えてその結果をファイル名に反映させるというものです。ファイルのリネームや移動という作業を普段のEmacsコマンドで行えるのが何よりの強味です。wdiredでできることは以下のことです。

  • ファイルのリネーム
  • ファイルを別のディレクトリへ移動(同時にリネームも可)
  • パーミッションの変更
  • シンボリックリンク先の変更

 wdiredは標準機能ですがキーに割り当てられていないので、List5の設定をしておきます。

== List5: wdiredの初期設定

(require 'wdired)
(setq wdired-allow-to-change-permissions t)
(define-key dired-mode-map "e" 'wdired-change-to-wdired-mode)

==

 使い方は極めて簡単で、eでEditable Diredモードにした後、ファイル名を書き換え、C-x C-sでその結果を反映させるだけです。diredバッファを普通のファイルであるかのように書き換えて保存するだけなので極めて直観的です。

 wdiredの場面では置換と矩形編集が便利です。M-%で置換したり、C-x r tで一連のファイルに別のディレクトリ名を挿入したりしましょう。

 また、パーミッションのビットでSPCを押せばそのビットがトグルするので、wdiredでパーミッションも変更できます。

 書き換え結果を破棄するにはC-c C-kです。

終わりに

 今回はdiredを取り上げました。通常のファイル操作はもちろんのこと、シェルコマンドの連携とwdiredは超強力です。MELPAにはたくさんのdired拡張があるので、ぜひあなた好みのdiredを作り上げていってください。

 筆者のサイトrubikitch.comではEmacsの情報発信基地をめざすべく、定番情報や最新情報を日々更新しています。さらにステップアップしたい方はメルマガ登録お願いします。http://www.mag2.com/m/0001373131.html Happy Emacsing!

タグ

emacs hemisu-theme.el : 白背景・黒背景カラーテーマセット | MELPA Emacs Lisp Elisp パッケージ インストール 設定 使い方 スクリーンショット

パッケージ名 hemisu-theme
概要(原文) Hemisu for Emacs.
リポジトリ MELPA
取得先 https://github.com/andrzejsliwa/hemisu-theme
バージョン 20130508.1144
関連記事 package:hemisu-theme

helmisu-theme.el は、以下のパッケージに対応したカラーテーマ群です。

  • button
  • font-lock
  • header-line
  • mode-line
  • fill-column-indicator

以下のカラーテーマが定義されています。

  • hemisu-dark
  • hemisu-light

screenshot.png
Fig1: 本家スクリーンショット

hemisu-theme インストール

このパッケージはmelpaにあるので パッケージの初期設定 を行ってください。

M-x package-refresh-contents
M-x package-install hemisu-theme

theme: hemisu-dark

スクリーンショット

20160207000139.png
Fig3: emacs-lisp-mode

20160207000143.png
Fig4: magit

20160207000146.png
Fig5: grep

20160207000148.png
Fig6: outline-mode

20160207000151.png
Fig7: org-mode

20160207000153.png
Fig8: dired

20160207000155.png
Fig9: web-mode

20160207000157.png
Fig10: markdown-mode

20160207000200.png
Fig11: helm

設定

(load-theme 'hemisu-dark t)

実行方法

$ emacs -Q -f package-initialize -eval '(load-theme (quote hemisu-dark) t)'

theme: hemisu-light

スクリーンショット

20160207000238.png
Fig12: emacs-lisp-mode

20160207000242.png
Fig13: magit

20160207000244.png
Fig14: grep

20160207000246.png
Fig15: outline-mode

20160207000247.png
Fig16: org-mode

20160207000249.png
Fig17: dired

20160207000251.png
Fig18: web-mode

20160207000253.png
Fig19: markdown-mode

20160207000256.png
Fig20: helm

設定

(load-theme 'hemisu-light t)

実行方法

$ emacs -Q -f package-initialize -eval '(load-theme (quote hemisu-light) t)'

タグ

2016/02/06 | コメント/トラックバック(0) |

カテゴリー:Emacs theme

emacs ir-black-theme.el : 真っ黒背景のカラーテーマ | MELPA Emacs Lisp Elisp パッケージ インストール 設定 使い方 スクリーンショット

パッケージ名 ir-black-theme
概要(原文) Port of ir-black theme
リポジトリ MELPA
取得先 https://github.com/jmdeldin/ir-black-theme.el
バージョン 20130302.2355
関連記事 package:ir-black-theme

ir-black-theme.el は、以下のパッケージに対応したカラーテーマです。

  • button
  • header-line
  • hl-line
  • info
  • font-lock
  • linum
  • mode-line
  • show-paren
  • isearch
  • magit
  • org
  • starter-kit

ir-black-theme インストール

このパッケージはmelpaにあるので パッケージの初期設定 を行ってください。

M-x package-refresh-contents
M-x package-install ir-black-theme

スクリーンショット

20160205155832.png
Fig1: emacs-lisp-mode

20160205155837.png
Fig2: magit

20160205155839.png
Fig3: grep

20160205155840.png
Fig4: outline-mode

20160205155842.png
Fig5: org-mode

20160205155845.png
Fig6: dired

20160205155846.png
Fig7: web-mode

20160205155848.png
Fig8: markdown-mode

20160205155851.png
Fig9: helm

screenshot.png
Fig10: 本家スクリーンショット

設定

(load-theme 'ir-black t)

実行方法

$ emacs -Q -f package-initialize -eval '(load-theme (quote ir-black) t)'

タグ

2016/02/05 | コメント/トラックバック(0) |

カテゴリー:Emacs theme

emacs soothe-theme.el : 黒背景のカラーテーマ | MELPA Emacs Lisp Elisp パッケージ インストール 設定 使い方 スクリーンショット

パッケージ名 soothe-theme
概要(原文) a dark colorful theme for Emacs24.
リポジトリ MELPA
取得先 https://github.com/jasonm23/emacs-soothe-theme
バージョン 20141027.741
関連記事 package:soothe-theme

soothe-theme.el は、以下のパッケージに対応したカラーテーマです。

  • hl-line
  • font-lock
  • link
  • mode-line
  • which-func
  • isearch
  • auto-complete
  • tooltip
  • popup
  • dired
  • js3-mode
  • diff
  • linum
  • show-paren-mode
  • ido
  • whitespace-mode
  • flyspell-mode
  • flymake-mode
  • dropdown-list
  • git-gutter
  • magit
  • diff-hl
  • iedit
  • highlight-indentation-mode
  • ecb
  • org
  • cua-mode
  • hl-sexp
  • rainbow-delimiters
  • powerline
  • fill-column-indicator

soothe-theme インストール

このパッケージはmelpaにあるので パッケージの初期設定 を行ってください。

M-x package-refresh-contents
M-x package-install soothe-theme

スクリーンショット

20160204112753.png
Fig1: emacs-lisp-mode

20160204112759.png
Fig2: magit

20160204112801.png
Fig3: grep

20160204112803.png
Fig4: outline-mode

20160204112804.png
Fig5: org-mode

20160204112806.png
Fig6: dired

20160204112808.png
Fig7: web-mode

20160204112809.png
Fig8: markdown-mode

20160204112812.png
Fig9: helm

soothe-terminal.png
Fig10: 本家スクリーンショット

soothe-ruby.png
Fig11: 本家スクリーンショット

soothe-html.png
Fig12: 本家スクリーンショット

設定

(load-theme 'soothe t)

実行方法

$ emacs -Q -f package-initialize -eval '(load-theme (quote soothe) t)'

タグ

2016/02/04 | コメント/トラックバック(0) |

カテゴリー:Emacs theme

emacs sunny-day-theme.el : 黄色背景なカラーテーマ | MELPA Emacs Lisp Elisp パッケージ インストール 設定 使い方 スクリーンショット

パッケージ名 sunny-day-theme
概要(原文) Emacs24 theme with a light background.
リポジトリ MELPA
取得先 https://github.com/mswift42/sunny-day-theme
バージョン 20140413.1425
関連記事 package:sunny-day-theme

sunny-day-theme.el は、以下のパッケージに対応したカラーテーマです。

  • font-lock
  • hl-line
  • isearch
  • show-paren
  • mode-line
  • link
  • org
  • font-latex
  • ido
  • gnus
  • magit
  • auto-complete
  • change-log
  • diff
  • js2-mode
  • slime

sunny-day-theme インストール

このパッケージはmelpaにあるので パッケージの初期設定 を行ってください。

M-x package-refresh-contents
M-x package-install sunny-day-theme

スクリーンショット

20160203024123.png
Fig1: emacs-lisp-mode

20160203024127.png
Fig2: magit

20160203024129.png
Fig3: grep

20160203024131.png
Fig4: outline-mode

20160203024133.png
Fig5: org-mode

20160203024134.png
Fig6: dired

20160203024136.png
Fig7: web-mode

20160203024138.png
Fig8: markdown-mode

20160203024141.png
Fig9: helm

Screenshot.png
Fig10: 本家スクリーンショット

設定

(load-theme 'sunny-day t)

実行方法

$ emacs -Q -f package-initialize -eval '(load-theme (quote sunny-day) t)'

タグ

2016/02/03 | コメント/トラックバック(0) |

カテゴリー:Emacs theme

emacs gandalf-theme.el : 白背景なカラーテーマ | MELPA Emacs Lisp Elisp パッケージ インストール 設定 使い方 スクリーンショット

パッケージ名 gandalf-theme
概要(原文) Gandalf color theme
リポジトリ MELPA
取得先 https://github.com/ptrv/gandalf-theme-emacs
バージョン 20130809.247
関連記事 package:gandalf-theme

gandalf-theme.el は、以下のパッケージに対応したカラーテーマです。

  • font-lock
  • mode-line
  • isearch
  • hl-line
  • erc
  • ido
  • magit
  • rainbow-delimiters
  • undo-tree
  • markdown-mode
  • flymake
  • eshell
  • diff

gandalf-theme インストール

このパッケージはmelpaにあるので パッケージの初期設定 を行ってください。

M-x package-refresh-contents
M-x package-install gandalf-theme

スクリーンショット

20160202062822.png
Fig1: emacs-lisp-mode

20160202062826.png
Fig2: magit

20160202062828.png
Fig3: grep

20160202062830.png
Fig4: outline-mode

20160202062832.png
Fig5: org-mode

20160202062834.png
Fig6: dired

20160202062836.png
Fig7: web-mode

20160202062838.png
Fig8: markdown-mode

20160202062841.png
Fig9: helm

screenshot.png
Fig10: 本家スクリーンショット

設定

(load-theme 'gandalf t)

実行方法

$ emacs -Q -f package-initialize -eval '(load-theme (quote gandalf) t)'

タグ

2016/02/02 | コメント/トラックバック(0) |

カテゴリー:Emacs theme

emacs reykjavik-theme.el : ダークなカラーテーマ | MELPA Emacs Lisp Elisp パッケージ インストール 設定 使い方 スクリーンショット

パッケージ名 reykjavik-theme
概要(原文) Theme with a dark background.
リポジトリ MELPA
取得先 https://github.com/mswift42/reykjavik-theme
バージョン 20160109.0
関連記事 package:reykjavik-theme

reykjavik-theme.el は、以下のパッケージに対応したカラーテーマです。

  • font-lock
  • hl-line
  • show-paren
  • isearch
  • mode-line
  • link
  • org
  • font-latex
  • ido
  • gnus
  • mu4e
  • ffap
  • js2-mode
  • js3-mode
  • auto-complete
  • info
  • icomplete+
  • undo-tree
  • slime
  • rainbow-delimiters
  • magit
  • term
  • helm
  • company
  • web-mode
  • jde

reykjavik-theme インストール

このパッケージはmelpaにあるので パッケージの初期設定 を行ってください。

M-x package-refresh-contents
M-x package-install reykjavik-theme

スクリーンショット

20160201222430.png
Fig1: emacs-lisp-mode

20160201222434.png
Fig2: magit

20160201222436.png
Fig3: grep

20160201222438.png
Fig4: outline-mode

20160201222439.png
Fig5: org-mode

20160201222441.png
Fig6: dired

20160201222443.png
Fig7: web-mode

20160201222445.png
Fig8: markdown-mode

20160201222447.png
Fig9: helm

tc1emacsreykjavik.png
Fig10: 本家スクリーンショット

tc1reykjavikemacsclojure.png
Fig11: 本家スクリーンショット

設定

(load-theme 'reykjavik t)

実行方法

$ emacs -Q -f package-initialize -eval '(load-theme (quote reykjavik) t)'

タグ

2016/02/01 | コメント/トラックバック(0) |

カテゴリー:Emacs theme

emacs hamburg-theme.el : ダークなカラーテーマ | MELPA Emacs Lisp Elisp パッケージ インストール 設定 使い方 スクリーンショット

パッケージ名 hamburg-theme
概要(原文) Color Theme with a dark blue background.
リポジトリ MELPA
取得先 https://github.com/mswift42/hamburg-theme
バージョン 20160122.2340
関連記事 package:hamburg-theme

hamburg-theme.el は、以下のパッケージに対応したカラーテーマです。

  • font-lock
  • hl-line
  • show-paren
  • isearch
  • mode-line
  • link
  • org
  • font-latex
  • ido
  • gnus
  • mu4e
  • ffap
  • js2-mode
  • js3-mode
  • auto-complete
  • info
  • icomplete+
  • undo-tree
  • slime
  • rainbow-delimiters
  • magit
  • term
  • helm
  • company
  • web-mode
  • jde

hamburg-theme インストール

このパッケージはmelpaにあるので パッケージの初期設定 を行ってください。

M-x package-refresh-contents
M-x package-install hamburg-theme

スクリーンショット

20160131054903.png
Fig1: emacs-lisp-mode

20160131054907.png
Fig2: magit

20160131054909.png
Fig3: grep

20160131054911.png
Fig4: outline-mode

20160131054913.png
Fig5: org-mode

20160131054914.png
Fig6: dired

20160131054916.png
Fig7: web-mode

20160131054918.png
Fig8: markdown-mode

20160131054921.png
Fig9: helm

emacshamburgjsclojure.png
Fig10: 本家スクリーンショット

emacshamburgpyruby.png
Fig11: 本家スクリーンショット

設定

(load-theme 'hamburg t)

実行方法

$ emacs -Q -f package-initialize -eval '(load-theme (quote hamburg) t)'

タグ

2016/01/31 | コメント/トラックバック(0) |

カテゴリー:Emacs theme

emacs lavender-theme.el : ダークなカラーテーマ | MELPA Emacs Lisp Elisp パッケージ インストール 設定 使い方 スクリーンショット

パッケージ名 lavender-theme
概要(原文) an Emacs 24 theme based on Lavender (tmTheme)
リポジトリ MELPA
取得先 https://github.com/emacsfodder/emacs-lavender-theme
バージョン 20141115.2302
関連記事 package:lavender-theme

lavender-theme.el は、以下のパッケージに対応したカラーテーマです。

  • linum
  • link
  • button
  • header-line
  • mode-line
  • isearch
  • tooltip
  • js3
  • cua-rectangle
  • magit
  • flyspell-mode
  • flymake-mode
  • git-gutter
  • diff
  • font-lock
  • rainbow-delimiters

lavender-theme インストール

このパッケージはmelpaにあるので パッケージの初期設定 を行ってください。

M-x package-refresh-contents
M-x package-install lavender-theme

スクリーンショット

20160130051423.png
Fig1: emacs-lisp-mode

20160130051427.png
Fig2: magit

20160130051429.png
Fig3: grep

20160130051432.png
Fig4: outline-mode

20160130051434.png
Fig5: org-mode

20160130051436.png
Fig6: dired

20160130051438.png
Fig7: web-mode

20160130051440.png
Fig8: markdown-mode

20160130051443.png
Fig9: helm

lavender-theme.png
Fig10: 本家スクリーンショット

設定

(load-theme 'lavender t)

実行方法

$ emacs -Q -f package-initialize -eval '(load-theme (quote lavender) t)'

タグ

2016/01/30 | コメント/トラックバック(0) |

カテゴリー:Emacs theme

このページの先頭へ