Function: vhdl-speedbar-expand-entity
vhdl-speedbar-expand-entity is a byte-compiled function defined in
vhdl-mode.el.gz.
Signature
(vhdl-speedbar-expand-entity TEXT TOKEN INDENT)
Documentation
Expand/contract the entity under the cursor.
Source Code
;; Defined in /usr/src/emacs/lisp/progmodes/vhdl-mode.el.gz
(defun vhdl-speedbar-expand-entity (text token indent)
"Expand/contract the entity under the cursor."
(cond
((string-match "\\+" text) ; expand entity
(let* ((key (vhdl-speedbar-line-key indent))
(ent-alist (vhdl-aget vhdl-entity-alist key))
(ent-entry (vhdl-aget ent-alist token))
(arch-alist (nth 3 ent-entry))
(inst-alist (vhdl-get-instantiations token indent))
(subpack-alist (nth 5 ent-entry))
(multiple-arch (> (length arch-alist) 1))
arch-entry inst-entry)
(if (not (or arch-alist inst-alist subpack-alist))
(speedbar-change-expand-button-char ??)
(speedbar-change-expand-button-char ?-)
;; add entity to `vhdl-speedbar-shown-unit-alist'
(let* ((unit-alist (vhdl-aget vhdl-speedbar-shown-unit-alist key)))
(vhdl-aput 'unit-alist token nil)
(vhdl-aput 'vhdl-speedbar-shown-unit-alist key unit-alist))
(speedbar-with-writable
(save-excursion
(end-of-line) (forward-char 1)
;; insert architectures
(when arch-alist
(vhdl-speedbar-make-title-line "Architectures:" (1+ indent)))
(while arch-alist
(setq arch-entry (car arch-alist))
(speedbar-make-tag-line
'curly ?+ 'vhdl-speedbar-expand-architecture
(cons token (nth 0 arch-entry))
(nth 1 arch-entry) 'vhdl-speedbar-find-file
(cons (nth 2 arch-entry) (nth 3 arch-entry))
'vhdl-speedbar-architecture-face (1+ indent))
(when (and multiple-arch
(equal (nth 0 arch-entry) (nth 4 ent-entry)))
(end-of-line 0) (insert " (mra)") (forward-char 1))
(setq arch-alist (cdr arch-alist)))
;; insert instantiations
(when inst-alist
(vhdl-speedbar-make-title-line "Instantiated as:" (1+ indent)))
(while inst-alist
(setq inst-entry (car inst-alist))
(vhdl-speedbar-make-inst-line
(nth 0 inst-entry) (nth 1 inst-entry) (nth 2 inst-entry)
(nth 3 inst-entry) (nth 4 inst-entry) (nth 5 inst-entry)
nil nil nil (1+ indent) 0 " in ")
(setq inst-alist (cdr inst-alist)))
;; insert required packages
(vhdl-speedbar-insert-subpackages
subpack-alist (1+ indent) indent)))
(when (memq 'display vhdl-speedbar-save-cache)
(add-to-list 'vhdl-updated-project-list key))
(vhdl-speedbar-update-current-unit t t))))
((string-match "-" text) ; contract entity
(speedbar-change-expand-button-char ?+)
;; remove entity from `vhdl-speedbar-shown-unit-alist'
(let* ((key (vhdl-speedbar-line-key indent))
(unit-alist (vhdl-aget vhdl-speedbar-shown-unit-alist key)))
(vhdl-adelete 'unit-alist token)
(if unit-alist
(vhdl-aput 'vhdl-speedbar-shown-unit-alist key unit-alist)
(vhdl-adelete 'vhdl-speedbar-shown-unit-alist key))
(speedbar-delete-subblock indent)
(when (memq 'display vhdl-speedbar-save-cache)
(add-to-list 'vhdl-updated-project-list key))))
(t (error "Nothing to display")))
(when (equal (selected-frame) speedbar-frame)
(speedbar-center-buffer-smartly)))