;;; -*- Mode:LISP; Package:ZWEI; Base:10; Readtable:ZL -*- (DEFVAR *ALL-THINGS* '("FOO" "BAR" "BAZ")) (DEFVAR *THINGP-FUNCTION* 'STRINGP) (DEFVAR *FIND-THING-FUNCTION* #'IDENTITY) (DEFVAR *THING-SOURCE-FILES-FUNCTION* NIL) (DEFCOM COM-SELECT-THING-AS-TAG-TABLE "Make the files in a THING behave like a tags file" () (LET ((THING-NAME (READ-THING-NAME "Thing to select as tag table:"))) (SELECT-FILE-LIST-AS-TAG-TABLE (AND *THING-SOURCE-FILES-FUNCTION* (FUNCALL *THING-SOURCE-FILES-FUNCTION* THING-NAME)) THING-NAME)) DIS-NONE) (DEFUN READ-THING-NAME (PROMPT) "Read a thing name in the mini buffer, defaulting to DEFAULT. Prompts with PROMPT." (LET ((THING-NAME (COMPLETING-READ-FROM-MINI-BUFFER PROMPT (MAPCAR #'(LAMBDA (X) (CONS X X)) *ALL-THINGS*) T))) (IF (CONSP THING-NAME) (SETQ THING-NAME (CDR THING-NAME))) (COND ((NOT (AND *THINGP-FUNCTION* (FUNCALL *THINGP-FUNCTION* THING-NAME))) (BARF)) ('ELSE (CONDITION-CASE (X) (AND *FIND-THING-FUNCTION* (FUNCALL *FIND-THING-FUNCTION* THING-NAME)) (ERROR (BARF "~A" X)))))))