Next: 5.5 フレームサイズを変える例
Up: 5 Emacslisp
Previous: 5.3 ディレクトリ表示
コマンドとして,
n,pで表示行を選んで,fコマンドで
ファイルならば内容を表示し,ディレクトリならば
そのディレクトリへ入ってbrowserを再帰的に
呼び出すものを以下に示す.
(defun browser (dir)
"ファイルブラウザ"
(interactive "fディレクトリ: ")
(setq dir (expand-file-name dir))
(if
(null (file-directory-p dir))
(error "存在するディレクトリを指定してください"))
(let
((filelist (directory-files dir)) f header)
(switch-to-buffer "*file headings*")
(cd dir)
(erase-buffer)
(while filelist
(setq f (car filelist))
(insert f)
(move-to-column 32 t)
(cond
((file-directory-p f)
(insert "<Directory>\n"))
(t
(save-excursion
(set-buffer (get-buffer-create "*tmp*"))
(insert-file-contents f nil 0 80)
(skip-chars-forward " \t\n")
(setq header
(buffer-substring
(point)
(progn (end-of-line)
(point)))))
(insert header "\n")))
(setq filelist (cdr filelist)))
(kill-buffer "*tmp*")
(goto-char (point-min))
(use-local-map browser-mode-map)
(setq major-mode 'browser-mode
mode-name "browserdir")))
(defun browser-next-line (arg)
"ARG行進める"
(interactive "p")
(forward-line arg)
(browser-show-heading))
(defun browser-previous-line (arg)
"ARG行戻る"
(interactive "p")
(browser-next-line (- arg)))
(defun browser-show-heading ()
"今の行のファイルを隣のウィンドウへ表示する"
(interactive)
(let ((file (browser-get-filename))
(hbuffer (get-buffer-create "*headings*"))
(sw (selected-window)))
(save-excursion
(set-buffer hbuffer)
(erase-buffer)
(cond
((file-directory-p file)
(insert "ディレクトリ"))
(t
(insert-file-contents file nil 0 (* 40 80)))))
(pop-to-buffer hbuffer)
(select-window sw)))
(defun browser-get-filename ()
"カレント行のファイル名を取得"
(save-excursion
(beginning-of-line)
(buffer-substring
(point)
(progn (skip-chars-forward
"^ \t") (point)))))
(defun browser-find-file ()
"カレント行のファイルをオープン"
(interactive)
(let ((file (browser-get-filename)))
(cond
((file-directory-p file)
(browser file))
(t (find-file (browser-get-filename))))))
(progn
(defvar browser-mode-map (make-keymap) "browserのキーマップ")
(define-key browser-mode-map "n" 'browser-next-line)
(define-key browser-mode-map "p" 'browser-previous-line)
(define-key browser-mode-map "f" 'browser-find-file))
(expand-file-name "~")
"e:/home/inaba"
(file-name-nondirectory (expand-file-name "~"))
"inaba"
(file-exists-p (expand-file-name "~"))
t
(file-executable-p (expand-file-name "~"))
t
(file-directory-p (expand-file-name "~"))
t
(file-readable-p (expand-file-name "~"))
t
(file-writable-p (expand-file-name "~"))
t
(file-symlink-p (expand-file-name "~"))
nil
(file-modes (expand-file-name "~"))
511
generated through LaTeX2HTML. M.Inaba 平成18年5月7日