[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
Meadow/Emacs で表示できるのはファイルだけではありません.ディレクトリも表示するこ とができるのです.エクスプローラのようにファイルの削除やコピーの操作も可能になっ ています.この機能のことを Emacs では dired (私は「ダイアード」と読んでます) と呼び ます.ディレクトリエディタとも言います.
本ページの前半ではこの dired の基本的な使い方を紹介していきます.後半では,dired のカスタマイズ方法や dired に関連した Elisp を紹介していきます.
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
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 でのディレクトリ移動,削除などの作業は以下のようにします.
他によく使うキーバインドです.
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
diredにいくつかの機能を追加する標準付属のElisp.
C-x C-j で一発で dired を起動できたりします.
設定済みです.
標準で付属しています.
以下を.emacsに追加します.
(load "dired-x")
|
上記の設定を追加することで,通常のバッファ時, dired バッファの両方に機能が追加さ れます.
通常のバッファにいる時に追加される機能としては,C-x C-j で現在のディレクト リを dired で開く機能や M-x dired-very-clean-tex で TeX 関連の不要なファイ ルを削除する機能があります.
dired バッファに追加される機能には *. として指定した拡張子を持つファイルに マークをつける機能などを使うことができます.
また,詳しくは コマンドの実行で紹介しますが, dired での X も便利になります.
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
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-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 ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
ファイル名は規則的に付けてないけど,ある文字を含んでるファイルだけを一覧したいと いうこともよくあることです.
特定の文字を含むファイルのみを 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 ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
find-dired や find-grep-dired には find や grep といったコマンドが必要になります. しかし,それらが無くても Lisp のみで同等のコマンドを実現できます.
find-diredやfind-grep-dired を使いたいが,Cygwin は入れることができないといった場 合があります.そのような場合には,これらのコマンドを利用できません.
Lisp のみで書いたコマンドを使うことで,同じようなコマンドを利用できます.
インストール済みですので,すぐに試すことができます.
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-lisp や M-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 ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
dired に標準で備わっているコマンドを紹介します.
25.2.1 dired から検索・置換 (2005/02/17)
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
複数のファイルを検索する時には, grep がよく使われています. しかし, grep で検索するファイルを細かく設定するのは困難です.
dired でマークをつけたファイルだけを対象に検索・置換できます.
検索するファイルは dired で選択できるので,簡単に対象となるファイルを指定できます.
C-x d で dired を表示した後で,適当なファイルに m でマークをつけます.
こうしておいて,A (dired-do-search) とすると,検索語の入力を求められますの で,入力します.
すると,m でマークをつけたファイルを順番に開き,検索してくれます.そして, 最初に一致した場所へカーソルが移動します.そこで,検索は停止しますので,編集など を行うことができます.
次の一致箇所へ行きたければM-, とします.一致箇所を一覧することはできません が,ちょっとした検索に便利です.
同じようにして Q (dired-do-query-replace-regexp) で置換もできます.
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
標準で付属しているコマンドの拡張や新たな機能を追加する方法を紹介します.
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
通常は m でマークをつけて,u でマークを外しますが,それを1キーで実行 できるようにします.
フォームからの投稿
dired では m でマークを付け,u でマークを外します.これにより,処理を 行うファイルを選択するのですが,m と u を使い分けないといけません.
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 ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
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 ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
dired を利用してファイルの文字コードを一括変換
フォームからの投稿
プログラムがある文字コードしか受け付けてくれない,俺は EUC しか嫌だなどなどで,ファ イルの文字コードを揃えたい時があります.
そんな時,1個1個ファイルを開いて,C-x RET f で文字コードを指定していくのは とても大変です.
この設定を使うと Meadow/Emacs で複数のファイルの文字コードを簡単に変換できます.
設定済みですので,そのままで使うことができます.
以下を.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 ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
dired でサブディレクトリも削除やコピーできる設定
dired でCによりディレクトリをコピーしようとするとエラーが出てできません. これは dired が再帰コピー,再帰削除ができないからです.
再帰コピー (削除) とはサブディレクトリ以下もコピー (削除) を行うことです.
dired で C(コピー) や D(削除) により,サブディレクトリもコピーや削除 できるようになります.
Meadow 2.00 以降なら
(setq dired-recursive-copies 'always) (setq dired-recursive-deletes 'always) |
を.emnacs に追加します.
私的 dired 拡張 dired-dia にある dired-dia.el , recursive-file-op.el をロードパスの通ったところへ置き
(require 'dired-aux) (load "dired-dia") |
を.emacs に追加します.
ただし, dired-dia.el 内でキーバインドが定義されているので,必要に応じて変更して おきます.また,一部このページの内容と重なる場所がありますので,必要に応じて編集 してください.
設定してあります.
dired でディレクトリの位置にカーソルを移動し,C(コピー) やD(削除) と します.
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
dired で深いディレクトリへ行くと, 後にはディレクトリバッファがたくさん残ってしま います.
dired でディレクトリを移動しても,新しいバッファを作成しないようにできます.
以下を.emacs に追加します.
これで,普通にディレクトリを移動すると,バッファを作成しません.バッファを作成し たい時にはoやC-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 ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
Windowsのマイコンピュータのようなドライブリストやマイネットワークのようなコンピュー タの一覧を表示できます.
help-gnu-emacsの「Dired on windows」(Message-ID:
ドライブの一覧を表示できます.
ただし,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 ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
dired で Windows の関連付けを元にファイルを開く.
Meadow は便利でこれで大抵のことができますが,外部アプリを起動したい時もあります. しかし,エクスプローラを起動するのは面倒です.
dired で選択したファイルを Windows で関連付けられたソフトで起動できます.
Meadow には fiber.exe をというソフトが付属しています. これは, 関連付けられたソフ トにより起動を行うソフトです.
例えば, Meadow2/2.00b2/bin にありますので,このディレクトリをパスに通しておきます.
設定は以下を追加します.
これで, 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)))) |
ファイラを頻繁に使うのであれば,下のようにしておくと便利です.これだと,ディレク トリに対しては 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 ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
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 ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
深いディレクトリや別ドライブのディレクトリのファイルを開く際, 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 ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
dired から tar.gz と lzh ファイルの内容表示,展開
フォームからの投稿
dired で t とするだけで, tar.gz の内容を表示できます.
設定していません.
以下を.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 ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
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 "abcdefghijklmnopqrstuvwxyz_.-+~#") )) |
私は dired のキーバインドが消えるのが嫌だったのと, Explorer のように aaaa と a を連打したら 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) の設定項目を使ってますので,使用する際にはそ ちらもコピーするか,編集するかしてください.
注意:スペースの入ったディレクトリは無視されます.
設定していません.
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
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 ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
ネタ元: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 ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
今週や先週に変更したファイルを強調表示することができます.
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 ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
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 ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
別のディレクトリに移動しても直前のディレクトリと同じ並び換え方法で表示します.
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 ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
diredでサイズや拡張子による並び換えが可能になります.
デフォルトでは日付けとファイル名でしか並び換えることができません.
サイズや拡張子でも並び換えることができます.
改良版のsorterをインストール,設定済みですので,何もしなくても使えます.
sorter.elをダウンロードし,ロー ドパスの通ったところに保存します.そして,
(load "sorter")
|
を .emacs に追加します.
dired で s を何回か入力すると,拡張子やサイズによる並び換えもできるようにな ります.
Meadow 1.15 では拡張子による並び換えはできません.
25.5.2.1 dired でサイズ,拡張子で並び換えの改良版 (2007/11/24)
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
並び換えをしてもカーソル位置は元々あったファイルの場所に留まってくれるsorterです.
"C-u s" で元に戻る sorter.el
sorter は確かに便利なのですが,最初の並び換え状態に戻るのが面倒です.最初に戻る には,今が何番目の並び換え条件で,全体でいくつの並び換え条件があるかを知っていな いといけませんからね.
さらに,カーソル位置も並び換えするたびに,バッファの先頭へ行ってしまいます.
sorterでの問題点を解決してくれます.
最新のでは,こちらを入れています.
ロードパスの通ったところへ置きます.
以下を .emacsに追加します.
(add-hook 'dired-load-hook (lambda () (require 'sorter))) |
基本的には,先に紹介した 25.5.2 dired でサイズ,拡張子で並び換え (2007/11/24) と同じです.
違うのは,いつでもC-u sと入力すると,名前による並び換えに戻ることができま す.
さらに,カーソル位置もバッファの先頭へは戻らず,今いるファイルの位置のままになり ます.
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
並び換えをメニューから行うことができる.
サイズや拡張子,時間などでの並び換えをメニューからする方法もあります. 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 ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
ディレクトリだけをまとめて dired の先頭に表示することができます.
dired のデフォルトの表示では,名前順になるため,どれがディレクトリでどれがファイ ルかとても分かりにくいです.
エクスプローラのようにディレクトリを先にまとめて表示することができます.
以下を.emacs に追加します.
(setq ls-lisp-dirs-first t) |
以下を.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 ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
dired バッファで Rとすることでファイル名を変更することができます.
しかし,ファイル名の変更効率はあまりよくありません.そこで,リネーム関連の Elisp を紹介します.
25.6.1 dired バッファを編集してリネーム ― dired-efap (2003/09/30) 25.6.2 dired バッファを編集 ― 一括リネーム wdired (2005/02/17)
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
dired バッファを編集することで, 1 ファイルの名前を簡単にリネームできる.
Rのように, 1 ファイルの名前をリネームすることができます.
から必要箇所をコピーし, 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 ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
dired バッファを編集して,多数のファイルを簡単に一括リネームできる.
多数のファイルの拡張子を変える場合どうしてますか? 専用のソフトを入れる? あるいは 1 個 1 個手でやる?
それは,とても面倒ですね.
wdired を使えば, dired バッファを編集して,その変更を適用することができます.
そのため,拡張子の変更なら M-% で変換してしまえば終わりです.
設定済みです.
最新の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-s か C-c C-c とします. これで, 編集した変更が 適用されます.
変更を適用しない時は C-c C-k で,破棄することができます.
専用のキーバインドとして以下が用意されてます.
私はこんな設定も入ってます. dired で編集後に SKK をオフにしてくれます.
(defadvice wdired-finish-edit (after skk-no-use activate) (skk-auto-fill-mode -1)) |
ファイル名に日本語は使いませんから.
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
dired で表示できるのはファイル名や更新日だけで,そのファイルがどんな内容のファイ ルだったかは分かりません.
特に同じようなファイル名だと,どれがどれだったか混同してしまうことはよくあります.
そこで,dired でファイルの内容を表示できると便利です.ここでは,そのような機能を 実現するためのものを紹介します.
25.7.1 dired でファイルの内容を表示 ― bf-mode (2005/02/17) 25.7.2 別のバッファを操作 ― master.el (2005/02/17)
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
ファイルの内容を別ウィンドウに表示させることができます.
2 ちゃんねるの【叩かれて】 Emacs Lisp 道場【強くなれ】 に投稿されたものです.
bf-mode.elは,作者様より送付された 新しいバージョンです.
dired でファイル名やサイズが表示されても,同じような名前だとどんなファイルか分か りません.
また,ディレクトリの場合にはどんなファイルが入っているかは,そのディレクトリに入 らないと分かりません.
ファイルの内容を別ウィンドウに表示させることができます.ディレクトリの場合には, ファイル名が表示されます.
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 でオフになります.
オンになった状態で,n,pでカーソルを移動すると,別ウィンドウにそのファ イルの内容が表示されます.
SPCとS-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 ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
この Elisp の働きは単純で,ウィンドウを上下に分割した際,片方のウィンドウから,も う一方のウィンドウを操作するというものです.そのため,いちいち C-x o する手 間がなくなり便利になるというものです.
ただし,そのためには操作するウィンドウを指定する必要があり,少し面倒なのです.
ファイルは master.el.txt にあ ります.ダウンロードして, master.el と改名して,ロードパスの通ったところへ置きま す.
.emacs に以下を追加します.
(require 'master) |
M-x master-modeとする.必ず操作する側のバッファで行う.
M-x master-set-slaveとして,操作されるバッファを指定する.これも,必ず操作 する側のバッファで行う.操作したいバッファが固定されているなら,適当なフックで指 定した方が楽です.
C-c C-n で C-v,C-c C-p で M-v,C-c < で M-<, C-c > で M-> の操作を M-x master-set-slave で指定したバッファに 行う.
ちと面倒ですよね.
それでも,このファイルが残してあるのは,応用設定があるからなのです.やっているこ とは,簡単で, 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 ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
上で, dired で簡単にファイルを見る方法を紹介しましたが,その私家版です.
こうしておくと,「紙」というソフトでニュー スやメモなどを取り込み, dired でさくさくと見るということができます.
ただし,この設定よりも前で, w3m の設定が完了している必要があります.
使い方は dired を実行し,SPCで表示とスクロール,bで逆方向にスクロール, <で一番最初へ,>で一番最後へ,qで終了です.
不具合もたくさんありますが,気にしてはいけません.
使うためには, my-dired-master.el をダウ ンロードし,ロードパスの通ったところへ置きます.そして,以下を.emacs に追加します.
(load "my-dired-master")
|
最近は bf-mode を愛用しています.そのため,こちらは更新されません.
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
Windowsのエクスプローラではファイルのアイコンが表示されます.これをMeadowでも実現 することができます.
のように dired などでファイルのアイコンを表示させることができます.
含まれていませんので,インストールと設定が必要です.
配布先から 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 ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
ここでは,入れたからといって便利になるものではなく,自分で Elisp を書く時に使えそ うな関数を提供してくれるものを紹介します.特にディレクトリに関連したもののみを紹 介しています.
そのため,普段 Elisp を書く機会があまりない人にとっては不要なものがほとんどだと 思います.
25.9.1 サブディレクトリ一覧を得る ― dirtree (2005/02/17)
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
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 」を入れておくといいでしょう.
[ << ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |