xyzzy のファイラでファイル名をコピーする
こちらを参考に複数のファイルを、ファイル名、フルパス、フルパス(バックスラッシュ)、URL形式でコピーできるようにした。
;; ファイラでファイル名をコピーする (defun filer-get-filenamestring (filename type) (interactive) (let (str) (cond ((= type 1) (setq str (if (file-directory-p filename) (car (reverse (pathname-directory (concat filename "x")))) (file-namestring filename)))) ((= type 2) (setq str filename)) ((= type 3) (setq str (map-slash-to-backslash filename))) ((= type 4) (setq str (concat "file:///" filename)))) str)) (defun my-filer-make-clipboard-string (lst) (apply #'concat (mapcar #'(lambda (x) (concat x "\n")) lst))) (defun filer-get-filenames (type) (interactive) (let ((selected-files (or (filer-get-mark-files) (list (filer-get-current-file))))) (copy-to-clipboard (my-filer-make-clipboard-string (mapcar #'(lambda (filename) (filer-get-filenamestring filename type)) selected-files))) (message "ファイル名をコピーしました"))) (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-filenames 1))) (:item nil "フルパス(/)でコピー(&S)" #'(lambda () (interactive) (filer-get-filenames 2))) (:item nil "フルパス(\\)でコピー(&E)" #'(lambda () (interactive) (filer-get-filenames 3))) (:item nil "URL表記でコピー(&U)" #'(lambda () (interactive) (filer-get-filenames 4))) ))) (track-popup-menu *get-filenamestring-menu*)))