grady@postgres (Steven Grady) (08/20/87)
I was bored and had a little time, so decided to learn how to use (x-popup-menu).. Here's what I came up with: ---------------------------------------------------------------------- ;; ;; Stupid waste of time trying to find a use for x-popup-menu.. ;; ;; Use: (find-elisp-file) or M-x find-file-using-menu or something.. ;; ;; Steven Grady ;; grady@postgres.berkeley.edu ;; ...!ucbvax!grady ;; (defun find-elisp-file () "Find some elisp file. Warning - Slow!" (interactive) (find-file-using-menu "/usr/new/lib/emacs/lisp" ".el$")) (defun find-file-using-menu (directory &optional match) "Find file from DIRECTORY, with optional MATCH regexp." (interactive "DFrom directory? sRegexp match? ") (let ((menu (make-file-menu directory match))) (message "Creating menu...") (setq choice (car (x-popup-menu '(20 20) menu))) (if choice (find-file (concat directory choice))))) (defun make-file-menu (directory &optional match) (let ((files (directory-files directory nil match)) (split-files) (one-list) (pane) (menu '("Files"))) (setq split-files (split-big-list files 10)) (while (not (null split-files)) (setq one-list (car split-files)) (setq pane (list (make-pane-name one-list))) (while (not (null one-list)) (setq pane (append pane (list (list (car one-list) (car one-list))))) (setq one-list (cdr one-list))) (setq split-files (cdr split-files)) (setq menu (append menu (list pane)))) menu)) (defun make-pane-name (l) (concat (car l) "...")) (defun split-big-list (l n) (cond ((null l) l) (t (let ((i 0) (s nil)) (while (< i n) (setq i (+ 1 i)) (setq s (append s (list (car l)))) (setq l (cdr l)) (if (null l) (setq i (+ n 1)))) (append (list s) (split-big-list l n))))))