[xyzzy:04713] ポップアップメニューとか
- Subject: [xyzzy:04713] ポップアップメニューとか
- From: YAMAMOTO Taizo <ymtz@xxxxxxxxxxxxxxx>
- X-mailer: Denshin 8 Go V321.2b5
やまもと%YMTZです。
ディレクトリ構造をポップアップメニューにマップするための
関数を書いたので、暇な人は使ってみてください。
ちなみに、ルートで実行すると、どんなことになるのか知りません(^^;)
#本当は電信八号でデコードしたディレクトリを見るために
#作ったのですが、時間が無くてそこまで行ってません。
;;; sample function
(defun sample-function (dir file)
  (interactive)
  (set-default-directory
   (prog1
    (default-directory)
    (set-default-directory dir)
    (file-name-dialog :save nil
		      :title "サンプルです"
		      :default file
		      :filter '(("いわゆるすべてのファイル(*.*)" . "*.*"))))))
;;; create mime dir-list & menu
(defun create-mime-dir-list (src func)
  (let* ((dlst (sort (directory src :directory-only t :absolute t) #'string-lessp))
	 (flst (sort (directory src :file-only t) #'string-lessp))
	 (lst (append (mapcar #'(lambda (x) (list (file-namestring
						   (string-right-trim "/\\" x )
						   ;x
						  ) (create-mime-dir-list x func))) dlst)
		      (mapcar #'(lambda (x) (list x #'(lambda () (interactive) (apply func (list (append-trail-slash src) x))))) flst))))
    lst))
(defun create-mime-menu (dlst)
  (let ((mnu (create-popup-menu)) (dn 0) (fn 0))
    (dolist (item dlst)
      (let ((icar (car item))
	    (icadr (cadr item)))
	(cond ((functionp icadr)
	       (when (and (not (zerop dn)) (zerop fn))
		 (add-menu-separator mnu))
	       (incf fn)
	       (add-menu-item mnu 'mime-menu icar icadr))
	      (t
	       (incf dn)
	       (add-popup-menu mnu (create-mime-menu icadr) icar)))))
    mnu))
;;; how to use
(setq *app-popup-menu*
      (create-mime-menu
       (create-mime-dir-list "c:/my documents" 'sample-function)))
----
    YAMAMOTO Taizo / 山本 泰三
        mailto:ymtz@xxxxxxxxxxxxxxx
        mailto:yamamoto@xxxxxxxxx
        http://www1.odn.ne.jp/ymtz/