diff options
Diffstat (limited to 'lisp/cedet/srecode/find.el')
-rw-r--r-- | lisp/cedet/srecode/find.el | 45 |
1 files changed, 25 insertions, 20 deletions
diff --git a/lisp/cedet/srecode/find.el b/lisp/cedet/srecode/find.el index befdb4731c2..f621c5e82d5 100644 --- a/lisp/cedet/srecode/find.el +++ b/lisp/cedet/srecode/find.el @@ -220,32 +220,37 @@ tables that do not belong to an application will be searched." (defvar srecode-read-template-name-history nil "History for completing reads for template names.") -(defun srecode-all-template-hash (&optional mode hash) +(defun srecode-user-template-p (template) + "Non-nil if TEMPLATE is intended for user insertion. +Templates not matching this predicate are used for code +generation or other internal purposes." + t) + +(defun srecode-all-template-hash (&optional mode hash predicate) "Create a hash table of all the currently available templates. Optional argument MODE is the major mode to look for. -Optional argument HASH is the hash table to fill in." - (let* ((mhash (or hash (make-hash-table :test 'equal))) - (mmode (or mode major-mode)) - (mp (get-mode-local-parent mmode)) - ) +Optional argument HASH is the hash table to fill in. +Optional argument PREDICATE can be used to filter the returned +templates." + (let* ((mhash (or hash (make-hash-table :test 'equal))) + (mmode (or mode major-mode)) + (parent-mode (get-mode-local-parent mmode))) ;; Get the parent hash table filled into our current hash. - (when (not (eq mode 'default)) - (if mp - (srecode-all-template-hash mp mhash) - (srecode-all-template-hash 'default mhash))) + (unless (eq mode 'default) + (srecode-all-template-hash (or parent-mode 'default) mhash)) + ;; Load up the hash table for our current mode. - (let* ((mt (srecode-get-mode-table mmode)) - (tabs (when mt (oref mt :tables))) - ) - (while tabs + (let* ((mt (srecode-get-mode-table mmode)) + (tabs (when mt (oref mt :tables)))) + (dolist (tab tabs) ;; Exclude templates for a particular application. - (when (and (not (oref (car tabs) :application)) - (srecode-template-table-in-project-p (car tabs))) + (when (and (not (oref tab :application)) + (srecode-template-table-in-project-p tab)) (maphash (lambda (key temp) - (puthash key temp mhash) - ) - (oref (car tabs) namehash))) - (setq tabs (cdr tabs))) + (when (or (not predicate) + (funcall predicate temp)) + (puthash key temp mhash))) + (oref tab namehash)))) mhash))) (defun srecode-calculate-default-template-string (hash) |