[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端] [?]

25. ディレクトリ表示 ― dired など (2009/03/30)

URL="http://www.bookshelf.jp/cgi-bin/goto.cgi?file=meadow&node=dired"
"MeadowMemo/ディレクトリ表示―diredなど"へのコメント(無し)
検索全文Elisp


この章で紹介していること

Meadow/Emacs で表示できるのはファイルだけではありません.ディレクトリも表示するこ とができるのです.エクスプローラのようにファイルの削除やコピーの操作も可能になっ ています.この機能のことを Emacs では dired (私は「ダイアード」と読んでます) と呼び ます.ディレクトリエディタとも言います.

本ページの前半ではこの dired の基本的な使い方を紹介していきます.後半では,dired のカスタマイズ方法や dired に関連した Elisp を紹介していきます.



[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端] [?]

25.1 ディレクトリ表示 ― dired (2005/02/17)

URL="http://www.bookshelf.jp/cgi-bin/goto.cgi?file=meadow&node=dired%20basic"
"MeadowMemo/ディレクトリ表示―dired"へのコメント(無し)
検索全文Elisp

ディレクトリの表示

diredを起動してディレクトリの内容を表示するためには,C-x d あるいは C-x C-f としてから,ディレクトリを指定します.すると,dired が起動し現在の ディレクトリ下のファイルをすべて表示することができます.

また,M-x dired-other-frameとすると, 別ウィンドウに dired を起動することが できます.

こうして,diredを起動すると,例えば以下のように表示されます(設定済みMeadowでの例 です).

 f:/www/soft:
 total used in directory 16984 available 6999328
 drwxrwxrwx   2 usert root       0 02-17 08:32 .
 drwxrwxrwx  16 usert root       0 02-17 08:23 ..
 drwxrwxrwx   3 usert root       0 02-17 08:32 catalog
 drwxrwxrwx   2 usert root       0 02-17 08:32 css
 drwxrwxrwx   3 usert root       0 02-17 08:32 flash
 drwxrwxrwx   3 usert root       0 02-17 08:33 natsu
 drwxrwxrwx   2 usert root       0 02-17 08:33 wiki
 -rw-rw-rw-   1 usert root     262 2004-04-26  .cvsignore
 -rw-rw-rw-   1 usert root      38 2004-02-05  .htaccess
 -rw-rw-rw-   1 usert root   69597 2004-04-26  199image.jpg
 -rw-rw-rw-   1 usert root     972 12-19 14:27 CheckedBox.png

特定の拡張子のファイルのみ表示

C-x dで dired を使う時には, ワイルドカードを使うことができます.

例えば, c:/*.txt と指定すれば, 拡張子が txt のファイルのみ一覧表示できますし, c:/a*.txt とすれば a から始まり,拡張子が txt なファイルのみを表示できます.

このように C-x d でファイル名を指定することで,目的のファイルのみを一覧表 示できます.

dired での主要なキーバインド

dired でのディレクトリ移動,削除などの作業は以下のようにします.

その他のキーバインド

他によく使うキーバインドです.

25.1.1 dired を拡張する − dired-x (2005/02/17)  
25.1.2 任意のファイル名のファイルのみを dired ― find-dired (2005/02/17)  
25.1.3 任意の文字を含むファイルのみを dired ― find-grep-dired (2005/02/17)  
25.1.4 find-dired を Cygwin 無しで使う (2005/02/17)  



[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端] [?]

25.1.1 dired を拡張する − dired-x (2005/02/17)

URL="http://www.bookshelf.jp/cgi-bin/goto.cgi?file=meadow&node=dired-x"
"MeadowMemo/diredを拡張する−dired-x"へのコメント(無し)
検索全文Elisp
要約

diredにいくつかの機能を追加する標準付属のElisp.

何ができるのか?

C-x C-j で一発で dired を起動できたりします.

設定済みMeadowでは

設定済みです.

インストール方法

標準で付属しています.

設定方法

以下を.emacsに追加します.

 
(load "dired-x")

詳しい使い方

上記の設定を追加することで,通常のバッファ時, dired バッファの両方に機能が追加さ れます.

通常のバッファにいる時に追加される機能としては,C-x C-j で現在のディレクト リを dired で開く機能や M-x dired-very-clean-tex で TeX 関連の不要なファイ ルを削除する機能があります.

dired バッファに追加される機能には *. として指定した拡張子を持つファイルに マークをつける機能などを使うことができます.

また,詳しくは コマンドの実行で紹介しますが, dired での X も便利になります.



[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端] [?]

25.1.2 任意のファイル名のファイルのみを dired ― find-dired (2005/02/17)

URL="http://www.bookshelf.jp/cgi-bin/goto.cgi?file=meadow&node=find-dired"
"MeadowMemo/任意のファイル名のファイルのみをdired―find-dired"へのコメント(無し)
検索全文Elisp

何ができるのか

dired ではファイルが多すぎてよく分からない,多くのサブディレクトリに分かれていて 扱いにくいということがあります.

そんな時に便利なのが find-dired です.これを使うと,指定した条件に一致したファイ ルだけを表示できます.これにより,特定の文字を含むファイル名のファイルのみを表示 といったことができます.

必要なもの

find というコマンドが必要です. find は Cygwin を参考にインストール してあれば入っているはずです.

詳しい使い方

M-x find-dired で起動し,ディレクトリ名と find の引数を入力すると,指定した ディレクトリ以下からファイルを探して一つのディレクトリであるかのように,扱うこと ができます.

例えば, M-x find-dired RET c: RETとした後,-name "*.html"とすると,C ドライブ以下のすべての html ファイルを dired で表示できます.

find-dired も普通の dired と同じなので,一覧を表示した後には普通の dired として使 うことができます.

また,この find-dired と同じことは M-x find-name-dired でも実行することがで きます.こちらは,ファイル名のみを対象とした検索になっており,M-x find-name-dired RET C: RET *.html で一覧を表示できます.

find がない場合

標準で find-lisp.el という Elisp が附属しています.これは「 emulation of find in Emacs Lisp 」,つまり find を Elisp で実現したものです.

これにより M-x find-lisp-find-dired で find-dired と同じことができます.し かも,表示されたバッファで M-x find-lisp-find-dired-filter とすると,簡単に フィルタを変更することができます.

ただし,どうもエラー処理が不十分なのか, Windows との相性が悪いのか,ディレクトリ によってはエラーになってしまうことがあります.



[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端] [?]

25.1.3 任意の文字を含むファイルのみを dired ― find-grep-dired (2005/02/17)

URL="http://www.bookshelf.jp/cgi-bin/goto.cgi?file=meadow&node=find-grep-dired"
"MeadowMemo/任意の文字を含むファイルのみをdired―find-grep-dired"へのコメント(無し)
検索全文Elisp

何が問題なのか?

ファイル名は規則的に付けてないけど,ある文字を含んでるファイルだけを一覧したいと いうこともよくあることです.

何ができるのか?

特定の文字を含むファイルのみを dired で表示することができます.

必要なもの

find と grep が必要です (find と grep は Cygwin をインストールしてあ れば入っているはずです.日本語化は 51.2 日本語 grep − jVim 版 (2005/11/22) を参考に) .

詳しい使い方

M-x find-grep-dired とします.すると,ミニバッファに

Find-grep (directory): f:/www/soft/

のように表示されますので,ディレクトリを指定します.次に,ミニバッファに

Find-grep (grep regexp):

と表示されるので,検索する文字を指定します.すると,その文字を含むファイルのみを dired で表示できます. あとは普通の dired と同じように使うことができます.



[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端] [?]

25.1.4 find-dired を Cygwin 無しで使う (2005/02/17)

URL="http://www.bookshelf.jp/cgi-bin/goto.cgi?file=meadow&node=find-dired-lisp"
"MeadowMemo/find-diredをCygwin無しで使う"へのコメント(無し)
検索全文Elisp
要約

find-dired や find-grep-dired には find や grep といったコマンドが必要になります. しかし,それらが無くても Lisp のみで同等のコマンドを実現できます.

何が問題なのか?

find-diredやfind-grep-dired を使いたいが,Cygwin は入れることができないといった場 合があります.そのような場合には,これらのコマンドを利用できません.

何ができるのか?

Lisp のみで書いたコマンドを使うことで,同じようなコマンドを利用できます.

設定済みMeadowでは

インストール済みですので,すぐに試すことができます.

インストール方法

23.3.3 一致したファイルをすべて開く ― findr (2004/04/30) が必要なのであらかじめインストールしておきます(findrの設定は不要です).

そして,find-dired-lisp.el をダウンロードし,ロードパスの通ったところへ置きます.

設定方法

以下を .emacs に追加します.

 
(autoload 'find-dired-lisp
  "find-dired-lisp" "findr" t nil)
(autoload 'find-grep-dired-lisp
  "find-dired-lisp" "findr" t nil)

詳しい使い方

M-x find-dired-lispM-x find-grep-dired-lisp として実行します.

M-x find-dired-lispであれば

Run find in directory: d:/home/

でディレクトリを指定し,

Run find (with regexp): 

で正規表現を指定すると,指定した正規表現に一致するファイルを指定したディレクトリ 以下から検索し,dired で表示します.M-x find-grep-dired-lisp も操作方法は同 じで指定した正規表現を含むファイルのみが一覧されます.

コメント

個人的にはとても重宝してます.とても適当に思い付きだけで作ったものとは思えません.



[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端] [?]

25.2 dired の標準コマンド (2005/02/17)

URL="http://www.bookshelf.jp/cgi-bin/goto.cgi?file=meadow&node=dired%20command"
"MeadowMemo/diredの標準コマンド"へのコメント(無し)
検索全文Elisp

dired に標準で備わっているコマンドを紹介します.

25.2.1 dired から検索・置換 (2005/02/17)  



[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端] [?]

25.2.1 dired から検索・置換 (2005/02/17)

URL="http://www.bookshelf.jp/cgi-bin/goto.cgi?file=meadow&node=dired-do-search"
"MeadowMemo/diredから検索・置換"へのコメント(無し)
検索全文Elisp

何が問題なのか?

複数のファイルを検索する時には, grep がよく使われています. しかし, grep で検索するファイルを細かく設定するのは困難です.

何ができるのか?

dired でマークをつけたファイルだけを対象に検索・置換できます.

検索するファイルは dired で選択できるので,簡単に対象となるファイルを指定できます.

詳しい使い方

C-x d で dired を表示した後で,適当なファイルに m でマークをつけます.

こうしておいて,A (dired-do-search) とすると,検索語の入力を求められますの で,入力します.

すると,m でマークをつけたファイルを順番に開き,検索してくれます.そして, 最初に一致した場所へカーソルが移動します.そこで,検索は停止しますので,編集など を行うことができます.

次の一致箇所へ行きたければM-, とします.一致箇所を一覧することはできません が,ちょっとした検索に便利です.

同じようにして Q (dired-do-query-replace-regexp) で置換もできます.



[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端] [?]

25.3 dired のコマンドを追加/拡張する (2009/03/30)

URL="http://www.bookshelf.jp/cgi-bin/goto.cgi?file=meadow&node=dired%20addcom"
"MeadowMemo/diredのコマンドを追加/拡張する"へのコメント(無し)
検索全文Elisp

標準で付属しているコマンドの拡張や新たな機能を追加する方法を紹介します.

25.3.1 マークをトグル式にする (2005/02/17)  
25.3.2 コマンドの実行 (2009/03/30)  
25.3.3 ファイルの文字コードを一括変換 (2003/11/18)  
25.3.4 dired で再帰コピー,再帰削除 (2005/02/17)  
25.3.5 フォルダを開く時, 新しいバッファを作成しない ― dired (2003/07/11)  
25.3.6 マイコンピュータ/ネットワークを再現 (2005/04/06)  
25.3.7 dired から関連付けられたソフトで開く (2003/11/18)  
25.3.8 dired で Windows のリンクを扱う ― w32-symlinks (2005/02/17)  
25.3.9 tar/lzh の内容表示/展開 (2005/02/17)  
25.3.10 dired で Explorer のようにファイル名の 1 文字目で検索する (2005/02/17)  
25.3.11 dired から印刷 (2005/02/17)  



[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端] [?]

25.3.1 マークをトグル式にする (2005/02/17)

URL="http://www.bookshelf.jp/cgi-bin/goto.cgi?file=meadow&node=dired-toggle-mark"
"MeadowMemo/マークをトグル式にする"へのコメント(無し)
検索全文Elisp
要約

通常は m でマークをつけて,u でマークを外しますが,それを1キーで実行 できるようにします.

情報源

フォームからの投稿

何が問題なのか?

dired では m でマークを付け,u でマークを外します.これにより,処理を 行うファイルを選択するのですが,mu を使い分けないといけません.

何ができるのか?

SPCでマークを付ける/外すをトグルするようにできます.つまり,マークがなけれ ばマークを付け,マークがあればマークを外すことができます.

設定方法

以下を.emacs に追加します.

 
;; スペースでマークする (FD like)
(define-key dired-mode-map " " 'dired-toggle-mark)
(defun dired-toggle-mark (arg)
  "Toggle the current (or next ARG) files."
  ;; S.Namba Sat Aug 10 12:20:36 1996
  (interactive "P")
  (let ((dired-marker-char
         (if (save-excursion (beginning-of-line)
                             (looking-at " "))
             dired-marker-char ?\040)))
    (dired-mark arg)
    (dired-previous-line 1)))

詳しい使い方

dired でSPCを押すと,マークを付けたり外したりできます.



[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端] [?]

25.3.2 コマンドの実行 (2009/03/30)

URL="http://www.bookshelf.jp/cgi-bin/goto.cgi?file=meadow&node=dired%20shell"
"MeadowMemo/コマンドの実行"へのコメント(2009/3/30)
検索全文Elisp

何ができるのか?

dired では X でマークしたファイルを引数に取ってコマンドを実行することができ ます.例えば, tar.gz ファイルにカーソルを合わせて,Xで「 tar zxvf 」を実行 して,ファイルを解凍するといったことが可能になります.

コマンド入力を簡単に

各拡張子ごとに実行するコマンドは大体同じだと思います.例えば, tar.gz なら解凍か 内容の表示のどちらかでしょう.

だったら,各拡張子別にコマンドのデフォルト値を決めておくと便利です.それを行って くれるのが, dired-x の機能の1つです.利用していなければ,下記を.emacs に追加する と利用できます.

 
(require 'dired-x)

これで,普通にXとすると,デフォルト値が設定されます.

デフォルト値の変更

X でのデフォルト値は変数「 dired-guess-shell-alist-default 」に設定されてい ます.で,これにはかなりたくさんの値が設定されており,これを編集するのはかなり面 倒です.

そこで,「 dired-guess-shell-alist-user 」を設定します.設定サンプルは以下の通り.

 
;; Cygwin 利用時
(setq dired-guess-shell-gnutar "tar")
;; 以下,各ファイル別の設定
(setq dired-guess-shell-alist-user
      '(("\\.tar\\.gz\\'"  "tar ztvf")
        ("\\.taz\\'" "tar ztvf")
        ("\\.tar\\.bz2\\'" "tar Itvf")
        ("\\.zip\\'" "unzip -l")
        ("\\.\\(g\\|\\) z\\'" "zcat")
        ("\\.\\(jpg\\|JPG\\|gif\\|GIF\\)\\'"
         (if (eq system-type 'windows-nt)
             "fiber" "xv"))
        ("\\.ps\\'"
         (if (eq system-type 'windows-nt)
             "fiber" "ghostview"))
        ))



[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端] [?]

25.3.3 ファイルの文字コードを一括変換 (2003/11/18)

URL="http://www.bookshelf.jp/cgi-bin/goto.cgi?file=meadow&node=dired%20convert%20code"
"MeadowMemo/ファイルの文字コードを一括変換"へのコメント(無し)
検索全文Elisp

要約

dired を利用してファイルの文字コードを一括変換

情報源

フォームからの投稿

何ができるのか?

プログラムがある文字コードしか受け付けてくれない,俺は EUC しか嫌だなどなどで,ファ イルの文字コードを揃えたい時があります.

そんな時,1個1個ファイルを開いて,C-x RET f で文字コードを指定していくのは とても大変です.

この設定を使うと Meadow/Emacs で複数のファイルの文字コードを簡単に変換できます.

設定済みMeadowでは

設定済みですので,そのままで使うことができます.

設定方法は?

以下を.emacs に追加します.

 
;;; dired を使って、一気にファイルの coding system (漢字) を変換する
(require 'dired-aux)
(add-hook 'dired-mode-hook
          (lambda ()
            (define-key (current-local-map) "T"
              'dired-do-convert-coding-system)))

(defvar dired-default-file-coding-system nil
  "*Default coding system for converting file (s).")

(defvar dired-file-coding-system 'no-conversion)

(defun dired-convert-coding-system ()
  (let ((file (dired-get-filename))
        (coding-system-for-write dired-file-coding-system)
        failure)
    (condition-case err
        (with-temp-buffer
          (insert-file file)
          (write-region (point-min) (point-max) file))
      (error (setq failure err)))
    (if (not failure)
        nil
      (dired-log "convert coding system error for %s:\n%s\n" file failure)
      (dired-make-relative file))))

(defun dired-do-convert-coding-system (coding-system &optional arg)
  "Convert file (s) in specified coding system."
  (interactive
   (list (let ((default (or dired-default-file-coding-system
                            buffer-file-coding-system)))
           (read-coding-system
            (format "Coding system for converting file (s) (default, %s): "
                    default)
            default))
         current-prefix-arg))
  (check-coding-system coding-system)
  (setq dired-file-coding-system coding-system)
  (dired-map-over-marks-check
   (function dired-convert-coding-system) arg 'convert-coding-system t))

詳しい使い方は?

dired で m でマークを付け,T とします.これで,マークを付けたファイル の文字コードを変換できます.

デフォルトの文字コードは

 
(setq dired-default-file-coding-system 'euc-jp-unix)

のように指定できます.

コメント

これはとても愛用しています.フォームからの投稿ありがとうございました.



[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端] [?]

25.3.4 dired で再帰コピー,再帰削除 (2005/02/17)

URL="http://www.bookshelf.jp/cgi-bin/goto.cgi?file=meadow&node=recursive%20dired"
"MeadowMemo/diredで再帰コピー,再帰削除"へのコメント(無し)
検索全文Elisp

要約

dired でサブディレクトリも削除やコピーできる設定

何が問題なのか?

dired でCによりディレクトリをコピーしようとするとエラーが出てできません. これは dired が再帰コピー,再帰削除ができないからです.

再帰コピー (削除) とはサブディレクトリ以下もコピー (削除) を行うことです.

何ができるのか?

dired で C(コピー) や D(削除) により,サブディレクトリもコピーや削除 できるようになります.

Meadow 2.00 での設定方法は?

Meadow 2.00 以降なら

 
(setq dired-recursive-copies 'always)
(setq dired-recursive-deletes 'always)

を.emnacs に追加します.

Meadow 1.15 での設定方法は?

私的 dired 拡張 dired-dia にある dired-dia.el , recursive-file-op.el をロードパスの通ったところへ置き

 
(require 'dired-aux)
(load "dired-dia")

を.emacs に追加します.

ただし, dired-dia.el 内でキーバインドが定義されているので,必要に応じて変更して おきます.また,一部このページの内容と重なる場所がありますので,必要に応じて編集 してください.

設定済みMeadowでは

設定してあります.

詳しい使い方は?

dired でディレクトリの位置にカーソルを移動し,C(コピー) やD(削除) と します.



[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端] [?]

25.3.5 フォルダを開く時, 新しいバッファを作成しない ― dired (2003/07/11)

URL="http://www.bookshelf.jp/cgi-bin/goto.cgi?file=meadow&node=dired%20single"
"MeadowMemo/フォルダを開く時,新しいバッファを作成しない―dired"へのコメント(2007/12/28)
検索全文Elisp

何が問題なのか?

dired で深いディレクトリへ行くと, 後にはディレクトリバッファがたくさん残ってしま います.

何ができるのか?

dired でディレクトリを移動しても,新しいバッファを作成しないようにできます.

設定方法

以下を.emacs に追加します.

これで,普通にディレクトリを移動すると,バッファを作成しません.バッファを作成し たい時にはoC-u ^を利用するといいでしょう.

dired-my-advertised-find-file は 25.3.8 dired で Windows のリンクを扱う ― w32-symlinks (2005/02/17) と一緒に使うことはできま せん.

 
(defun dired-my-advertised-find-file ()
  (interactive)
  (let ((kill-target (current-buffer))
        (check-file (dired-get-filename)))
    (funcall 'dired-advertised-find-file)
    (if (file-directory-p check-file)
        (kill-buffer kill-target))))

(defun dired-my-up-directory (&optional other-window)
  "Run dired on parent directory of current directory.
Find the parent directory either in this buffer or another buffer.
Creates a buffer if necessary."
  (interactive "P")
  (let* ((dir (dired-current-directory))
         (up (file-name-directory (directory-file-name dir))))
    (or (dired-goto-file (directory-file-name dir))
        ;; Only try dired-goto-subdir if buffer has more than one dir.
        (and (cdr dired-subdir-alist)
             (dired-goto-subdir up))
        (progn
          (if other-window
              (dired-other-window up)
            (progn
              (kill-buffer (current-buffer))
              (dired up))
          (dired-goto-file dir))))))

(define-key dired-mode-map "\C-m" 'dired-my-advertised-find-file)
(define-key dired-mode-map "^" 'dired-my-up-directory)

別の設定方法

別の方法として,以下のようにアドバイスを使う方法もあります.これだと,25.3.8 dired で Windows のリンクを扱う ― w32-symlinks (2005/02/17) とは干渉しません.

 
(defvar my-dired-before-buffer nil)
(defadvice dired-advertised-find-file
  (before kill-dired-buffer activate)
  (setq my-dired-before-buffer (current-buffer)))

(defadvice dired-advertised-find-file
  (after kill-dired-buffer-after activate)
  (if (eq major-mode 'dired-mode)
      (kill-buffer my-dired-before-buffer)))

(defadvice dired-up-directory
  (before kill-up-dired-buffer activate)
  (setq my-dired-before-buffer (current-buffer)))

(defadvice dired-up-directory
  (after kill-up-dired-buffer-after activate)
  (if (eq major-mode 'dired-mode)
      (kill-buffer my-dired-before-buffer)))



[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端] [?]

25.3.6 マイコンピュータ/ネットワークを再現 (2005/04/06)

URL="http://www.bookshelf.jp/cgi-bin/goto.cgi?file=meadow&node=dired%20drive"
"MeadowMemo/マイコンピュータ/ネットワークを再現"へのコメント(無し)
検索全文Elisp
要約

Windowsのマイコンピュータのようなドライブリストやマイネットワークのようなコンピュー タの一覧を表示できます.

情報源

help-gnu-emacsの「Dired on windows」(Message-ID: <uu1fhwlei.fsf@cesart.net>)とい う記事.

何ができるのか?

ドライブの一覧を表示できます.

ただし,OS によっては動作しない可能性があります.

Windows に付属している net というコマンドが利用できるようになっている必要があり ます.また,シェルの設定も必要です.

インストール方法

mmemo-drive.el をロードパスの通っ たところへ置きます.

設定方法

以下を .emacs に追加します

 
(autoload 'netdir "mmemo-drive" "My computer" t)
(autoload 'netcomp "mmemo-drive" "My network" t)

詳しい使い方

M-x netdir とすると,ドライブの一覧が以下のように表示されます.








ここで,好きなドライブにカーソルを合わせRET とすると,そのドライブを dired で開くことができます.

同じように,M-x netcomp とすると,ネットワークコンピュータの一覧が表示され ます.

コメント

思い付きだけで作ってたものを,help-gnu-emacs の記事をもとに改良してみました.

 
(defadvice dired-up-directory
  (around list-drive activate)
  (if (string-match "^[a-zA-Z]:[/]*$" default-directory)
      (netdir)
    ad-do-it))

としておくと,dired で C: や D: などで ^ を入力すると,ドライブの一覧が表 示されるようになります.



[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端] [?]

25.3.7 dired から関連付けられたソフトで開く (2003/11/18)

URL="http://www.bookshelf.jp/cgi-bin/goto.cgi?file=meadow&node=dired%20fiber"
"MeadowMemo/diredから関連付けられたソフトで開く"へのコメント(無し)
検索全文Elisp

要約

dired で Windows の関連付けを元にファイルを開く.

何が問題なのか?

Meadow は便利でこれで大抵のことができますが,外部アプリを起動したい時もあります. しかし,エクスプローラを起動するのは面倒です.

何ができるのか?

dired で選択したファイルを Windows で関連付けられたソフトで起動できます.

設定の前の準備

Meadow には fiber.exe をというソフトが付属しています. これは, 関連付けられたソフ トにより起動を行うソフトです.

例えば, Meadow2/2.00b2/bin にありますので,このディレクトリをパスに通しておきます.

fiber を利用した設定方法

設定は以下を追加します.

これで, dired で z とするだけで, そのファイルを関連付けられたソフトで開く ことができます.

ディレクトリかファイルかで処理を分けているので, ディレクトリの時には Dyna など 適当なファイラで開いても便利です.

 
(add-hook 'dired-mode-hook
          (lambda ()
            (define-key dired-mode-map
              "z" 'dired-fiber-find)))

(defun dired-fiber-find ()
  (interactive)
  (let ((file (dired-get-filename)))
    (if (file-directory-p file)
        (start-process "explorer" "diredfiber" "explorer.exe"
                       (unix-to-dos-filename file))
      (start-process "fiber" "diredfiber" "fiber.exe" file))))

fiber を利用した設定 ファイラ利用向け

ファイラを頻繁に使うのであれば,下のようにしておくと便利です.これだと,ディレク トリに対しては z でファイラが起動,C-u z でエクスプローラの起動になり ます.ついでに,ファイルで C-u z とすると,カレントディレクトリをエクスプー ラで開くことができます.

ちなみに,C-u でなくても,1 z などでも同じです.

 
  (let ((file (dired-get-filename)))
    (if (file-directory-p file)
        (if arg
            (start-process "explorer" "filer" "E:/soft/file/Dyna/DYNA.EXE"
                           (unix-to-dos-filename file))
          (start-process "explorer" "diredfiber" "explorer.exe"
                         (unix-to-dos-filename file))
          )
      (if arg
          (start-process "explorer" "diredfiber" "explorer.exe"
                         (unix-to-dos-filename (directory-file-name
                                                dired-directory)))
        (start-process "fiber" "diredfiber" "fiber.exe" file)
        )
      )))

別の設定方法

関連付けでの起動は,以下を.emacs に追加しても可能です.

 
;;--------------------------------------------------------
;;; Dired で Windows に関連付けられたファイルを起動する。
;;;http://uenox.infoseek.livedoor.com/meadow/
;;--------------------------------------------------------
(defun uenox-dired-winstart ()
  "Type '\\[uenox-dired-winstart]': win-start the current line's file."
  (interactive)
  (if (eq major-mode 'dired-mode)
      (let ((fname (dired-get-filename)))
        (w32-shell-execute "open" fname)
        (message "win-started %s" fname))))
;;; dired のキー割り当て追加
(add-hook 'dired-mode-hook
          (lambda ()
            (define-key dired-mode-map "z" 'uenox-dired-winstart))) ;;; 関連付け

エクスプローラを起動する設定

以下を.emacs に追加すると, dired でE とするとエクスプローラを起動できます.

 
;;----------------------------------------
;; Win32: dierd からエクスプローラを開く
;;----------------------------------------
;; dired で "E" で開く。
(add-hook 'dired-mode-hook
          (lambda ()
            (local-set-key "E" 'dired-exec-explorer)))
;;
(defun dired-exec-explorer ()
  "In dired, execute Explorer"
  (interactive)
  (explorer (dired-current-directory)))
;;
;; M-x explorer で現在のカレントディレクトリをもとにエクスプローラ
;; を立ち上げる設定。
;;
(define-process-argument-editing "/explorer\\.exe$"
  (lambda (x)
    (general-process-argument-editing-function x nil nil nil)))
(defun explorer (&optional dir)
  (interactive)
  (setq dir (expand-file-name (or dir default-directory)))
  (if (or (not (file-exists-p dir))
          (and (file-exists-p dir)
               (not (file-directory-p dir))))
      (message "%s can't open." dir)
    (setq dir (unix-to-dos-filename dir))
    (let ((w32-start-process-show-window t))
      (apply (function start-process)
             "explorer" nil "explorer.exe" (list (concat "/e,/root," dir))))))



[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端] [?]

25.3.8 dired で Windows のリンクを扱う ― w32-symlinks (2005/02/17)

URL="http://www.bookshelf.jp/cgi-bin/goto.cgi?file=meadow&node=link%20dired"
"MeadowMemo/diredでWindowsのリンクを扱う―w32-symlinks"へのコメント(2007/12/28)
検索全文Elisp

要約

Windows のリンクを利用して,ディレクトリを移動できる

何が問題なのか?

Windows ではリンクという仕組みがあります.これはとても便利なもので,いろいろなディ レクトリへのリンクを置いてある人も多いと思います.しかし,Meadow ではこのリンクを 扱うことができません.

何ができるのか?

Windows のリンクを利用して,ディレクトリを移動できるようになります.

インストール方法

Francis Wright's Emacs Packages か ら, w32-symlinks をダウンロードしロードパスの通ったところへ置きます.

設定方法

.emacs に以下を追加します.

 
(require 'w32-symlinks)

詳しい使い方

後は普通に dired をすると,リンクが

d:/home:
 total 1722  free 28500804
 lrw-rw-rw-  1 root  root  338 Dec 17 23:01 tmp へのショートカット.lnk -> D:/home/tmp

のように変わります.さらに,このファイルを RET で開くとリンク先を開くことが できます.

うまく動かない

ただし,リンク先が日本語の場合には文字化けしてしまいます.そこで,

Index: w32-symlinks.el
===================================================================
RCS file: /cygdrive/d/root/CVSROOT/mylisp/w32-symlinks.el,v
retrieving revision 1.1
diff -u -r1.1 w32-symlinks.el
--- w32-symlinks.el     2002/12/18 14:38:52     1.1
+++ w32-symlinks.el     2002/12/18 14:39:05
@@ -331,7 +331,7 @@
                       (buffer-substring (point) (+ (point) len)))))))
        (when target
         (setq target (decode-coding-string
-                      target file-name-coding-system)) ; Eli Zaretskii
+                      target 'shift_jis));; file-name-coding-system))  ; Eli Zaretskii
         (cond ((eq w32-symlinks-shortcut-target 'expand) ; Canonicalize
                ;; Full expansion RELATIVE TO THE SHORTCUT DIRECTORY
                ;; is NECESSARY in magic filename handlers!

のように,変更するとリンク先が日本語でも問題なく開くことができます.

コメントに別の解もありますので,うまくいかない場合にはそちらを参照ください.

リンクの作成

さらに,リンクの作成もできます.そのためには,上記に続けて,以下の設定を追加しま す.こうしておくと,M-x make-symbolic-link でリンクを作成することができます. リンクの作成は w32-symlinks-ln-s.js というスクリプト (リンクを作る時に自動的に作 成されます) で行われます.

このスクリプトを使うためには, Windows Script Host が利用できる必要があります.最 近のパソコンなら標準で入っていると思いますが,動かないようなら Microsoft のページ からダウンロードして利用できるようにする必要があります.

さらに,以下の設定では dired で S としても現在選択しているファイルに対する リンクを作成できます.

 
(setq w32-symlinks-make-using 'wsh)
(setq w32-symlinks-ln-script
      (expand-file-name "~/w32-symlinks-ln-s.js"))

(defadvice w32-symlinks-make-using-wsh
  (around make-shortcut activate)
  (w32-symlinks-check-ln-script)
  (if (not (string= (substring newname -4) ".lnk"))
      (setq newname (concat newname ".lnk")))
  (start-process "makelink" "makelink" w32-symlinks-ln-script
                 (unix-to-dos-filename (expand-file-name file))
                 (unix-to-dos-filename (expand-file-name newname)))
  )

(defun dired-make-symbolic-link (newname)
  (interactive "\FName for link to : \n")
  (if (string= "" (file-name-nondirectory newname))
      (error "Input filename for link"))
  (if (not (string= (substring newname -4) ".lnk"))
      (setq newname (concat newname ".lnk")))
  (let ((file (dired-get-filename)))
    (make-symbolic-link file newname)))

(add-hook 'dired-mode-hook
          '(lambda ()
             (define-key dired-mode-map "S" (function dired-make-symbolic-link))
             ))

25.3.8.1 ファイルを開く時にショートカットを辿る (2005/02/17)  



[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端] [?]

25.3.8.1 ファイルを開く時にショートカットを辿る (2005/02/17)

URL="http://www.bookshelf.jp/cgi-bin/goto.cgi?file=meadow&node=findfile%20symlink"
"MeadowMemo/ファイルを開く時にショートカットを辿る"へのコメント(無し)
検索全文Elisp
要約

深いディレクトリや別ドライブのディレクトリのファイルを開く際, Windows のショート カットを利用して簡単に開くことができます.

情報源

Wiki でのリクエストをもとに書いたもの.

何が問題なのか?

C-x C-fで別ドライブの深いディレクトリに移動するのは面倒なものです.

何ができるのか?

例えば,Gドライブへのショートカットを作っておけば,C-x C-f g-drive.lnk TAB で G ドライブへ移動できます.

設定方法

以下を.emacs に追加します.

 
(defadvice minibuffer-complete
  (before expand-symlinks activate)
  (let ((file (expand-file-name
               (buffer-substring-no-properties
                (line-beginning-position)
                (line-end-position)))))
    (when (string-match ".lnk$" file)
      (delete-region
       (line-beginning-position)
       (line-end-position))
      (if (file-directory-p
           (ls-lisp-parse-symlink file))
          (insert
           (concat
            (ls-lisp-parse-symlink file) "/"))
        (insert (ls-lisp-parse-symlink file))))))

詳しい使い方

C-x C-f で Windows のショートカットを補完した後で,さらに TAB を入力 します.すると,ショートカットを展開してくれます.

例えば,「 d:/home/g-drive.lnk TAB 」で「 g:/」となります.



[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端] [?]

25.3.9 tar/lzh の内容表示/展開 (2005/02/17)

URL="http://www.bookshelf.jp/cgi-bin/goto.cgi?file=meadow&node=dired-do-tar"
"MeadowMemo/tar/lzhの内容表示/展開"へのコメント(無し)
検索全文Elisp

要約

dired から tar.gz と lzh ファイルの内容表示,展開

情報源

フォームからの投稿

何ができるのか?

dired で t とするだけで, tar.gz の内容を表示できます.

設定済みMeadowでは

設定していません.

設定方法は?

以下を.emacs に追加します.

 
(defun dired-do-tar-zvtf (arg)
  "Only one file line can be processed. If ARG, execute vzxf"
  (interactive "P")
  (let ((files (dired-get-marked-files t current-prefix-arg)))
    (if arg
        (dired-do-shell-command "tar zvxf * &" nil files)
      (dired-do-shell-command "tar zvtf * &" nil files))))

(defun dired-do-lha-v (arg)
  "Only one file line can be processed. If ARG, execute lha x"
  (interactive "P")
  (let ((files (dired-get-marked-files t current-prefix-arg)))
    (if arg
        (dired-do-shell-command "lha x * &" nil files)
      (dired-do-shell-command "lha v * &" nil files))))

(defun dired-do-mandoc (arg)
  "man source is formatted with col -xbf. If ARG, executes without col -xbf."
  (interactive "P")
  (let ((files (dired-get-marked-files t current-prefix-arg)))
    (if arg
        (dired-do-shell-command "groff -Tnippon -mandoc * &" nil files)
      (dired-do-shell-command "groff -Tnippon -mandoc * | col -xbf &" nil files))))

(define-key dired-mode-map "t" 'dired-do-tar-zvtf)
(define-key dired-mode-map "\eT" 'dired-do-lha-v)

詳しい使い方は?

見ての通り, tar 形式と lzh 形式のファイルを展開できます. tar.gz なら,t で内容表示,C-u t で展開になります. lzh 形式は,M-T で内容表示, C-u M-T で展開になります.

ただし,マークするファイルは 1 個までです.

複数を対象にする場合は,以下のようにコマンドを書き変えたりして対応するといいでしょ う.

 
(defun dired-do-tar-zvtf (arg)
  "Only one file line can be processed. If ARG, execute vzxf"
  (interactive "P")
  (let ((files (dired-get-marked-files t current-prefix-arg)))
    (if arg
        (dired-do-shell-command
         "for file in *; do echo $file;tar zvxf $file; done"
         nil files)
      (dired-do-shell-command
       "for file in *; do echo $file; tar zvtf $file; done"
       nil files))))

コメント

Meadow/Emacs の標準機能にも似たようなことをする機能があります.それについては, 23.6.2 圧縮されたファイルを開く (2003/10/12) を参照ください.



[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端] [?]

25.3.10 dired で Explorer のようにファイル名の 1 文字目で検索する (2005/02/17)

URL="http://www.bookshelf.jp/cgi-bin/goto.cgi?file=meadow&node=dired%20explorer"
"MeadowMemo/diredでExplorerのようにファイル名の1文字目で検索する"へのコメント(無し)
検索全文Elisp

何ができるのか?

Explorer で a とすると a で始まるファイルを探してくれますが,あの挙動を dired で実現するものです.

情報源

http://homepage1.nifty.com/blankspace/emacs/dired.html

設定方法

以下を.emacs に追加します.

ただし, dired のキーバインドは消えますので,適当に割り当て直す必要があります.

 
(defvar my-ex-isearch-next      "\C-r")
(defvar my-ex-isearch-prev      "\C-e")
(defvar my-ex-isearch-backspace "\C-h")
(defvar my-ex-isearch-return    "\C-g")
(defun my-ex-isearch (REGEX1 REGEX2 FUNC1 FUNC2 RPT)
  (interactive)
  (let ((input last-command-char)
        (inhibit-quit t)
        (oldpoint (point)) regx str)
    (save-match-data
      (catch 'END
        (while t
          (funcall FUNC1)
          (cond
           ;; character
           ((and (integerp input) (>= input ?!) (<= input ?~)
                 (not (and (>= input ?A) (<= input ?Z))))
            (setq str (concat str (char-to-string input)))
            (setq regx (concat REGEX1 str REGEX2))
            (re-search-forward regx nil t nil))
           ;; backspace
           ((and (integerp input)
                 (or (eq 'backspace input)
                     (= input (string-to-char my-ex-isearch-backspace))))
            (setq str (if (eq 0 (length str)) str (substring str 0 -1)))
            (setq regx (concat REGEX1 str REGEX2))
            (goto-char oldpoint)
            (re-search-forward regx nil t nil))
           ;; next
           ((and (integerp input)
                 (= input (string-to-char my-ex-isearch-next)))
            (re-search-forward regx nil t RPT))
           ;; previous
           ((and (integerp input)
                 (= input (string-to-char my-ex-isearch-prev)))
            (re-search-backward regx nil t nil))
           ;; return
           ((and (integerp input)
                 (= input (string-to-char my-ex-isearch-return)))
            (goto-char oldpoint)
            (message "return")
            (throw 'END nil))
           ;; other command
           (t
            (setq unread-command-events
                  (append (list input) unread-command-events))
            (throw 'END nil)))
          (funcall FUNC2)
          (highline-highlight-current-line)
          (message str)
          (setq input (read-event)))))))
(defun my-dired-isearch()
  (interactive)
  (my-ex-isearch "[0-9] " "[^ \n]+$" (lambda() (backward-char 3))
                 'dired-move-to-filename 2))
(defun my-dired-isearch-define-key (str)
  (let ((i 0))
    (while (< i (length str))
      (define-key dired-mode-map (substring str i (1+ i)) 'my-dired-isearch)
      (setq i (1+ i)))))
(add-hook 'dired-mode-hook
          '(lambda ()
             (my-dired-isearch-define-key
              "abcdefghijklmnopqrstuvwxyz0123456789_.-+~#")
             ))

モード切り替え型の設定

私は dired のキーバインドが消えるのが嫌だったのと, Explorer のように aaaaa を連打したら a で始まるファイルへ次々と移動して欲しかったので,ちょっ といじって使ってます.

使うためには, my-dired-mode.elをダウンロー ドし,ロードパスの通ったところへ置きます.そして,.emacs に以下を追加します.

 
(load "my-dired-mode")

これで,:とすると Explorer 風と通常の dired を切り換えることができます.

Explorer 風の時には英数字キーで検索して, 1 文字目 (ファイル名の 1 文字目が _.~#+ なら 2 文字目) が一致するところへカーソルを移動します.RETでファイル /ディレクトリを開き,^で一つ上のディレクトリへ移動です. Explorer 風のモー ド時に移動すると移動先のディレクトリでも Explorer 風のモードになります.: で,通常の dired モードになります.

内部で 25.3.5 フォルダを開く時, 新しいバッファを作成しない ― dired (2003/07/11) の設定項目を使ってますので,使用する際にはそ ちらもコピーするか,編集するかしてください.

注意:スペースの入ったディレクトリは無視されます.

設定済みMeadowでは

設定していません.



[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端] [?]

25.3.11 dired から印刷 (2005/02/17)

URL="http://www.bookshelf.jp/cgi-bin/goto.cgi?file=meadow&node=dired%20print"
"MeadowMemo/diredから印刷"へのコメント(無し)
検索全文Elisp
要約

1 個 1 個ファイルを開いて印刷するのが面倒な場合に, dired でマークを行い,印刷す ることができます.

情報源

help-gnu-emacs より

設定方法

以下を.emacs に追加します.

 
(defun dired-ps-print-files ()
  (interactive)
  (let ((files-to-print (dired-get-marked-files)))
    (while (setq file (car files-to-print))
      (setq files-to-print (cdr files-to-print))
      (find-file file)
      (ps-print-buffer-with-faces)
      (kill-buffer nil))))

詳しい使い方

dired でmでマークをつけ,M-x dired-ps-print-files とします.すると, マークをつけたファイルを印刷できます.

うまく動かない

 
      (ps-print-buffer-with-faces)

とあるように,M-x ps-print-buffer-with-faces を利用しています. Ghostscript が入っていない場合にはここを print-buffer にでも変えておきましょう.



[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端] [?]

25.4 今日変更したファイルに色をつける (2005/02/17)

URL="http://www.bookshelf.jp/cgi-bin/goto.cgi?file=meadow&node=edited%20today"
"MeadowMemo/今日変更したファイルに色をつける"へのコメント(無し)
検索全文Elisp

ネタ元:http://homepage1.nifty.com/blankspace/emacs/dired.html

何が問題なのか?

ファイルがたくさんあると,今日変更したのがどれだか分からなくなってしまいます.

何ができるのか?

今日編集したファイルに色をつけることができます.これにより,今日編集したファイル が一目で分かります.

設定方法

以下を.emacs に追加します.

dired の設定によっては一部変更が必要です.

 
(defface face-file-edited-today
  '((((class color)
      (background dark))
     (:foreground "GreenYellow"))
    (((class color)
      (background light))
     (:foreground "magenta"))
    (t
     ())) nil)
(defvar face-file-edited-today
  'face-file-edited-today)
(defun my-dired-today-search (arg)
  "Fontlock search function for dired."
  (search-forward-regexp
   (concat "\\(" (format-time-string
                  "%b %e" (current-time))
           "\\|"(format-time-string
                 "%m-%d" (current-time))
           "\\)"
           " [0-9]....") arg t))
(font-lock-add-keywords
 major-mode
 (list
  '(my-dired-today-search . face-file-edited-today)
  ))

詳しい使い方

dired を起動するだけです.そうすると,

  d:/akihisa/www/soft:
  total 10484  free 4180700
  drwxrwxrwx   5 akihisa  root        0 Jul 11 20:16 .
  drwxrwxrwx   2 akihisa  root        0 Jul  2 22:16 css
  drwxrwxrwx   3 akihisa  root        0 Jul 11 11:35 natsu
  -rw-rw-rw-   1 akihisa  root      188 Jul  1 20:03 .cvsignore
  -rw-rw-rw-   1 akihisa  root    69597 Dec 12  2002 199image.jpg
  -rw-rw-rw-   1 akihisa  root     6042 Jun 27 22:22 2ch.texi
  -rw-rw-rw-   1 akihisa  root    23604 Jul 11 19:52 abbrev.texi
  -rw-rw-rw-   1 akihisa  root    21568 Jul 11 19:52 admini.texi

のように,今日変更したファイルの色が変わります.

うまく動かない

dired の表示形式によっては,うまく動作しないことがあります.その時には,"%b %e" の部分を修正して使ってください.

25.4.1 今週・先週変更したファイルに色をつける (2005/02/17)  



[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端] [?]

25.4.1 今週・先週変更したファイルに色をつける (2005/02/17)

URL="http://www.bookshelf.jp/cgi-bin/goto.cgi?file=meadow&node=wcolorful%20dired"
"MeadowMemo/今週・先週変更したファイルに色をつける"へのコメント(無し)
検索全文Elisp

要約

今週や先週に変更したファイルを強調表示することができます.

情報源

http://homepage1.nifty.com/blankspace/emacs/dired.html を元に改変したもの です.

何が問題なのか?

今日変更したファイルに色をつける設定は便利なのですが,これでは次の日になるともう 色が消えてしまいます.

何ができるのか?

今週と先週に変更したファイルに色をつけることができます.

設定方法

以下を.emacs に追加します.

以下の設定には今日のファイルに色を付ける設定も含まれています.

 
(defface face-file-edited-today
  '((((class color)
      (background dark))
     (:foreground "GreenYellow"))
    (((class color)
      (background light))
     (:foreground "magenta"))
    (t
     ())) nil)
(defface face-file-edited-this-week
  '((((class color)
      (background dark))
     (:foreground "LimeGreen"))
    (((class color)
      (background light))
     (:foreground "violet red"))
    (t
     ())) nil)
(defface face-file-edited-last-week
  '((((class color)
      (background dark))
     (:foreground "saddle brown"))
    (((class color)
      (background light))
     (:foreground "maroon"))
    (t
     ())) nil)
(defvar face-file-edited-today
  'face-file-edited-today)
(defvar face-file-edited-this-week
  'face-file-edited-this-week)
(defvar face-file-edited-last-week
  'face-file-edited-last-week)
(defun my-dired-today-search (arg)
  "Fontlock search function for dired."
  (search-forward-regexp
   (concat "\\(" (format-time-string "%b %e" (current-time))
           "\\|"(format-time-string "%m-%d" (current-time))
           "\\)"
           " [0-9]....") arg t))
(defun my-dired-date (time)
  "Fontlock search function for dired."
  (let ((now (current-time))
        (days (* -1 time))
        dateh datel daysec daysh daysl dir
        (offset 0))
    (setq daysec (* -1.0 days 60 60 24))
    (setq daysh (floor (/ daysec 65536.0)))
    (setq daysl (round (- daysec (* daysh 65536.0))))
    (setq dateh (- (nth 0 now) daysh))
    (setq datel (- (nth 1 now) (* offset 3600) daysl))
    (if (< datel 0)
        (progn
          (setq datel (+ datel 65536))
          (setq dateh (- dateh 1))))
    ;;(floor (/ offset 24))))))
    (if (< dateh 0)
        (setq dateh 0))
    ;;(insert (concat (int-to-string dateh) ":"))
    (list dateh datel)))
(defun my-dired-this-week-search (arg)
  "Fontlock search function for dired."
  (let ((youbi
         (string-to-int
          (format-time-string "%w" (current-time))))
        this-week-start this-week-end day ;;regexp
        (flg nil))
    (setq youbi (+ youbi 1))
    (setq regexp
          (concat "\\("))
    (while (not (= youbi 0))
      (setq regexp
            (concat
             regexp
             (if flg
                 "\\|")
             (format-time-string
              "%b %e"
              (my-dired-date youbi))
             "\\|"
             (format-time-string
              "%m-%d"
              (my-dired-date youbi))
             ))
      ;;(insert (concat (int-to-string youbi) "\n"))
      (setq flg t)
      (setq youbi (- youbi 1))))
  (setq regexp
        (concat regexp "\\)"))
  (search-forward-regexp
   (concat regexp " [0-9]....") arg t))
(defun my-dired-last-week-search (arg)
  "Fontlock search function for dired."
  (let ((youbi
         (string-to-int
          (format-time-string "%w" (current-time))))
        this-week-start this-week-end day ;;regexp
        lyoubi
        (flg nil))
    (setq youbi (+ youbi 0))
    (setq lyoubi (+ youbi 7))
    (setq regexp
          (concat "\\("))
    (while (not (= lyoubi youbi))
      (setq regexp
            (concat
             regexp
             (if flg
                 "\\|")
             (format-time-string
              "%b %e"
              (my-dired-date lyoubi))
             "\\|"
             (format-time-string
              "%m-%d"
              (my-dired-date lyoubi))
             ))
      ;;(insert (concat (int-to-string youbi) "\n"))
      (setq flg t)
      (setq lyoubi (- lyoubi 1))))
  (setq regexp
        (concat regexp "\\)"))
  (search-forward-regexp
   (concat regexp " [0-9]....") arg t))

(font-lock-add-keywords
 major-mode
 (list
  '(my-dired-today-search . face-file-edited-today)
  '(my-dired-this-week-search . face-file-edited-this-week)
  '(my-dired-last-week-search . face-file-edited-last-week)
  ))

詳しい使い方

普通に dired を実行すると,

  d:/home/tmp:
  total 22247  free 3257476
  -rw-rw-rw-   1 root  root  4411078 Aug 28 21:43 deskcal.bmp
  -rw-rw-rw-   1 root  root  1045554 Aug 28 21:43 wonderwall2.bmp
  -rw-rw-rw-   1 root  root       32 Aug 27 21:02 afishell_temp.txt
  -rw-rw-rw-   1 root  root      165 Aug 23 20:19 ema03420
  -rw-rw-rw-   1 root  root        0 Aug 22 23:31 Acr4.tmp
  -rw-rw-rw-   1 root  root        0 Aug 22 23:31 Acr3.tmp
  -rw-rw-rw-   1 root  root    16384 Aug 17 01:24 ~DFDB.tmp
  -rw-rw-rw-   1 root  root    16384 Aug 17 01:21 ~DFAD26.tmp

のように,変更した日によって色が変化します.



[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端] [?]

25.5 dired の並び換え関連 (2007/11/24)

URL="http://www.bookshelf.jp/cgi-bin/goto.cgi?file=meadow&node=sort%20dired"
"MeadowMemo/diredの並び換え関連"へのコメント(無し)
検索全文Elisp

dired ではs でファイルを名前や日付けで並び換えることができます.ここでは, この並び換えに関連した設定を紹介します.

25.5.1 dired の並び換え方法を保存 (2005/02/17)  
25.5.2 dired でサイズ,拡張子で並び換え (2007/11/24)  
25.5.3 サイズ,拡張子で並び換えをメニューからしたい (2005/02/17)  
25.5.4 ディレクトリを先に表示する (2005/02/17)  



[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端] [?]

25.5.1 dired の並び換え方法を保存 (2005/02/17)

URL="http://www.bookshelf.jp/cgi-bin/goto.cgi?file=meadow&node=save%20sortmethod"
"MeadowMemo/diredの並び換え方法を保存"へのコメント(無し)
検索全文Elisp
要約

別のディレクトリに移動しても直前のディレクトリと同じ並び換え方法で表示します.

何が問題なのか?

dired では,s でソート方法を変えることができます.しかし,別のディレクトリ へ移動すると,ソート方法が戻ってしまうので,またソートしなくてはいけません.これ は,非常に面倒です.

何ができるのか?

ディレクトリを移動してもソート方法が変化しません.

設定方法

以下を.emacs に追加します.

 
(defadvice dired-advertised-find-file
  (around dired-sort activate)
  (let ((sw dired-actual-switches))
    ad-do-it
    (if (string= major-mode 'dired-mode)
        (progn
          (setq dired-actual-switches sw)
          (dired-sort-other dired-actual-switches)))
    ))

(defadvice dired-my-up-directory
  (around dired-sort activate)
  (let ((sw dired-actual-switches))
    ad-do-it
    (if (string= major-mode 'dired-mode)
        (progn
          (setq dired-actual-switches sw)
          (dired-sort-other dired-actual-switches)))
    ))

詳しい使い方

普通に使うだけです.



[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端] [?]

25.5.2 dired でサイズ,拡張子で並び換え (2007/11/24)

URL="http://www.bookshelf.jp/cgi-bin/goto.cgi?file=meadow&node=sorter"
"MeadowMemo/diredでサイズ,拡張子で並び換え"へのコメント(無し)
検索全文Elisp
要約

diredでサイズや拡張子による並び換えが可能になります.

何が問題なのか?

デフォルトでは日付けとファイル名でしか並び換えることができません.

何ができるのか?

サイズや拡張子でも並び換えることができます.

設定済みMeadowでは

改良版のsorterをインストール,設定済みですので,何もしなくても使えます.

設定方法

sorter.elをダウンロードし,ロー ドパスの通ったところに保存します.そして,

 
(load "sorter")

を .emacs に追加します.

詳しい使い方

dired で s を何回か入力すると,拡張子やサイズによる並び換えもできるようにな ります.

うまく動かない

Meadow 1.15 では拡張子による並び換えはできません.

25.5.2.1 dired でサイズ,拡張子で並び換えの改良版 (2007/11/24)  



[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端] [?]

25.5.2.1 dired でサイズ,拡張子で並び換えの改良版 (2007/11/24)

URL="http://www.bookshelf.jp/cgi-bin/goto.cgi?file=meadow&node=sorter2"
"MeadowMemo/diredでサイズ,拡張子で並び換えの改良版"へのコメント(無し)
検索全文Elisp
要約

並び換えをしてもカーソル位置は元々あったファイルの場所に留まってくれるsorterです.

情報源

"C-u s" で元に戻る sorter.el

何が問題なのか?

sorter は確かに便利なのですが,最初の並び換え状態に戻るのが面倒です.最初に戻る には,今が何番目の並び換え条件で,全体でいくつの並び換え条件があるかを知っていな いといけませんからね.

さらに,カーソル位置も並び換えするたびに,バッファの先頭へ行ってしまいます.

何ができるのか?

sorterでの問題点を解決してくれます.

設定済みMeadowでは

最新のでは,こちらを入れています.

インストール方法

ロードパスの通ったところへ置きます.

設定方法

以下を .emacsに追加します.

 
(add-hook 'dired-load-hook
          (lambda ()
            (require 'sorter)))

詳しい使い方

基本的には,先に紹介した 25.5.2 dired でサイズ,拡張子で並び換え (2007/11/24) と同じです.

違うのは,いつでもC-u sと入力すると,名前による並び換えに戻ることができま す.

さらに,カーソル位置もバッファの先頭へは戻らず,今いるファイルの位置のままになり ます.



[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端] [?]

25.5.3 サイズ,拡張子で並び換えをメニューからしたい (2005/02/17)

URL="http://www.bookshelf.jp/cgi-bin/goto.cgi?file=meadow&node=dired-sort-menu"
"MeadowMemo/サイズ,拡張子で並び換えをメニューからしたい"へのコメント(無し)
検索全文Elisp
要約

並び換えをメニューから行うことができる.

何ができるのか?

サイズや拡張子,時間などでの並び換えをメニューからする方法もあります. Meadow を 使う人にはあまり需要がないかもしれませんけど.

インストール方法

Francis Wright's Emacs Packages から, dired-sort-menu.el をダウンロードし,ロードパスの通ったところへ置きます.

設定方法

.emacs に以下を追加します.

 
(add-hook 'dired-mode-hook
          (lambda () (require 'dired-sort-menu)))

詳しい使い方

dired を使うと, Immediate のメニューに Sort by という項目が追加されます.

後は適当に選択すると,並び換えをすることができます.



[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端] [?]

25.5.4 ディレクトリを先に表示する (2005/02/17)

URL="http://www.bookshelf.jp/cgi-bin/goto.cgi?file=meadow&node=directory%20first"
"MeadowMemo/ディレクトリを先に表示する"へのコメント(無し)
検索全文Elisp
要約

ディレクトリだけをまとめて dired の先頭に表示することができます.

情報源

私的 dired 拡張 dired-dia

何が問題なのか?

dired のデフォルトの表示では,名前順になるため,どれがディレクトリでどれがファイ ルかとても分かりにくいです.

何ができるのか?

エクスプローラのようにディレクトリを先にまとめて表示することができます.

Meadow 1.99 以降での設定

以下を.emacs に追加します.

 
(setq ls-lisp-dirs-first t)

Meadow 1.15 以降での設定

以下を.emacs に追加します.

これは,私的 dired 拡張 dired-dia で手に入れたものを参考に書き直したものです. オリジナルは名前による並び 換えのみ対応していたのですが, sで時間による並び換えを行なっても正しく動作す るようにしたものです. また,25.5.2 dired でサイズ,拡張子で並び換え (2007/11/24)で拡張子による並び換えもできるようにしま した.

 
(defun ls-lisp-handle-switches (file-alist switches)
  ;; FILE-ALIST's elements are (FILE . FILE-ATTRIBUTES).
  ;; Return new alist sorted according to SWITCHES which is a list of
  ;; characters.  Default sorting is alphabetically.
  (let (index)
    (setq file-alist
          (sort file-alist
                (cond
                 ((memq ?S switches)    ; sorted on size
                  (function
                   (lambda (x y)
                     ;; 7th file attribute is file size
                     ;; Make largest file come first
                     (if (equal (nth 0 (cdr y))
                                (nth 0 (cdr x)))
                         (< (nth 7 (cdr y))
                            (nth 7 (cdr x)))
                       (nth 0 (cdr x))))))
                 ((memq ?t switches)    ; sorted on time
                  (setq index (ls-lisp-time-index switches))
                  (function
                   (lambda (x y)
                     (if (equal (nth 0 (cdr y))
                                (nth 0 (cdr x)))
                         (ls-lisp-time-lessp (nth index (cdr y))
                                             (nth index (cdr x)))
                       (nth 0 (cdr x))
                       ))))
                 ((memq ?X switches)    ; sorted on ext
                  (function
                   (lambda (x y)
                     (if (equal (nth 0 (cdr y))
                                (nth 0 (cdr x)))
                         (string-lessp (file-name-extension (upcase (car x)))
                                       (file-name-extension (upcase (car y))))
                       (nth 0 (cdr x))))))
                 (t                     ; sorted alphabetically
                  (if ls-lisp-dired-ignore-case
                      (function
                       (lambda (x y)
                         (if (equal (nth 0 (cdr y))
                                    (nth 0 (cdr x)))
                             (string-lessp (upcase (car x))
                                           (upcase (car y)))
                           (nth 0 (cdr x)))))
                    (function
                     (lambda (x y)
                       (if (equal (nth 0 (cdr y))
                                  (nth 0 (cdr x)))
                           (string-lessp (car x)
                                         (car y))
                         (nth 0 (cdr x)))))
                    )))))
    )

  (if (memq ?r switches)                ; reverse sort order
      (setq file-alist (nreverse file-alist)))
  file-alist)



[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端] [?]

25.6 dired バッファでリネーム (2005/02/17)

URL="http://www.bookshelf.jp/cgi-bin/goto.cgi?file=meadow&node=dired%20rename"
"MeadowMemo/diredバッファでリネーム"へのコメント(無し)
検索全文Elisp

dired バッファで Rとすることでファイル名を変更することができます.

しかし,ファイル名の変更効率はあまりよくありません.そこで,リネーム関連の Elisp を紹介します.

25.6.1 dired バッファを編集してリネーム ― dired-efap (2003/09/30)  
25.6.2 dired バッファを編集 ― 一括リネーム wdired (2005/02/17)  



[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端] [?]

25.6.1 dired バッファを編集してリネーム ― dired-efap (2003/09/30)

URL="http://www.bookshelf.jp/cgi-bin/goto.cgi?file=meadow&node=dired-efap"
"MeadowMemo/diredバッファを編集してリネーム―dired-efap"へのコメント(無し)
検索全文Elisp

要約

dired バッファを編集することで, 1 ファイルの名前を簡単にリネームできる.

何ができるのか?

Rのように, 1 ファイルの名前をリネームすることができます.

インストール方法

google から必要箇所をコピーし, dired-efap.el としてロードパスの通ったところへ保存します.

設定方法

以下を.emacs に追加します.

 
(require 'dired-efap)
(define-key dired-mode-map [f2] 'dired-efap)

詳しい使い方

dired でf2とすると

  d:/home/test/test:
  total 135  free 11726720
  drwxrwxrwx   2 root root        0 Sep 30 12:20 .
  drwxrwxrwx   4 root root        0 Sep 24 17:47 ..
  -rw-rw-rw-   1 root root       75 Sep 29 12:50 Changelog.txt
  -rw-rw-rw-   1 root root    19504 Sep 25 19:22 semantic.cache

のように,カーソルのあったところのファイルが反転します.これで,ファイル名を編集 してRETとすると,リネームできます.

コメント

1 ファイルだけというのが寂しいですねぇ.



[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端] [?]

25.6.2 dired バッファを編集 ― 一括リネーム wdired (2005/02/17)

URL="http://www.bookshelf.jp/cgi-bin/goto.cgi?file=meadow&node=wdired"
"MeadowMemo/diredバッファを編集―一括リネームwdired"へのコメント(無し)
検索全文Elisp

要約

dired バッファを編集して,多数のファイルを簡単に一括リネームできる.

何が問題なのか?

多数のファイルの拡張子を変える場合どうしてますか? 専用のソフトを入れる? あるいは 1 個 1 個手でやる?

それは,とても面倒ですね.

何ができるのか?

wdired を使えば, dired バッファを編集して,その変更を適用することができます.

そのため,拡張子の変更なら M-% で変換してしまえば終わりです.

設定済みMeadowでは

設定済みです.

インストール方法は?

最新のMeadowやEmacsには標準で付属しています.

付属していなければEmacs Lisp List から wdired を探して, 入手してください. emacswiki にもあります.

手に入れたら, ロードパスの通ったところに置きます.

設定方法

以下を.emacs に追加します.

 
(require 'wdired)
(define-key dired-mode-map "r" 'wdired-change-to-wdired-mode)

これで, Meadow を再起動すれば完了です.

詳しい使い方

使い方は簡単です.C-x dで dired に入り,rを入力します.すると,ミニ バッファに何か出て, dired バッファが普通のファイルのように編集できるようになりま す.

後はファイルと同じように編集するだけです.

編集が終わったら C-x C-sC-c C-c とします. これで, 編集した変更が 適用されます.

変更を適用しない時は C-c C-k で,破棄することができます.

キーバインド

専用のキーバインドとして以下が用意されてます.

追加設定

私はこんな設定も入ってます. dired で編集後に SKK をオフにしてくれます.

 
(defadvice wdired-finish-edit
  (after skk-no-use activate)
  (skk-auto-fill-mode -1))

ファイル名に日本語は使いませんから.



[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端] [?]

25.7 dired でファイルを閲覧 (2005/02/17)

URL="http://www.bookshelf.jp/cgi-bin/goto.cgi?file=meadow&node=dired%20view"
"MeadowMemo/diredでファイルを閲覧"へのコメント(無し)
検索全文Elisp

dired で表示できるのはファイル名や更新日だけで,そのファイルがどんな内容のファイ ルだったかは分かりません.

特に同じようなファイル名だと,どれがどれだったか混同してしまうことはよくあります.

そこで,dired でファイルの内容を表示できると便利です.ここでは,そのような機能を 実現するためのものを紹介します.

25.7.1 dired でファイルの内容を表示 ― bf-mode (2005/02/17)  
25.7.2 別のバッファを操作 ― master.el (2005/02/17)  



[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端] [?]

25.7.1 dired でファイルの内容を表示 ― bf-mode (2005/02/17)

URL="http://www.bookshelf.jp/cgi-bin/goto.cgi?file=meadow&node=bf-mode"
"MeadowMemo/diredでファイルの内容を表示―bf-mode"へのコメント(2007/12/28)
検索全文Elisp

要約

ファイルの内容を別ウィンドウに表示させることができます.

情報源

2 ちゃんねるの【叩かれて】 Emacs Lisp 道場【強くなれ】 に投稿されたものです.

bf-mode.elは,作者様より送付された 新しいバージョンです.

何が問題なのか?

dired でファイル名やサイズが表示されても,同じような名前だとどんなファイルか分か りません.

また,ディレクトリの場合にはどんなファイルが入っているかは,そのディレクトリに入 らないと分かりません.

何ができるのか?

ファイルの内容を別ウィンドウに表示させることができます.ディレクトリの場合には, ファイル名が表示されます.

設定済みMeadowでは

xdoc2txt を使うことで,Word や Excel の表示にも対応したバージョンを入れてありま す.設定も不要です.

そのバージョンは 23.6.3.2 dired で Word などのファイル内容を表示 (2005/02/17) で紹介しています.

インストール方法

bf-mode.elをダウンロードし,ロード パスの通ったところへ置きます.

設定方法

以下を.emacs に追加します.

 
(require 'bf-mode)

以下は必要に応じて設定します.

 
;; 別ウィンドウに表示するサイズの上限
(setq bf-mode-browsing-size 10)
;; 別ウィンドウに表示しないファイルの拡張子
(setq bf-mode-except-ext '("\\.exe$" "\\.com$"))
;; 容量がいくつであっても表示して欲しいもの
(setq bf-mode-force-browse-exts
      (append '("\\.texi$" "\\.el$")
              bf-mode-force-browse-exts))

;; html は w3m で表示する
(setq bf-mode-html-with-w3m t)
;; 圧縮されたファイルを表示
(setq bf-mode-archive-list-verbose t)
;; ディレクトリ内のファイル一覧を表示
(setq bf-mode-directory-list-verbose t)

詳しい使い方

dired を表示し,b とします.これで, bf-mode を起動できます.再度,b でオフになります.

オンになった状態で,npでカーソルを移動すると,別ウィンドウにそのファ イルの内容が表示されます.

SPCS-SPCでスクロールできます.

bf-mode-html-with-w3m が t なら w3m で表示できます.生の HTML を見たい時には j とします.

また, bf-mode-directory-list-verbose が t なら,ディレクトリでは

Directory d:/akihisa/www/soft/CVS
total 9
-rw-rw-rw-   1 admini  root     8377 Oct 24 22:59 Entries
-rw-rw-rw-   1 admini  root        7 Dec 21  2002 Repository
-rw-rw-rw-   1 admini  root       35 Dec 21  2002 Root

のように表示されます.

うまく動かない

そのままでは, XEmacs で動作しません.とりあえず,設定の前に以下を追加しておくと, 動作します.

 
(defun wholenump (num)
  (if (and
       (integerp num)
       (> num 0))
      t
    nil))

コメント

bf-mode になると dired の基本操作はできなくなります. bf-mode で閲覧して,いらな いから削除しようと思ってもdでは削除できませんので注意を.

一度,qで bf-mode を終了する必要があります.



[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端] [?]

25.7.2 別のバッファを操作 ― master.el (2005/02/17)

URL="http://www.bookshelf.jp/cgi-bin/goto.cgi?file=meadow&node=master"
"MeadowMemo/別のバッファを操作―master.el"へのコメント(無し)
検索全文Elisp

何ができるのか?

この Elisp の働きは単純で,ウィンドウを上下に分割した際,片方のウィンドウから,も う一方のウィンドウを操作するというものです.そのため,いちいち C-x o する手 間がなくなり便利になるというものです.

ただし,そのためには操作するウィンドウを指定する必要があり,少し面倒なのです.

インストール方法

ファイルは master.el.txt にあ ります.ダウンロードして, master.el と改名して,ロードパスの通ったところへ置きま す.

設定方法

.emacs に以下を追加します.

 
(require 'master)

詳しい使い方

応用設定

ちと面倒ですよね.

それでも,このファイルが残してあるのは,応用設定があるからなのです.やっているこ とは,簡単で, dired でファイルをSPCで選択した際には,ウィンドウを分割し, ファイルの内容を表示するようにしているのです.そして,SPCを再度押すと,メー ルのようにスクロールします.bで逆方向にスクロールします.メールを読むよう にファイルを見ることができて,重宝しています.

これだと,バッファがたくさんできてしまうので, dired バッファを C-x k で kill した際やディレクトリを移動した際に,作成したバッファをすべて消すようにしてい ます.

どんなファイルだったかを dired から見たいという時に, dired バッファとファイルバッファ を移動する必要もなく,便利で愛用しています.

使うためには,dired-master.el をダウンロードし,ロードパスの通ったところへ置きます.そして,.emacs に以下を追加 します.

 
(load "dired-master")

25.7.2.1 dired でニュースのようにファイルを見よう (2003/07/11)  



[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端] [?]

25.7.2.1 dired でニュースのようにファイルを見よう (2003/07/11)

URL="http://www.bookshelf.jp/cgi-bin/goto.cgi?file=meadow&node=dired%20reader"
"MeadowMemo/diredでニュースのようにファイルを見よう"へのコメント(2007/12/28)
検索全文Elisp

上で, dired で簡単にファイルを見る方法を紹介しましたが,その私家版です.

こうしておくと,「」というソフトでニュー スやメモなどを取り込み, dired でさくさくと見るということができます.

ただし,この設定よりも前で, w3m の設定が完了している必要があります.

使い方は dired を実行し,SPCで表示とスクロール,bで逆方向にスクロール, <で一番最初へ,>で一番最後へ,qで終了です.

不具合もたくさんありますが,気にしてはいけません.

使うためには, my-dired-master.el をダウ ンロードし,ロードパスの通ったところへ置きます.そして,以下を.emacs に追加します.

 
(load "my-dired-master")

コメント

最近は bf-mode を愛用しています.そのため,こちらは更新されません.



[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端] [?]

25.8 ファイルのアイコンを表示 − dispicon (2005/02/17)

URL="http://www.bookshelf.jp/cgi-bin/goto.cgi?file=meadow&node=dispicon"
"MeadowMemo/ファイルのアイコンを表示−dispicon"へのコメント(2007/12/28)
検索全文Elisp
要約

Windowsのエクスプローラではファイルのアイコンが表示されます.これをMeadowでも実現 することができます.

何ができるのか?

dispiconを使ってアイコン表示

dispiconを使ってアイコン表示

のように dired などでファイルのアイコンを表示させることができます.

設定済みMeadowでは

含まれていませんので,インストールと設定が必要です.

インストール方法

配布先から dispicon-1.0.0.zipをダウンロードして解凍します.

そして,dispicon.el をロードパスの通ったところへ,dispicon.exe をパスの通ったとこ ろへ置いておきます.

設定方法

以下を.emacsに追加します.

 
(autoload 'dispicon "dispicon")
;; Semi を使用したメールソフトでアイコンを表示
;; ここから
(eval-after-load "mime-view"
  '(defun mime-view-entity-title (entity)
     (or (mime-entity-read-field
          entity 'Content-Description)
         (mime-entity-read-field entity 'Subject)
         (let ((file (mime-entity-filename entity)))
           (when file
             (concat (dispicon file) file)))
         "")))
;; ここまで

;; dired でアイコンを表示
(eval-after-load "dired"
  '(progn
     (defadvice dired-revert
       (before dired-revert-remove-overlays activate)
       "Remove overlays."
       (save-excursion
         (let ((pos (point-min)))
           (while (not
                   (eq (setq pos (next-overlay-change pos))
                       (point-max)))
             (dolist (overlay (overlays-at pos))
               (delete-overlay overlay))))))
     (defun dired-insert-set-properties (beg end)
       (save-excursion
         (goto-char beg)
         (while (< (point) end)
           (condition-case nil
               (when (dired-move-to-filename)
                 (let ((beg (point))
                       end file)
                   (add-text-properties
                    beg
                    (setq end
                          (save-excursion
                            (dired-move-to-end-of-filename)
                            (point)))
                    '(mouse-face
                      highlight
                      help-echo
                      "mouse-2: visit this file in other window"))
                   (setq file (buffer-substring beg end))
                   (overlay-put (make-overlay beg end)
                                'before-string
                                (dispicon
                                 (with-temp-buffer
                                   (insert (expand-file-name
                                            file
                                            dired-directory))
                                   (goto-char (point-min))
                                   (while (search-forward "/" nil t)
                                     (replace-match "\\" nil t))
                                   (buffer-string))
                                 'small 16))))
             (error nil))
           (forward-line 1))))))

前半の「Semi を使用したメールソフトでアイコンを表示」部分は不要であれば,追加し なくても大丈夫です.

詳しい使い方

普通に dired を起動するとアイコンが表示されます.

ただし,ファイル数が多いと時間がかかります.



[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端] [?]

25.9 プログラム用関数 (2005/02/17)

URL="http://www.bookshelf.jp/cgi-bin/goto.cgi?file=meadow&node=directory%20functions"
"MeadowMemo/プログラム用関数"へのコメント(無し)
検索全文Elisp

ここでは,入れたからといって便利になるものではなく,自分で Elisp を書く時に使えそ うな関数を提供してくれるものを紹介します.特にディレクトリに関連したもののみを紹 介しています.

そのため,普段 Elisp を書く機会があまりない人にとっては不要なものがほとんどだと 思います.

25.9.1 サブディレクトリ一覧を得る ― dirtree (2005/02/17)  



[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端] [?]

25.9.1 サブディレクトリ一覧を得る ― dirtree (2005/02/17)

URL="http://www.bookshelf.jp/cgi-bin/goto.cgi?file=meadow&node=dirtree"
"MeadowMemo/サブディレクトリ一覧を得る―dirtree"へのコメント(無し)
検索全文Elisp

何が問題なのか?

Elisp を書く時に,サブディレクトリを得て,,,という処理を書きたくなる時がありま す.しかし,そのために自分で関数を書くのも面倒です.

何ができるのか?

サブディレクトリのリストを得ることができます.

インストール方法

dirtree.el をダウンロードし,ロードパスの通ったところへ置きます.

設定方法

以下を.emacs に追加します.

 
(require 'dirtree)

詳しい使い方

出力例は以下の通り.

(directory-tree "~/www/soft/")
("~/www/soft/" ("~/www/soft/wiki/" "~/www/soft/wiki/CVS/"))

うまく動かない

(directory-tree "~/www/soft")
("~/www/soft" nil nil)

のようになってしまいます.ディレクトリは必ず 「/」で終わっていないといけません. 「 file-name-as-directory 」を入れておくといいでしょう.


[ << ] [ >> ]           [表紙] [目次] [索引] [検索] [上端 / 下端] [?]