;;; vhdl-mode.el --- major mode for editing VHDL code
;; Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
-;; 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
+;; 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010
+;; Free Software Foundation, Inc.
;; Authors: Reto Zimmermann <reto@gnu.org>
;; Rodney J. Whitby <software.vhdl-mode@rwhitby.net>
;; Keywords: languages vhdl
;; WWW: http://www.iis.ee.ethz.ch/~zimmi/emacs/vhdl-mode.html
+;; Yoni Rabkin <yoni@rabkins.net> contacted the maintainer of this
+;; file on 18/3/2008, and the maintainer agreed that when a bug is
+;; filed in the Emacs bug reporting system against this file, a copy
+;; of the bug report be sent to the maintainer's email address.
+
(defconst vhdl-version "3.33.6"
"VHDL Mode version number.")
;; This file is part of GNU Emacs.
-;; GNU Emacs is free software; you can redistribute it and/or modify
+;; GNU Emacs is free software: you can redistribute it and/or modify
;; it under the terms of the GNU General Public License as published by
-;; the Free Software Foundation; either version 3, or (at your option)
-;; any later version.
+;; the Free Software Foundation, either version 3 of the License, or
+;; (at your option) any later version.
;; GNU Emacs is distributed in the hope that it will be useful,
;; but WITHOUT ANY WARRANTY; without even the implied warranty of
;; GNU General Public License for more details.
;; You should have received a copy of the GNU General Public License
-;; along with GNU Emacs; see the file COPYING. If not, write to the
-;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
-;; Boston, MA 02110-1301, USA.
+;; along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>.
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;; Commentary:
"Customizations for modes."
:group 'vhdl)
-(defcustom vhdl-electric-mode t
- "*Non-nil enables electrification (automatic template generation).
-If nil, template generators can still be invoked through key bindings and
-menu. Is indicated in the modeline by \"/e\" after the mode name and can be
-toggled by `\\[vhdl-electric-mode]'."
- :type 'boolean
- :group 'vhdl-mode)
-
-(defcustom vhdl-stutter-mode t
- "*Non-nil enables stuttering.
-Is indicated in the modeline by \"/s\" after the mode name and can be toggled
-by `\\[vhdl-stutter-mode]'."
- :type 'boolean
- :group 'vhdl-mode)
-
(defcustom vhdl-indent-tabs-mode nil
"*Non-nil means indentation can insert tabs.
Overrides local variable `indent-tabs-mode'."
The following keywords for template generation are supported:
<filename> : replaced by the name of the buffer
<author> : replaced by the user name and email address
- \(`user-full-name',`mail-host-address', `user-mail-address')
+ \(`user-full-name', `mail-host-address', `user-mail-address')
<login> : replaced by user login name (`user-login-name')
<company> : replaced by contents of option `vhdl-company-name'
<date> : replaced by the current date
"Enable case insensitive search and switch to syntax table that includes '_',
then execute BODY, and finally restore the old environment. Used for
consistent searching."
- `(let ((case-fold-search t) ; case insensitive search
- (current-syntax-table (syntax-table))
- result
- (restore-prog ; program to restore enviroment
- '(progn
- ;; restore syntax table
- (set-syntax-table current-syntax-table))))
+ `(let ((case-fold-search t)) ; case insensitive search
;; use extended syntax table
- (set-syntax-table vhdl-mode-ext-syntax-table)
- ;; execute BODY safely
- (setq result
- (condition-case info
- (progn ,@body)
- (error (eval restore-prog) ; restore environment on error
- (error (cadr info))))) ; pass error up
- ;; restore environment
- (eval restore-prog)
- result))
+ (with-syntax-table vhdl-mode-ext-syntax-table
+ ,@body)))
(defmacro vhdl-prepare-search-2 (&rest body)
"Enable case insensitive search, switch to syntax table that includes '_',
and remove `intangible' overlays, then execute BODY, and finally restore the
old environment. Used for consistent searching."
+ ;; FIXME: Why not just let-bind `inhibit-point-motion-hooks'? --Stef
`(let ((case-fold-search t) ; case insensitive search
(current-syntax-table (syntax-table))
- result overlay-all-list overlay-intangible-list overlay
- (restore-prog ; program to restore enviroment
- '(progn
- ;; restore syntax table
- (set-syntax-table current-syntax-table)
- ;; restore `intangible' overlays
- (when (fboundp 'overlay-lists)
- (while overlay-intangible-list
- (overlay-put (car overlay-intangible-list) 'intangible t)
- (setq overlay-intangible-list
- (cdr overlay-intangible-list)))))))
+ overlay-all-list overlay-intangible-list overlay)
;; use extended syntax table
(set-syntax-table vhdl-mode-ext-syntax-table)
;; remove `intangible' overlays
(overlay-put overlay 'intangible nil))
(setq overlay-all-list (cdr overlay-all-list))))
;; execute BODY safely
- (setq result
- (condition-case info
- (progn ,@body)
- (error (eval restore-prog) ; restore environment on error
- (error (cadr info))))) ; pass error up
- ;; restore environment
- (eval restore-prog)
- result))
+ (unwind-protect
+ (progn ,@body)
+ ;; restore syntax table
+ (set-syntax-table current-syntax-table)
+ ;; restore `intangible' overlays
+ (when (fboundp 'overlay-lists)
+ (while overlay-intangible-list
+ (overlay-put (car overlay-intangible-list) 'intangible t)
+ (setq overlay-intangible-list
+ (cdr overlay-intangible-list)))))))
(defmacro vhdl-visit-file (file-name issue-error &rest body)
"Visit file FILE-NAME and execute BODY."
(define-key vhdl-mode-map "\C-c\C-s\C-b" 'vhdl-subprog-paste-body)
(define-key vhdl-mode-map "\C-c\C-s\C-c" 'vhdl-subprog-paste-call)
(define-key vhdl-mode-map "\C-c\C-s\C-f" 'vhdl-subprog-flatten)
- (define-key vhdl-mode-map "\C-c\C-c\C-n" 'vhdl-compose-new-component)
- (define-key vhdl-mode-map "\C-c\C-c\C-p" 'vhdl-compose-place-component)
- (define-key vhdl-mode-map "\C-c\C-c\C-w" 'vhdl-compose-wire-components)
- (define-key vhdl-mode-map "\C-c\C-c\C-f" 'vhdl-compose-configuration)
- (define-key vhdl-mode-map "\C-c\C-c\C-k" 'vhdl-compose-components-package)
- (define-key vhdl-mode-map "\C-cc" 'vhdl-comment-uncomment-region)
+ (define-key vhdl-mode-map "\C-c\C-m\C-n" 'vhdl-compose-new-component)
+ (define-key vhdl-mode-map "\C-c\C-m\C-p" 'vhdl-compose-place-component)
+ (define-key vhdl-mode-map "\C-c\C-m\C-w" 'vhdl-compose-wire-components)
+ (define-key vhdl-mode-map "\C-c\C-m\C-f" 'vhdl-compose-configuration)
+ (define-key vhdl-mode-map "\C-c\C-m\C-k" 'vhdl-compose-components-package)
+ (define-key vhdl-mode-map "\C-c\C-c" 'vhdl-comment-uncomment-region)
(define-key vhdl-mode-map "\C-c-" 'vhdl-comment-append-inline)
(define-key vhdl-mode-map "\C-c\M--" 'vhdl-comment-display-line)
(define-key vhdl-mode-map "\C-c\C-i\C-l" 'indent-according-to-mode)
(define-key vhdl-mode-map "\C-c\C-b" 'vhdl-beautify-buffer)
(define-key vhdl-mode-map "\C-c\C-u\C-s" 'vhdl-update-sensitivity-list-process)
(define-key vhdl-mode-map "\C-c\C-u\M-s" 'vhdl-update-sensitivity-list-buffer)
- (define-key vhdl-mode-map "\C-cf" 'vhdl-fontify-buffer)
- (define-key vhdl-mode-map "\C-cs" 'vhdl-statistics-buffer)
+ (define-key vhdl-mode-map "\C-c\C-i\C-f" 'vhdl-fontify-buffer)
+ (define-key vhdl-mode-map "\C-c\C-i\C-s" 'vhdl-statistics-buffer)
(define-key vhdl-mode-map "\C-c\M-m" 'vhdl-show-messages)
(define-key vhdl-mode-map "\C-c\C-h" 'vhdl-doc-mode)
(define-key vhdl-mode-map "\C-c\C-v" 'vhdl-version)
(append
(when (memq 'vhdl vhdl-electric-keywords)
;; VHDL'93 keywords
- '(
- ("--" "" vhdl-template-display-comment-hook 0)
- ("abs" "" vhdl-template-default-hook 0)
- ("access" "" vhdl-template-default-hook 0)
- ("after" "" vhdl-template-default-hook 0)
- ("alias" "" vhdl-template-alias-hook 0)
- ("all" "" vhdl-template-default-hook 0)
- ("and" "" vhdl-template-default-hook 0)
- ("arch" "" vhdl-template-architecture-hook 0)
- ("architecture" "" vhdl-template-architecture-hook 0)
- ("array" "" vhdl-template-default-hook 0)
- ("assert" "" vhdl-template-assert-hook 0)
- ("attr" "" vhdl-template-attribute-hook 0)
- ("attribute" "" vhdl-template-attribute-hook 0)
- ("begin" "" vhdl-template-default-indent-hook 0)
- ("block" "" vhdl-template-block-hook 0)
- ("body" "" vhdl-template-default-hook 0)
- ("buffer" "" vhdl-template-default-hook 0)
- ("bus" "" vhdl-template-default-hook 0)
- ("case" "" vhdl-template-case-hook 0)
- ("comp" "" vhdl-template-component-hook 0)
- ("component" "" vhdl-template-component-hook 0)
- ("cond" "" vhdl-template-conditional-signal-asst-hook 0)
- ("conditional" "" vhdl-template-conditional-signal-asst-hook 0)
- ("conf" "" vhdl-template-configuration-hook 0)
- ("configuration" "" vhdl-template-configuration-hook 0)
- ("cons" "" vhdl-template-constant-hook 0)
- ("constant" "" vhdl-template-constant-hook 0)
- ("disconnect" "" vhdl-template-disconnect-hook 0)
- ("downto" "" vhdl-template-default-hook 0)
- ("else" "" vhdl-template-else-hook 0)
- ("elseif" "" vhdl-template-elsif-hook 0)
- ("elsif" "" vhdl-template-elsif-hook 0)
- ("end" "" vhdl-template-default-indent-hook 0)
- ("entity" "" vhdl-template-entity-hook 0)
- ("exit" "" vhdl-template-exit-hook 0)
- ("file" "" vhdl-template-file-hook 0)
- ("for" "" vhdl-template-for-hook 0)
- ("func" "" vhdl-template-function-hook 0)
- ("function" "" vhdl-template-function-hook 0)
- ("generic" "" vhdl-template-generic-hook 0)
- ("group" "" vhdl-template-group-hook 0)
- ("guarded" "" vhdl-template-default-hook 0)
- ("if" "" vhdl-template-if-hook 0)
- ("impure" "" vhdl-template-default-hook 0)
- ("in" "" vhdl-template-default-hook 0)
- ("inertial" "" vhdl-template-default-hook 0)
- ("inout" "" vhdl-template-default-hook 0)
- ("inst" "" vhdl-template-instance-hook 0)
- ("instance" "" vhdl-template-instance-hook 0)
- ("is" "" vhdl-template-default-hook 0)
- ("label" "" vhdl-template-default-hook 0)
- ("library" "" vhdl-template-library-hook 0)
- ("linkage" "" vhdl-template-default-hook 0)
- ("literal" "" vhdl-template-default-hook 0)
- ("loop" "" vhdl-template-bare-loop-hook 0)
- ("map" "" vhdl-template-map-hook 0)
- ("mod" "" vhdl-template-default-hook 0)
- ("nand" "" vhdl-template-default-hook 0)
- ("new" "" vhdl-template-default-hook 0)
- ("next" "" vhdl-template-next-hook 0)
- ("nor" "" vhdl-template-default-hook 0)
- ("not" "" vhdl-template-default-hook 0)
- ("null" "" vhdl-template-default-hook 0)
- ("of" "" vhdl-template-default-hook 0)
- ("on" "" vhdl-template-default-hook 0)
- ("open" "" vhdl-template-default-hook 0)
- ("or" "" vhdl-template-default-hook 0)
- ("others" "" vhdl-template-others-hook 0)
- ("out" "" vhdl-template-default-hook 0)
- ("pack" "" vhdl-template-package-hook 0)
- ("package" "" vhdl-template-package-hook 0)
- ("port" "" vhdl-template-port-hook 0)
- ("postponed" "" vhdl-template-default-hook 0)
- ("procedure" "" vhdl-template-procedure-hook 0)
- ("process" "" vhdl-template-process-hook 0)
- ("pure" "" vhdl-template-default-hook 0)
- ("range" "" vhdl-template-default-hook 0)
- ("record" "" vhdl-template-default-hook 0)
- ("register" "" vhdl-template-default-hook 0)
- ("reject" "" vhdl-template-default-hook 0)
- ("rem" "" vhdl-template-default-hook 0)
- ("report" "" vhdl-template-report-hook 0)
- ("return" "" vhdl-template-return-hook 0)
- ("rol" "" vhdl-template-default-hook 0)
- ("ror" "" vhdl-template-default-hook 0)
- ("select" "" vhdl-template-selected-signal-asst-hook 0)
- ("severity" "" vhdl-template-default-hook 0)
- ("shared" "" vhdl-template-default-hook 0)
- ("sig" "" vhdl-template-signal-hook 0)
- ("signal" "" vhdl-template-signal-hook 0)
- ("sla" "" vhdl-template-default-hook 0)
- ("sll" "" vhdl-template-default-hook 0)
- ("sra" "" vhdl-template-default-hook 0)
- ("srl" "" vhdl-template-default-hook 0)
- ("subtype" "" vhdl-template-subtype-hook 0)
- ("then" "" vhdl-template-default-hook 0)
- ("to" "" vhdl-template-default-hook 0)
- ("transport" "" vhdl-template-default-hook 0)
- ("type" "" vhdl-template-type-hook 0)
- ("unaffected" "" vhdl-template-default-hook 0)
- ("units" "" vhdl-template-default-hook 0)
- ("until" "" vhdl-template-default-hook 0)
- ("use" "" vhdl-template-use-hook 0)
- ("var" "" vhdl-template-variable-hook 0)
- ("variable" "" vhdl-template-variable-hook 0)
- ("wait" "" vhdl-template-wait-hook 0)
- ("when" "" vhdl-template-when-hook 0)
- ("while" "" vhdl-template-while-loop-hook 0)
- ("with" "" vhdl-template-with-hook 0)
- ("xnor" "" vhdl-template-default-hook 0)
- ("xor" "" vhdl-template-default-hook 0)
- ))
+ (mapcar (lambda (x) (list (car x) "" (cdr x) 0 'system))
+ '(
+ ("--" . vhdl-template-display-comment-hook)
+ ("abs" . vhdl-template-default-hook)
+ ("access" . vhdl-template-default-hook)
+ ("after" . vhdl-template-default-hook)
+ ("alias" . vhdl-template-alias-hook)
+ ("all" . vhdl-template-default-hook)
+ ("and" . vhdl-template-default-hook)
+ ("arch" . vhdl-template-architecture-hook)
+ ("architecture" . vhdl-template-architecture-hook)
+ ("array" . vhdl-template-default-hook)
+ ("assert" . vhdl-template-assert-hook)
+ ("attr" . vhdl-template-attribute-hook)
+ ("attribute" . vhdl-template-attribute-hook)
+ ("begin" . vhdl-template-default-indent-hook)
+ ("block" . vhdl-template-block-hook)
+ ("body" . vhdl-template-default-hook)
+ ("buffer" . vhdl-template-default-hook)
+ ("bus" . vhdl-template-default-hook)
+ ("case" . vhdl-template-case-hook)
+ ("comp" . vhdl-template-component-hook)
+ ("component" . vhdl-template-component-hook)
+ ("cond" . vhdl-template-conditional-signal-asst-hook)
+ ("conditional" . vhdl-template-conditional-signal-asst-hook)
+ ("conf" . vhdl-template-configuration-hook)
+ ("configuration" . vhdl-template-configuration-hook)
+ ("cons" . vhdl-template-constant-hook)
+ ("constant" . vhdl-template-constant-hook)
+ ("disconnect" . vhdl-template-disconnect-hook)
+ ("downto" . vhdl-template-default-hook)
+ ("else" . vhdl-template-else-hook)
+ ("elseif" . vhdl-template-elsif-hook)
+ ("elsif" . vhdl-template-elsif-hook)
+ ("end" . vhdl-template-default-indent-hook)
+ ("entity" . vhdl-template-entity-hook)
+ ("exit" . vhdl-template-exit-hook)
+ ("file" . vhdl-template-file-hook)
+ ("for" . vhdl-template-for-hook)
+ ("func" . vhdl-template-function-hook)
+ ("function" . vhdl-template-function-hook)
+ ("generic" . vhdl-template-generic-hook)
+ ("group" . vhdl-template-group-hook)
+ ("guarded" . vhdl-template-default-hook)
+ ("if" . vhdl-template-if-hook)
+ ("impure" . vhdl-template-default-hook)
+ ("in" . vhdl-template-default-hook)
+ ("inertial" . vhdl-template-default-hook)
+ ("inout" . vhdl-template-default-hook)
+ ("inst" . vhdl-template-instance-hook)
+ ("instance" . vhdl-template-instance-hook)
+ ("is" . vhdl-template-default-hook)
+ ("label" . vhdl-template-default-hook)
+ ("library" . vhdl-template-library-hook)
+ ("linkage" . vhdl-template-default-hook)
+ ("literal" . vhdl-template-default-hook)
+ ("loop" . vhdl-template-bare-loop-hook)
+ ("map" . vhdl-template-map-hook)
+ ("mod" . vhdl-template-default-hook)
+ ("nand" . vhdl-template-default-hook)
+ ("new" . vhdl-template-default-hook)
+ ("next" . vhdl-template-next-hook)
+ ("nor" . vhdl-template-default-hook)
+ ("not" . vhdl-template-default-hook)
+ ("null" . vhdl-template-default-hook)
+ ("of" . vhdl-template-default-hook)
+ ("on" . vhdl-template-default-hook)
+ ("open" . vhdl-template-default-hook)
+ ("or" . vhdl-template-default-hook)
+ ("others" . vhdl-template-others-hook)
+ ("out" . vhdl-template-default-hook)
+ ("pack" . vhdl-template-package-hook)
+ ("package" . vhdl-template-package-hook)
+ ("port" . vhdl-template-port-hook)
+ ("postponed" . vhdl-template-default-hook)
+ ("procedure" . vhdl-template-procedure-hook)
+ ("process" . vhdl-template-process-hook)
+ ("pure" . vhdl-template-default-hook)
+ ("range" . vhdl-template-default-hook)
+ ("record" . vhdl-template-default-hook)
+ ("register" . vhdl-template-default-hook)
+ ("reject" . vhdl-template-default-hook)
+ ("rem" . vhdl-template-default-hook)
+ ("report" . vhdl-template-report-hook)
+ ("return" . vhdl-template-return-hook)
+ ("rol" . vhdl-template-default-hook)
+ ("ror" . vhdl-template-default-hook)
+ ("select" . vhdl-template-selected-signal-asst-hook)
+ ("severity" . vhdl-template-default-hook)
+ ("shared" . vhdl-template-default-hook)
+ ("sig" . vhdl-template-signal-hook)
+ ("signal" . vhdl-template-signal-hook)
+ ("sla" . vhdl-template-default-hook)
+ ("sll" . vhdl-template-default-hook)
+ ("sra" . vhdl-template-default-hook)
+ ("srl" . vhdl-template-default-hook)
+ ("subtype" . vhdl-template-subtype-hook)
+ ("then" . vhdl-template-default-hook)
+ ("to" . vhdl-template-default-hook)
+ ("transport" . vhdl-template-default-hook)
+ ("type" . vhdl-template-type-hook)
+ ("unaffected" . vhdl-template-default-hook)
+ ("units" . vhdl-template-default-hook)
+ ("until" . vhdl-template-default-hook)
+ ("use" . vhdl-template-use-hook)
+ ("var" . vhdl-template-variable-hook)
+ ("variable" . vhdl-template-variable-hook)
+ ("wait" . vhdl-template-wait-hook)
+ ("when" . vhdl-template-when-hook)
+ ("while" . vhdl-template-while-loop-hook)
+ ("with" . vhdl-template-with-hook)
+ ("xnor" . vhdl-template-default-hook)
+ ("xor" . vhdl-template-default-hook)
+ )))
;; VHDL-AMS keywords
(when (and (memq 'vhdl vhdl-electric-keywords) (vhdl-standard-p 'ams))
- '(
- ("across" "" vhdl-template-default-hook 0)
- ("break" "" vhdl-template-break-hook 0)
- ("limit" "" vhdl-template-limit-hook 0)
- ("nature" "" vhdl-template-nature-hook 0)
- ("noise" "" vhdl-template-default-hook 0)
- ("procedural" "" vhdl-template-procedural-hook 0)
- ("quantity" "" vhdl-template-quantity-hook 0)
- ("reference" "" vhdl-template-default-hook 0)
- ("spectrum" "" vhdl-template-default-hook 0)
- ("subnature" "" vhdl-template-subnature-hook 0)
- ("terminal" "" vhdl-template-terminal-hook 0)
- ("through" "" vhdl-template-default-hook 0)
- ("tolerance" "" vhdl-template-default-hook 0)
- ))
+ (mapcar (lambda (x) (list (car x) "" (cdr x) 0 'system))
+ '(
+ ("across" . vhdl-template-default-hook)
+ ("break" . vhdl-template-break-hook)
+ ("limit" . vhdl-template-limit-hook)
+ ("nature" . vhdl-template-nature-hook)
+ ("noise" . vhdl-template-default-hook)
+ ("procedural" . vhdl-template-procedural-hook)
+ ("quantity" . vhdl-template-quantity-hook)
+ ("reference" . vhdl-template-default-hook)
+ ("spectrum" . vhdl-template-default-hook)
+ ("subnature" . vhdl-template-subnature-hook)
+ ("terminal" . vhdl-template-terminal-hook)
+ ("through" . vhdl-template-default-hook)
+ ("tolerance" . vhdl-template-default-hook)
+ )))
;; user model keywords
(when (memq 'user vhdl-electric-keywords)
- (let ((alist vhdl-model-alist)
- abbrev-list keyword)
- (while alist
- (setq keyword (nth 3 (car alist)))
+ (let (abbrev-list keyword)
+ (dolist (elem vhdl-model-alist)
+ (setq keyword (nth 3 elem))
(unless (equal keyword "")
- (setq abbrev-list
- (cons (list keyword ""
- (vhdl-function-name
- "vhdl-model" (nth 0 (car alist)) "hook") 0)
- abbrev-list)))
- (setq alist (cdr alist)))
+ (push (list keyword ""
+ (vhdl-function-name
+ "vhdl-model" (nth 0 elem) "hook") 0 'system)
+ abbrev-list)))
abbrev-list)))))
;; initialize abbrev table for VHDL Mode
("Mode"
["Electric Mode"
(progn (customize-set-variable 'vhdl-electric-mode
- (not vhdl-electric-mode))
- (vhdl-mode-line-update))
+ (not vhdl-electric-mode)))
:style toggle :selected vhdl-electric-mode :keys "C-c C-m C-e"]
["Stutter Mode"
(progn (customize-set-variable 'vhdl-stutter-mode
- (not vhdl-stutter-mode))
- (vhdl-mode-line-update))
+ (not vhdl-stutter-mode)))
:style toggle :selected vhdl-stutter-mode :keys "C-c C-m C-s"]
["Indent Tabs Mode"
(progn (customize-set-variable 'vhdl-indent-tabs-mode
to above mailing lists by sending an email to <reto@gnu.org>.
VHDL Mode is officially distributed at
-http://opensource.ethz.ch/emacs/vhdl-mode.html
+URL `http://opensource.ethz.ch/emacs/vhdl-mode.html'
where the latest version can be found.
(interactive)
(kill-all-local-variables)
(setq major-mode 'vhdl-mode)
- (setq mode-name "VHDL")
+ (setq mode-name '("VHDL"
+ (vhdl-electric-mode "/" (vhdl-stutter-mode "/"))
+ (vhdl-electric-mode "e")
+ (vhdl-stutter-mode "s")))
;; set maps and tables
(use-local-map vhdl-mode-map)
;; miscellaneous
(vhdl-ps-print-init)
(vhdl-write-file-hooks-init)
- (vhdl-mode-line-update)
(message "VHDL Mode %s.%s" vhdl-version
(if noninteractive "" " See menu for documentation and release notes."))
(vhdl-write-file-hooks-init)
(vhdl-update-mode-menu)
(vhdl-hideshow-init)
- (run-hooks 'menu-bar-update-hook)
- (vhdl-mode-line-update))
+ (run-hooks 'menu-bar-update-hook))
(defun vhdl-write-file-hooks-init ()
"Add/remove hooks when buffer is saved."
(interactive "*P")
(vhdl-prepare-search-2
(cond
+ ;; indent region if region is active
+ ((and (not (featurep 'xemacs)) (use-region-p))
+ (vhdl-indent-region (region-beginning) (region-end) nil))
;; expand word
((= (char-syntax (preceding-char)) ?w)
(let ((case-fold-search (not vhdl-word-completion-case-sensitive))
(condition-case () (forward-sexp)
(error (goto-char (point-max))))
(< (point) end))
- (delete-backward-char 1))
+ (delete-char -1))
;; add closing parenthesis
(when (> (point) end)
(goto-char end)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Enabling/disabling
-(defun vhdl-mode-line-update ()
- "Update the modeline string for VHDL major mode."
- (setq mode-name (concat "VHDL"
- (and (or vhdl-electric-mode vhdl-stutter-mode) "/")
- (and vhdl-electric-mode "e")
- (and vhdl-stutter-mode "s")))
- (force-mode-line-update t))
-
-(defun vhdl-electric-mode (arg)
+(define-minor-mode vhdl-electric-mode
"Toggle VHDL electric mode.
Turn on if ARG positive, turn off if ARG negative, toggle if ARG zero or nil."
- (interactive "P")
- (setq vhdl-electric-mode
- (cond ((or (not arg) (zerop arg)) (not vhdl-electric-mode))
- ((> arg 0) t) (t nil)))
- (vhdl-mode-line-update))
+ :global t)
-(defun vhdl-stutter-mode (arg)
+(define-minor-mode vhdl-stutter-mode
"Toggle VHDL stuttering mode.
Turn on if ARG positive, turn off if ARG negative, toggle if ARG zero or nil."
- (interactive "P")
- (setq vhdl-stutter-mode
- (cond ((or (not arg) (zerop arg)) (not vhdl-stutter-mode))
- ((> arg 0) t) (t nil)))
- (vhdl-mode-line-update))
+ :global t)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Stuttering
(defun vhdl-electric-quote (count) "'' --> \""
(interactive "p")
(if (and vhdl-stutter-mode (= count 1) (not (vhdl-in-literal)))
- (if (= (preceding-char) last-input-char)
- (progn (delete-backward-char 1) (insert-char ?\" 1))
+ (if (= (preceding-char) last-input-event)
+ (progn (delete-char -1) (insert-char ?\" 1))
(insert-char ?\' 1))
(self-insert-command count)))
(defun vhdl-electric-semicolon (count) "';;' --> ' : ', ': ;' --> ' := '"
(interactive "p")
(if (and vhdl-stutter-mode (= count 1) (not (vhdl-in-literal)))
- (cond ((= (preceding-char) last-input-char)
+ (cond ((= (preceding-char) last-input-event)
(progn (delete-char -1)
(unless (eq (preceding-char) ? ) (insert " "))
(insert ": ")
(defun vhdl-electric-comma (count) "',,' --> ' <= '"
(interactive "p")
(if (and vhdl-stutter-mode (= count 1) (not (vhdl-in-literal)))
- (cond ((= (preceding-char) last-input-char)
+ (cond ((= (preceding-char) last-input-event)
(progn (delete-char -1)
(unless (eq (preceding-char) ? ) (insert " "))
(insert "<= ")))
(defun vhdl-electric-period (count) "'..' --> ' => '"
(interactive "p")
(if (and vhdl-stutter-mode (= count 1) (not (vhdl-in-literal)))
- (cond ((= (preceding-char) last-input-char)
+ (cond ((= (preceding-char) last-input-event)
(progn (delete-char -1)
(unless (eq (preceding-char) ? ) (insert " "))
(insert "=> ")))
(defun vhdl-electric-equal (count) "'==' --> ' == '"
(interactive "p")
(if (and vhdl-stutter-mode (= count 1) (not (vhdl-in-literal)))
- (cond ((= (preceding-char) last-input-char)
+ (cond ((= (preceding-char) last-input-event)
(progn (delete-char -1)
(unless (eq (preceding-char) ? ) (insert " "))
(insert "== ")))
(unless (vhdl-template-field
(concat "[type" (and (vhdl-standard-p 'ams) " or nature") "]")
nil t)
- (delete-backward-char 3))
+ (delete-char -3))
(vhdl-insert-keyword " IS ")
(vhdl-template-field "name" ";")
(vhdl-comment-insert-inline))))
(vhdl-template-field "library name" "." nil nil nil nil
(vhdl-work-library))
(vhdl-template-field "configuration name" ";"))
- (t (delete-backward-char 1) (insert ";") t))))))
+ (t (delete-char -1) (insert ";") t))))))
(defun vhdl-template-configuration-decl ()
(vhdl-insert-keyword " OPEN ")
(unless (vhdl-template-field "[READ_MODE | WRITE_MODE | APPEND_MODE]"
nil t)
- (delete-backward-char 6)))
+ (delete-char -6)))
(vhdl-insert-keyword " IS ")
(when (vhdl-standard-p '87)
(vhdl-template-field "[IN | OUT]" " " t))
(insert "\n")
(indent-to margin))
(delete-region end-pos (point))
- (delete-backward-char 1)
+ (delete-char -1)
(insert ")")
(when vhdl-auto-align (vhdl-align-region-groups start (point) 1))
t)
(vhdl-insert-keyword "REPORT ")
(if (equal "\"\"" (vhdl-template-field
"string expression" nil t start (point) t))
- (delete-backward-char 2)
+ (delete-char -2)
(setq start (point))
(vhdl-insert-keyword " SEVERITY ")
(unless (vhdl-template-field "[NOTE | WARNING | ERROR | FAILURE]" nil t)
"[scalar type | ARRAY | RECORD | ACCESS | FILE]" nil t)
""))))
(cond ((equal definition "")
- (delete-backward-char 4)
+ (delete-char -4)
(insert ";"))
((equal definition "ARRAY")
(delete-region (point) (progn (forward-word -1) (point)))
(if (not (or (and string (progn (insert string) t))
(vhdl-template-field "[comment]" nil t)))
(delete-region position (point))
- (while (= (preceding-char) ? ) (delete-backward-char 1))
-; (when (> (current-column) end-comment-column)
-; (setq position (point-marker))
-; (re-search-backward "-- ")
-; (insert "\n")
-; (indent-to comment-column)
-; (goto-char position))
+ (while (= (preceding-char) ?\ ) (delete-char -1))
+ ;; (when (> (current-column) end-comment-column)
+ ;; (setq position (point-marker))
+ ;; (re-search-backward "-- ")
+ ;; (insert "\n")
+ ;; (indent-to comment-column)
+ ;; (goto-char position))
))))
(defun vhdl-comment-block ()
(when semicolon-pos (goto-char semicolon-pos))
(if not-empty
(progn (delete-char 1) (insert ")"))
- (delete-backward-char 2))))
+ (delete-char -2))))
(defun vhdl-template-generic-list (optional &optional no-value)
"Read from user a generic spec argument list."
(backward-word 1)
(vhdl-case-word 1)
(delete-char 1))
- (let ((invoke-char last-command-char)
+ (let ((invoke-char last-command-event)
(abbrev-mode -1)
(vhdl-template-invoked-by-hook t))
(let ((caught (catch 'abort
(widen)
(save-excursion
(beginning-of-line)
- (1+ (count-lines 1 (point))))))
+ (1+ (count-lines (point-min) (point))))))
(defun vhdl-line-kill-entire (&optional arg)
"Delete entire line."
(add-hook 'hs-minor-mode-hook 'hs-hide-all)
(remove-hook 'hs-minor-mode-hook 'hs-hide-all))
(hs-minor-mode arg)
- (vhdl-mode-line-update))) ; hack to update menu bar
+ (force-mode-line-update))) ; hack to update menu bar
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(let ((buffer (get-file-buffer (car token))))
(speedbar-find-file-in-frame (car token))
(when (or vhdl-speedbar-jump-to-unit buffer)
- (goto-line (cdr token))
+ (goto-char (point-min))
+ (forward-line (1- (cdr token)))
(recenter))
(vhdl-speedbar-update-current-unit t t)
- (speedbar-set-timer speedbar-update-speed)
+ (speedbar-set-timer dframe-update-speed)
(speedbar-maybee-jump-to-attached-frame))))
(defun vhdl-speedbar-port-copy ()
(let ((token (get-text-property
(match-beginning 3) 'speedbar-token)))
(vhdl-visit-file (car token) t
- (progn (goto-line (cdr token))
+ (progn (goto-char (point-min))
+ (forward-line (1- (cdr token)))
(end-of-line)
(if is-entity
(vhdl-port-copy)
;; insert component declarations
(while ent-alist
(vhdl-visit-file (nth 2 (car ent-alist)) nil
- (progn (goto-line (nth 3 (car ent-alist)))
+ (progn (goto-char (point-min))
+ (forward-line (1- (nth 3 (car ent-alist))))
(end-of-line)
(vhdl-port-copy)))
(goto-char component-pos)
(princ (documentation-property variable 'variable-documentation))
(with-current-buffer standard-output
(help-mode))
- (print-help-return-message)))
+ (help-print-return-message)))
(defun vhdl-doc-mode ()
"Display VHDL Mode documentation in *Help* buffer."
(princ (documentation 'vhdl-mode))
(with-current-buffer standard-output
(help-mode))
- (print-help-return-message)))
+ (help-print-return-message)))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;