(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