ファイラ

Last modified: "2019/01/02 17:49:36"

Table of contents


知っていると便利な辺り

ファイラの列毎の表示幅をキー操作でそ〜っと変える。

表示幅を広げる --- C-1C-4

表示幅を狭める --- C-M-1C-M-4


ファイラからネットワークドライブに接続

ファイラから C-c c で接続ダイヤログを、 C-c d で切断ダイヤログを表示する。

;; ネットワークドライブに接続
(define-key filer-keymap '(#\C-c #\c) 'network-connect-dialog)

;; ネットワークドライブの切断
(define-key filer-keymap '(#\C-c #\d) 'network-disconnect-dialog)

いろいろ

大文字のファイル名をファイラで一括して小文字へ

[xyzzy:01039](須田さんのぺーじ) より。Win98 で MO を使うと、ファイル名がみんな大文字になったりして嫌になる...。

(defun filer-downcase-filename ()
  (let ((files (filer-get-mark-files)))
    (when (and files (yes-or-no-p "小文字にしまっせ"))
      (filer-subscribe-to-reload (filer-get-directory))
      (mapc #'(lambda (x) (rename-file x (string-downcase x))) files)
      (filer-demand-reload)
      (filer-goto-file (file-namestring (car files))))
    t))
(define-key filer-keymap #\M-s 'filer-downcase-filename)

ファイル名を kill-ring へコピー

[xyzzy:03902](Toy さんのぺーじ) を参考に。株分けしてみた。

;; ファイラでパス付ファイル名(/)を kill-ring へコピー (C-w)
;;   by Tetsuya Kamei [xyzzy:03902]
(define-key filer-keymap #\C-w
                        #'(lambda ()
                                (interactive)
                                (let ((filename (filer-get-current-file)))
                                  (setq *clipboard-newer-than-kill-ring-p* nil
                                                *kill-ring-newer-than-clipboard-p* t)
                                  (ed::kill-new filename))))


;; ファイラでパス付ファイル名(\\)を kill-ring へコピー (C-q)
(define-key filer-keymap #\C-q
                        #'(lambda ()
                                (interactive)
                                (let ((filename (filer-get-current-file)))
                                  (setq *clipboard-newer-than-kill-ring-p* nil
                                                *kill-ring-newer-than-clipboard-p* t)
                                  (ed::kill-new (map-slash-to-backslash filename)))))

;; ファイラでファイル名(パス無し)を kill-ring へコピー (C-e)
(define-key filer-keymap #\C-e
                        #'(lambda ()
                                (interactive)
                                (let ((filename (filer-get-current-file)))
                                  (setq *clipboard-newer-than-kill-ring-p* nil
                                                *kill-ring-newer-than-clipboard-p* t)
                                  (ed::kill-new (file-namestring filename)))))

ファイル名をクリップボードへコピー

C-Insert でファイル名(ディレクトリ名)コピーメニューが表示される。

(defun filer-get-filenamestring (type)
  (interactive)
  (let ((n (filer-get-current-file)) str)
    (cond
     ((= type 1) (setq str (if (file-directory-p n)
                               (car (reverse (pathname-directory (concat n "x"))))
                             (file-namestring n))))
     ((= type 2) (setq str n))
     ((= type 3) (setq str (map-slash-to-backslash n)))
     ((= type 4) (setq str (concat "file:///" n))))
    (copy-to-clipboard str)))

(defvar *get-filenamestring-menu* nil)
(define-key filer-keymap #\C-Insert
            #'(lambda () (interactive)
                (unless *get-filenamestring-menu*
                  (setq *get-filenamestring-menu*
                        (define-popup-menu
                          (:item nil "ファイル名のみコピー(&F)"
                           #'(lambda () (interactive) (filer-get-filenamestring 1)))
                          (:item nil "フルパス(/)でコピー(&S)"
                           #'(lambda () (interactive) (filer-get-filenamestring 2)))
                          (:item nil "フルパス(\\)でコピー(&E)"
                           #'(lambda () (interactive) (filer-get-filenamestring 3)))
                          (:item nil "URL表記でコピー(&U)"
                           #'(lambda () (interactive) (filer-get-filenamestring 4)))
                          )))
                (track-popup-menu *get-filenamestring-menu*)))
[2003/09/30]
・M-c → C-Insert に変更した。

ディレクトリ全部を選択

xyzzy Part7 787 より。M-Home に割り当ててみた。

(defun filer-directory-select ()
  (filer-mark-all nil)
  (filer-toggle-mark-files))
(define-key filer-keymap #\M-Home 'filer-directory-select)

ガイドテキストを非表示&ガイドテキストをポップアップ表示

ノートタイプなどの解像度の低いディスプレイでは、1 行でも多く表示したいので、 ファイラ画面下のガイドテキストを非表示にしてみた。 しかし、たまにしか使用しないキーは覚えられないので、ポップアップ表示するようにしておいた。

とりあえず、ガイドテキストを表示しない設定。

(setq *filer-guide-text* nil)

M-h で、ファイラのガイドテキストをポップアップ表示する。 (半角カナです。ゴメンナサイ。) 大久保さんの教えどおり、タブで区切っている。

(setq *popup-filer-guide-text*
      (concat
       "A:属性		B:バイトコンパイル	C:コピー		D:削除		E:解凍\n"
       "F:検索		G:ファイル名検索	J:DIR移動	K:mkdir		L:ドライブ\n"
       "M:移動		N:ファイル名	O:圧縮		P:DIR??		Q:終了\n"
       "R:名前変更	S:DIR??		T:ショートカット	U:DIRサイズ	V:リスト\n"
       "W:閲覧		X:実行		Y:ショートカット	Z:プロパティ\n"
       "\n"
       "*:load		.:マスク		/:マーク		<:先頭		>:末尾\n"
       "@:別名コピー	\:ルート		=:比較		^:イジェクト	]:送る\n"
       "\n"
       "C-h:上ディレクトリ	C-r:後isearch	C-s:前isearch	C-u:ディレクトリサイズ\n"
       "C-1:ファイル広	C-2:サイズ広	C-3:日時広	C-4:属性広\n"
       "C-M-1:ファイル狭	C-M-2:サイズ狭	C-M-3:日時狭	C-M-4:属性狭\n"
       "\n"
       "M-g:grep	M-r:gresreg	M-v:リードオンリー\n"
       "\n"
       "F3:実行		F5:マークトグル	F6:ソート		S-F10:ポップアップメニュー\n"
       "\n"
       "TAB:移動	SPC:マーク\n"
       "Home:トグル(ファイル)	S-Home:クリア	C-Home:トグル(含Dir)	S-C-Home:全ファイルマーク\n"
       "End:リロード\n"
       "\n"
       ))

(define-key filer-keymap #\M-h
            #'(lambda () (interactive)
                (message-box *popup-filer-guide-text*)))

あと、カスタマイズしているあたり。

(setq *popup-filer-guide-text*
      (concat
       *popup-filer-guide-text*
       "\n"
       "M-f:diff		M-h:ガイド	M-s:小文字	M-Home:トグル(Dir)\n"
       "\n"
       "[ファイル名コピー]\n"
       "M-q:\\区切り	M-w:/区切り	M-e:パス無"
       ))

ファイラから「ファイルの実行」後にファイラを閉じる

xyzzy使い方がわからぬ人たちが励ましあうスレ 417 より。 X で実行。

(defun my-filer-shell-execute ()
  (ed::filer-shell-execute)
  (ed::filer-cancel))
(define-key filer-keymap #\X 'my-filer-shell-execute)

普通に閉じない「ファイルの実行」と併用したい場合は、別のキーにバインドしてもいいかも。 → M-x

(define-key filer-keymap #\M-x 'my-filer-shell-execute)

一画面ファイラの表示

須田さんのぺーじを参考に。 現在開いているファイルのディレクトリを見たいときに使っている。

(defun open-single-filer ()
  (interactive)
  (toggle-ime nil)
  (multiple-value-bind (files result)
      (filer nil t nil nil)
    (when result
      (dolist (f files t)
        (unless (file-directory-p f)
          (find-file f)
          (add-history f '*minibuffer-file-name-history*))))))
(define-key ctl-x-map #\d 'open-single-filer)

一画面ファイラから二画面ファイラを開く

一画面ファイラで開いているディレクトリを,二画面ファイラで開く。M-2 に割り当てている。

(defun filer-open-dual-window ()
  (interactive)
  (unless (filer-dual-window-p)
    (let ((*filer-primary-directory* (filer-get-directory))
          (*filer-secondary-directory* (filer-get-directory)))
      (filer-cancel)
      (open-filer))))
(define-key filer-keymap #\M-2 'filer-open-dual-window)

モーダルファイラから読取専用で開く

モーダルファイラから filer-view-file を実行すると, ファイラが閉じてくれないみたいなので閉じるようにしたつもり。 何か良い方法があるのだろうか。それともこういうものなのだろうか。 とりあえず C-RET に割り当てて使っている。

(defun my-filer-view-file ()
  (let ((files (or (filer-get-mark-files t)
                   (let ((f (filer-get-current-file)))
                     (and f (list f))))))
    (when files
      (mapc #'(lambda (file)
                (unless (file-directory-p file)
                  (find-file file)
                  (setq buffer-read-only t)
                  (add-history file '*minibuffer-file-name-history*)))
            files)
      (if (filer-modal-p)
          (filer-cancel)
        (si:*activate-toplevel))
      )))
(define-key filer-keymap #\LFD 'my-filer-view-file)

共有フォルダにかっ飛ぶ

ネットワークコンピュータの共有フォルダがダイアログから選択できる。 C-c J に割り当ててみた。 [xyzzy:06022](KAMEI Tetsuya さん)より。

(defun filer-jump-share-directory ()
  (multiple-value-bind (r d)
      (dialog-box '(dialog 0 0 187 157
                    (:caption "共有フォルダにかっ飛ぶかも")
                    (:font 9 "MS Pゴシック")
                    (:control
                     (:listbox list nil #x50a10103 7 7 119 143)
                     (:button IDOK "OK" #x50010001 130 7 50 14)
                     (:button IDCANCEL "きゃんせる" #x50010000 130 24 50 14)))
                  (list (cons 'list
                              (long-operation
                                (mapcan #'(lambda (s)
                                            (mapcar #'(lambda (r)
                                                        (concat "//" s "/" r))
                                                    (ignore-errors (list-server-resources s))))
                                        (list-servers)))))
                  nil)
    (and r (setq d (cdr (assoc 'list d)))
         (filer-chdir d))))

(define-key filer-keymap '(#\C-c #\J) 'filer-jump-share-directory)