X-Git-Url: https://code.delx.au/gnu-emacs/blobdiff_plain/49f70d46ea38ceb7a501594db7f6ea35e19681aa..8a9ba4d67bfb3b9cf96cff2917fec1fa7a168724:/lisp/forms.el diff --git a/lisp/forms.el b/lisp/forms.el index b0ccb3f431..aa57a667ae 100644 --- a/lisp/forms.el +++ b/lisp/forms.el @@ -1,7 +1,7 @@ ;;; forms.el --- Forms mode: edit a file as a form to fill in -;; Copyright (C) 1991, 1994, 1995, 1996, 1997, 2001, 2002, 2003, -;; 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012 Free Software Foundation, Inc. +;; Copyright (C) 1991, 1994-1997, 2001-2015 Free Software Foundation, +;; Inc. ;; Author: Johan Vromans @@ -22,7 +22,7 @@ ;;; Commentary: -;; Visit a file using a form. See forms-d2.el for examples. +;; Visit a file using a form. See etc/forms for examples. ;; ;; === Naming conventions ;; @@ -297,9 +297,6 @@ ;;; Global variables and constants: -(provide 'forms) ;;; official -(provide 'forms-mode) ;;; for compatibility - (defcustom forms-mode-hook nil "Hook run upon entering Forms mode." :group 'forms @@ -439,8 +436,11 @@ Also, initial position is at last record." (defvar forms--rw-face nil "Face used to represent read-write data on the screen.") +(defvar read-file-filter) ; bound in forms--intuit-from-file + ;;;###autoload (defun forms-mode (&optional primary) + ;; FIXME: use define-derived-mode "Major mode to visit files in a field-structured manner using a form. Commands: Equivalent keys in read-only mode: @@ -582,7 +582,7 @@ Commands: Equivalent keys in read-only mode: (error (concat "Forms control file error: " "`forms-modified-record-filter' is not a function"))) - ;; The filters acces the contents of the forms using `forms-fields'. + ;; The filters access the contents of the forms using `forms-fields'. (make-local-variable 'forms-fields) ;; Dynamic text support. @@ -635,6 +635,8 @@ Commands: Equivalent keys in read-only mode: (setq major-mode 'forms-mode) (setq mode-name "Forms") + (cursor-intangible-mode 1) + ;; find the data file (setq forms--file-buffer (find-file-noselect forms-file)) @@ -645,7 +647,7 @@ Commands: Equivalent keys in read-only mode: (with-current-buffer forms--file-buffer (let ((inhibit-read-only t) (file-modified (buffer-modified-p))) - (run-hooks 'read-file-filter) + (mapc #'funcall read-file-filter) (if (not file-modified) (set-buffer-modified-p nil))) (if write-file-filter (add-hook 'write-file-functions write-file-filter nil t))) @@ -670,7 +672,7 @@ Commands: Equivalent keys in read-only mode: ;;(message "forms: proceeding setup...") - ;; Since we aren't really implementing a minor mode, we hack the modeline + ;; Since we aren't really implementing a minor mode, we hack the mode line ;; directly to get the text " View " into forms-read-only form buffers. For ;; that reason, this variable must be buffer only. (make-local-variable 'minor-mode-alist) @@ -710,7 +712,7 @@ Commands: Equivalent keys in read-only mode: (forms-first-record)) ) - ;; user customising + ;; user customizing ;;(message "forms: proceeding setup (user hooks)...") (run-mode-hooks 'forms-mode-hook 'forms-mode-hooks) ;;(message "forms: setting up... done.") @@ -846,7 +848,7 @@ Commands: Equivalent keys in read-only mode: (defvar forms--iif-properties nil "Original properties of the character being overridden.") -(defun forms--iif-hook (begin end) +(defun forms--iif-hook (_begin _end) "`insert-in-front-hooks' function for read-only segments." ;; Note start location. By making it a marker that points one @@ -913,20 +915,20 @@ Commands: Equivalent keys in read-only mode: `(lambda (arg) (let ((inhibit-read-only t)) ,@(apply 'append - (mapcar 'forms--make-format-elt-using-text-properties + (mapcar #'forms--make-format-elt-using-text-properties forms-format-list)) ;; Prevent insertion before the first text. ,@(if (numberp (car forms-format-list)) nil '((add-text-properties (point-min) (1+ (point-min)) - '(front-sticky (read-only intangible))))) + '(front-sticky (read-only cursor-intangible))))) ;; Prevent insertion after the last text. (remove-text-properties (1- (point)) (point) '(rear-nonsticky))) (setq forms--iif-start nil)) `(lambda (arg) ,@(apply 'append - (mapcar 'forms--make-format-elt forms-format-list))))) + (mapcar #'forms--make-format-elt forms-format-list))))) ;; We have tallied the number of markers and dynamic texts, ;; so we can allocate the arrays now. @@ -1003,10 +1005,10 @@ Commands: Equivalent keys in read-only mode: (point)) (list 'face forms--ro-face ; read-only appearance 'read-only ,@(list (1+ forms--marker)) - 'intangible ,@(list (1+ forms--marker)) + 'cursor-intangible ,@(list (1+ forms--marker)) 'insert-in-front-hooks '(forms--iif-hook) 'rear-nonsticky '(face read-only insert-in-front-hooks - intangible))))) + cursor-intangible))))) ((numberp el) `((let ((here (point))) @@ -1032,10 +1034,10 @@ Commands: Equivalent keys in read-only mode: (point)) (list 'face forms--ro-face 'read-only ,@(list (1+ forms--marker)) - 'intangible ,@(list (1+ forms--marker)) + 'cursor-intangible ,@(list (1+ forms--marker)) 'insert-in-front-hooks '(forms--iif-hook) 'rear-nonsticky '(read-only face insert-in-front-hooks - intangible))))) + cursor-intangible))))) ;; end of cond )) @@ -1098,7 +1100,7 @@ Commands: Equivalent keys in read-only mode: (goto-char (point-min)) ,@(apply 'append (mapcar - 'forms--make-parser-elt + #'forms--make-parser-elt (append forms-format-list (list nil))))))))) (forms--debug 'forms--parser)) @@ -1294,7 +1296,7 @@ Commands: Equivalent keys in read-only mode: ) (defun forms--mode-menu-ro (map) -;;; Menu initialisation +;;; Menu initialization ; (define-key map [menu-bar] (make-sparse-keymap)) (define-key map [menu-bar forms] (cons "Forms" (make-sparse-keymap "Forms"))) @@ -1340,7 +1342,7 @@ Commands: Equivalent keys in read-only mode: (put 'forms-delete-record 'menu-enable '(not forms-read-only)) ) (defun forms--mode-menu-edit (map) -;;; Menu initialisation +;;; Menu initialization ; (define-key map [menu-bar] (make-sparse-keymap)) (define-key map [menu-bar forms] (cons "Forms" (make-sparse-keymap "Forms"))) @@ -1407,7 +1409,9 @@ Commands: Equivalent keys in read-only mode: (if forms-forms-scroll (progn (local-set-key [remap scroll-up] 'forms-next-record) - (local-set-key [remap scroll-down] 'forms-prev-record))) + (local-set-key [remap scroll-down] 'forms-prev-record) + (local-set-key [remap scroll-up-command] 'forms-next-record) + (local-set-key [remap scroll-down-command] 'forms-prev-record))) ;; ;; beginning-of-buffer -> forms-first-record ;; end-of-buffer -> forms-end-record @@ -1565,10 +1569,10 @@ As a side effect: sets `forms--the-record-list'." ;; Build new record. (setq forms--the-record-list (forms--parse-form)) (setq the-record - (mapconcat 'identity forms--the-record-list forms-field-sep)) + (mapconcat #'identity forms--the-record-list forms-field-sep)) - (if (string-match (regexp-quote forms-field-sep) - (mapconcat 'identity forms--the-record-list "")) + (if (string-match-p (regexp-quote forms-field-sep) + (mapconcat #'identity forms--the-record-list "")) (error "Field separator occurs in record - update refused")) ;; Handle multi-line fields, if allowed. @@ -1576,7 +1580,7 @@ As a side effect: sets `forms--the-record-list'." (forms--trans the-record "\n" forms-multi-line)) ;; A final sanity check before updating. - (if (string-match "\n" the-record) + (if (string-match-p "\n" the-record) (error "Multi-line fields in this record - update refused")) (with-current-buffer forms--file-buffer @@ -1775,11 +1779,7 @@ after the current record." (setq the-list (cdr (append the-fields nil)))) (setq the-list (make-list forms-number-of-fields ""))) - (setq the-record - (mapconcat - 'identity - the-list - forms-field-sep)) + (setq the-record (mapconcat #'identity the-list forms-field-sep)) (with-current-buffer forms--file-buffer (forms--goto-record ln) @@ -1918,7 +1918,7 @@ after writing out the data." (forms-jump-record cur)) t) -(defun forms--revert-buffer (&optional arg noconfirm) +(defun forms--revert-buffer (&optional _arg noconfirm) "Reverts current form to un-modified." (interactive "P") (if (or noconfirm @@ -2027,8 +2027,10 @@ Usage: (setq forms-number-of-fields ;;; Debugging -(defvar forms--debug nil - "*Enables forms-mode debugging if not nil.") +(defcustom forms--debug nil + "If non-nil, enable Forms mode debugging." + :type 'boolean + :group 'forms) (defun forms--debug (&rest args) "Internal debugging routine." @@ -2053,5 +2055,6 @@ Usage: (setq forms-number-of-fields (goto-char (point-max)) (insert ret))))) -;; arch-tag: 4a6695c7-d47a-4a21-809b-5cec7f8ec7a1 +(provide 'forms-mode) ; for compatibility +(provide 'forms) ;;; forms.el ends here