-
-
Save cloudsben/25642dd40c20135b7c2d to your computer and use it in GitHub Desktop.
Emacs like textmate goto symbol function
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
(defun ido-goto-symbol (&optional symbol-list) | |
"Refresh imenu and jump to a place in the buffer using Ido." | |
(interactive) | |
(unless (featurep 'imenu) | |
(require 'imenu nil t)) | |
(cond | |
((not symbol-list) | |
(let ((ido-mode ido-mode) | |
(ido-enable-flex-matching | |
(if (boundp 'ido-enable-flex-matching) | |
ido-enable-flex-matching t)) | |
name-and-pos symbol-names position) | |
(unless ido-mode | |
(ido-mode 1) | |
(setq ido-enable-flex-matching t)) | |
(while (progn | |
(imenu--cleanup) | |
(setq imenu--index-alist nil) | |
(ido-goto-symbol (imenu--make-index-alist)) | |
(setq selected-symbol | |
(ido-completing-read "Symbol? " symbol-names)) | |
(string= (car imenu--rescan-item) selected-symbol))) | |
(unless (and (boundp 'mark-active) mark-active) | |
(push-mark nil t nil)) | |
(setq position (cdr (assoc selected-symbol name-and-pos))) | |
(cond | |
((overlayp position) | |
(goto-char (overlay-start position))) | |
(t | |
(goto-char position))))) | |
((listp symbol-list) | |
(dolist (symbol symbol-list) | |
(let (name position) | |
(cond | |
((and (listp symbol) (imenu--subalist-p symbol)) | |
(ido-goto-symbol symbol)) | |
((listp symbol) | |
(setq name (car symbol)) | |
(setq position (cdr symbol))) | |
((stringp symbol) | |
(setq name symbol) | |
(setq position | |
(get-text-property 1 'org-imenu-marker symbol)))) | |
(unless (or (null position) (null name) | |
(string= (car imenu--rescan-item) name)) | |
(add-to-list 'symbol-names name) | |
(add-to-list 'name-and-pos (cons name position)))))))) | |
(global-set-key (kbd "<f8>") 'ido-goto-symbol) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Click F8 use it!