forked from colonelpanic/dotfiles
pull out imenu index flattening code
This commit is contained in:
parent
369cec1b3d
commit
514b7eb27d
@ -262,6 +262,29 @@ These definitions silence the byte-compiler
|
|||||||
(defalias 'yes-or-no-p 'y-or-n-p)
|
(defalias 'yes-or-no-p 'y-or-n-p)
|
||||||
#+END_SRC
|
#+END_SRC
|
||||||
* Lisp
|
* Lisp
|
||||||
|
** Flatten imenu indexes
|
||||||
|
I like my imenu indexes flat so I don't have to press enter multiple times to find what I'm looking for. The functions that follow allow me to get this behavior out of functions that provide a nested imenu index.
|
||||||
|
#+BEGIN_SRC emacs-lisp
|
||||||
|
(defun imalison:imenu-prefix-flattened (index)
|
||||||
|
(let ((flattened (imalison:flatten-imenu-index (cdr index))))
|
||||||
|
(cl-loop for sub-item in flattened
|
||||||
|
collect
|
||||||
|
`(,(concat (car index) "." (car sub-item)) . ,(cdr sub-item)))))
|
||||||
|
|
||||||
|
(defun imalison:flatten-imenu-index (index)
|
||||||
|
(let ((cdr-is-index (listp (cdr index))))
|
||||||
|
(cond ((not (stringp (car index))) (cl-mapcan
|
||||||
|
#'imalison:flatten-imenu-index index))
|
||||||
|
(cdr-is-index (imalison:imenu-prefix-flattened index))
|
||||||
|
(t (list index)))))
|
||||||
|
|
||||||
|
(defun imalison:make-imenu-index-flat ()
|
||||||
|
(let ((original-imenu-function imenu-create-index-function))
|
||||||
|
(setq imenu-create-index-function
|
||||||
|
(lambda ()
|
||||||
|
(imalison:flatten-imenu-index
|
||||||
|
(funcall original-imenu-function))))))
|
||||||
|
#+END_SRC
|
||||||
** An emacs version predicate builder:
|
** An emacs version predicate builder:
|
||||||
#+BEGIN_SRC emacs-lisp
|
#+BEGIN_SRC emacs-lisp
|
||||||
(defmacro imalison:emacs-version-predicate (major-version minor-version)
|
(defmacro imalison:emacs-version-predicate (major-version minor-version)
|
||||||
@ -382,26 +405,6 @@ Prefix alternatives is a macro that builds a function that selects one of a coll
|
|||||||
`(setq ,name ,value)
|
`(setq ,name ,value)
|
||||||
`(defvar ,name ,value)))
|
`(defvar ,name ,value)))
|
||||||
|
|
||||||
(defun imalison:imenu-prefix-flattened (index)
|
|
||||||
(let ((flattened (imalison:flatten-imenu-index (cdr index))))
|
|
||||||
(cl-loop for sub-item in flattened
|
|
||||||
collect
|
|
||||||
`(,(concat (car index) "." (car sub-item)) . ,(cdr sub-item)))))
|
|
||||||
|
|
||||||
(defun imalison:flatten-imenu-index (index)
|
|
||||||
(let ((cdr-is-index (listp (cdr index))))
|
|
||||||
(cond ((not (stringp (car index))) (cl-mapcan
|
|
||||||
#'imalison:flatten-imenu-index index))
|
|
||||||
(cdr-is-index (imalison:imenu-prefix-flattened index))
|
|
||||||
(t (list index)))))
|
|
||||||
|
|
||||||
(defun imalison:make-imenu-index-flat ()
|
|
||||||
(let ((original-imenu-function imenu-create-index-function))
|
|
||||||
(setq imenu-create-index-function
|
|
||||||
(lambda ()
|
|
||||||
(imalison:flatten-imenu-index
|
|
||||||
(funcall original-imenu-function))))))
|
|
||||||
|
|
||||||
(defmacro defvar-if-non-existent (name value)
|
(defmacro defvar-if-non-existent (name value)
|
||||||
(unless (boundp name)
|
(unless (boundp name)
|
||||||
`(defvar ,name ,value)))
|
`(defvar ,name ,value)))
|
||||||
|
Loading…
Reference in New Issue
Block a user