diff options
Diffstat (limited to 'lisp/textmodes/page-ext.el')
-rw-r--r-- | lisp/textmodes/page-ext.el | 187 |
1 files changed, 89 insertions, 98 deletions
diff --git a/lisp/textmodes/page-ext.el b/lisp/textmodes/page-ext.el index a9199fffe0d..61341377e4c 100644 --- a/lisp/textmodes/page-ext.el +++ b/lisp/textmodes/page-ext.el @@ -1,4 +1,4 @@ -;;; page-ext.el --- extended page handling commands +;;; page-ext.el --- extended page handling commands -*- lexical-binding:t -*- ;; Copyright (C) 1990-1991, 1993-1994, 2001-2019 Free Software ;; Foundation, Inc. @@ -243,18 +243,15 @@ (defcustom pages-directory-buffer-narrowing-p t "If non-nil, `pages-directory-goto' narrows pages buffer to entry." - :type 'boolean - :group 'pages) + :type 'boolean) (defcustom pages-directory-for-adding-page-narrowing-p t "If non-nil, `add-new-page' narrows page buffer to new entry." - :type 'boolean - :group 'pages) + :type 'boolean) (defcustom pages-directory-for-adding-new-page-before-current-page-p t "If non-nil, `add-new-page' inserts new page before current page." - :type 'boolean - :group 'pages) + :type 'boolean) ;;; Addresses related variables @@ -262,83 +259,86 @@ (defcustom pages-addresses-file-name "~/addresses" "Standard name for file of addresses. Entries separated by page-delimiter. Used by `pages-directory-for-addresses' function." - :type 'file - :group 'pages) + :type 'file) (defcustom pages-directory-for-addresses-goto-narrowing-p t "If non-nil, `pages-directory-goto' narrows addresses buffer to entry." - :type 'boolean - :group 'pages) + :type 'boolean) (defcustom pages-directory-for-addresses-buffer-keep-windows-p t "If nil, `pages-directory-for-addresses' deletes other windows." - :type 'boolean - :group 'pages) + :type 'boolean) (defcustom pages-directory-for-adding-addresses-narrowing-p t "If non-nil, `add-new-page' narrows addresses buffer to new entry." - :type 'boolean - :group 'pages) + :type 'boolean) ;;; Key bindings for page handling functions -(global-unset-key "\C-x\C-p") - -(defvar ctl-x-ctl-p-map (make-sparse-keymap) +(defvar pages--ctl-x-ctl-p-map + (let ((map (make-sparse-keymap))) + (define-key map "\C-n" 'pages-next-page) + (define-key map "\C-p" 'pages-previous-page) + (define-key map "\C-a" 'pages-add-new-page) + (define-key map "\C-m" 'pages-mark-page) + (define-key map "\C-s" 'pages-search) + (define-key map "s" 'pages-sort-buffer) + (define-key map "\C-l" 'pages-set-delimiter) + (define-key map "\C-d" 'pages-directory) + (define-key map "d" 'pages-directory-for-addresses) + map) "Keymap for subcommands of C-x C-p, which are for page handling.") -(define-key ctl-x-map "\C-p" 'ctl-x-ctl-p-prefix) -(fset 'ctl-x-ctl-p-prefix ctl-x-ctl-p-map) - -(define-key ctl-x-ctl-p-map "\C-n" 'next-page) -(define-key ctl-x-ctl-p-map "\C-p" 'previous-page) -(define-key ctl-x-ctl-p-map "\C-a" 'add-new-page) -(define-key ctl-x-ctl-p-map "\C-m" 'mark-page) -(define-key ctl-x-ctl-p-map "\C-s" 'search-pages) -(define-key ctl-x-ctl-p-map "s" 'sort-pages-buffer) -(define-key ctl-x-ctl-p-map "\C-l" 'set-page-delimiter) -(define-key ctl-x-ctl-p-map "\C-d" 'pages-directory) -(define-key ctl-x-ctl-p-map "d" 'pages-directory-for-addresses) +;; FIXME: Merely loading a package shouldn't have this kind of side-effects! +(global-unset-key "\C-x\C-p") +(define-key ctl-x-map "\C-p" 'pages-ctl-x-ctl-p-prefix) +(define-obsolete-function-alias 'ctl-x-ctl-p-prefix 'pages-ctl-x-ctl-p-prefix "27.1") +(defalias 'pages-ctl-x-ctl-p-prefix pages--ctl-x-ctl-p-map) ;;; Page movement function definitions -(defun next-page (&optional count) +(define-obsolete-function-alias 'next-page #'pages-next-page "27.1") +(defun pages-next-page (&optional count) "Move to the next page bounded by the `page-delimiter' variable. With arg (prefix if interactive), move that many pages." (interactive "p") (or count (setq count 1)) (widen) ;; Cannot use forward-page because of problems at page boundaries. - (while (and (> count 0) (not (eobp))) - (if (re-search-forward page-delimiter nil t) - nil - (goto-char (point-max))) - (setq count (1- count))) - ;; If COUNT is negative, we want to go back -COUNT + 1 page boundaries. - ;; The first page boundary we reach is the top of the current page, - ;; which doesn't count. - (while (and (< count 1) (not (bobp))) - (if (re-search-backward page-delimiter nil t) - (goto-char (match-beginning 0)) - (goto-char (point-min))) - (setq count (1+ count))) + (if (>= count 0) + (while (and (> count 0) (not (eobp))) + (if (re-search-forward page-delimiter nil t) + nil + (goto-char (point-max))) + (setq count (1- count))) + ;; If COUNT is negative, we want to go back -COUNT + 1 page boundaries. + ;; The first page boundary we reach is the top of the current page, + ;; which doesn't count. + (while (and (< count 1) (not (bobp))) + (if (re-search-backward page-delimiter nil t) + (when (= count 0) + (goto-char (match-end 0))) + (goto-char (point-min))) + (setq count (1+ count)))) (narrow-to-page) (goto-char (point-min)) (recenter 0)) -(defun previous-page (&optional count) +(define-obsolete-function-alias 'previous-page #'pages-previous-page "27.1") +(defun pages-previous-page (&optional count) "Move to the previous page bounded by the `page-delimiter' variable. With arg (prefix if interactive), move that many pages." (interactive "p") (or count (setq count 1)) - (next-page (- count))) + (pages-next-page (- count))) ;;; Adding and searching pages -(defun add-new-page (header-line) +(define-obsolete-function-alias 'add-new-page #'pages-add-new-page "27.1") +(defun pages-add-new-page (header-line) "Insert new page. Prompt for header line. If point is in the pages directory buffer, insert the new page in the @@ -391,7 +391,8 @@ Point is left in the body of page." (defvar pages-last-search nil "Value of last regexp searched for. Initially, nil.") -(defun search-pages (regexp) +(define-obsolete-function-alias 'search-pages #'pages-search "27.1") +(defun pages-search (regexp) "Search for REGEXP, starting from point, and narrow to page it is in." (interactive (list (read-string @@ -407,17 +408,16 @@ Point is left in the body of page." ;;; Sorting pages -(autoload 'sort-subr "sort" "Primary function for sorting." t nil) - -(defun sort-pages-in-region (reverse beg end) +(define-obsolete-function-alias 'sort-pages-in-region #'pages-sort-region "27.1") +(defun pages-sort-region (reverse beg end) "Sort pages in region alphabetically. Prefix arg means reverse order. Called from a program, there are three arguments: REVERSE (non-nil means reverse order), BEG and END (region to sort)." -;;; This sort function handles ends of pages differently than -;;; `sort-pages' and works better with lists of addresses and similar -;;; files. + ;; This sort function handles ends of pages differently than + ;; `sort-pages' and works better with lists of addresses and similar + ;; files. (interactive "P\nr") (save-restriction @@ -444,7 +444,8 @@ REVERSE (non-nil means reverse order), BEG and END (region to sort)." (goto-char (match-beginning 0)) (goto-char (point-max)))))))) -(defun sort-pages-buffer (&optional reverse) +(define-obsolete-function-alias 'sort-pages-buffer #'sort-pages-buffer "27.1") +(defun pages-sort-buffer (&optional reverse) "Sort pages alphabetically in buffer. Prefix arg means reverse order. \(Non-nil arg if not interactive.)" @@ -453,7 +454,7 @@ REVERSE (non-nil means reverse order), BEG and END (region to sort)." (widen) (let ((beginning (point-min)) (end (point-max))) - (sort-pages-in-region reverse beginning end))) + (pages-sort-region reverse beginning end))) ;;; Pages directory ancillary definitions @@ -463,30 +464,33 @@ REVERSE (non-nil means reverse order), BEG and END (region to sort)." \(This regular expression may be used to select only those pages that contain matches to the regexp.)") -(defvar pages-buffer nil +(defvar-local pages-buffer nil "The buffer for which the pages-directory function creates the directory.") (defvar pages-directory-prefix "*Directory for:" "Prefix of name of temporary buffer for pages-directory.") -(defvar pages-pos-list nil +(defvar-local pages-pos-list nil "List containing the positions of the pages in the pages-buffer.") (defvar pages-target-buffer) +(define-obsolete-variable-alias 'pages-directory-map + 'pages-directory-mode-map "26.1") (defvar pages-directory-mode-map (let ((map (make-sparse-keymap))) (define-key map "\C-c\C-c" 'pages-directory-goto) + (define-key map "\C-m" 'pages-directory-goto) (define-key map "\C-c\C-p\C-a" 'add-new-page) - (define-key map [mouse-2] 'pages-directory-goto-with-mouse) + (define-key map [mouse-2] 'pages-directory-goto) map) "Keymap for the pages-directory-buffer.") -(defvaralias 'pages-directory-map 'pages-directory-mode-map) -(defvar original-page-delimiter "^\f" +(defvar pages-original-delimiter "^\f" "Default page delimiter.") -(defun set-page-delimiter (regexp reset-p) +(define-obsolete-function-alias 'set-page-delimiter #'pages-set-delimiter "27.1") +(defun pages-set-delimiter (regexp reset-p &optional interactively) "Set buffer local value of page-delimiter to REGEXP. Called interactively with a prefix argument, reset `page-delimiter' to its original value. @@ -496,22 +500,22 @@ resets the page-delimiter to the original value." (interactive (if current-prefix-arg - (list original-page-delimiter "^\f") - (list (read-string "Set page-delimiter to regexp: " page-delimiter) - nil))) - (make-local-variable 'original-page-delimiter) - (make-local-variable 'page-delimiter) - (setq original-page-delimiter - (or original-page-delimiter page-delimiter)) - (if (not reset-p) - (setq page-delimiter regexp) - (setq page-delimiter original-page-delimiter)) - (if (called-interactively-p 'interactive) + (list pages-original-delimiter t t) + (list (read-regexp "Set page-delimiter to regexp: " page-delimiter) + nil t))) + (setq-local pages-original-delimiter + (or pages-original-delimiter page-delimiter)) + (setq-local page-delimiter + (if (not reset-p) regexp pages-original-delimiter)) + (if interactively (message "The value of `page-delimiter' is now: %s" page-delimiter))) ;;; Pages directory main definitions +(defvar pages-buffer-original-position) +(defvar pages-buffer-original-page) + (defun pages-directory (pages-list-all-headers-p count-lines-p &optional regexp) "Display a directory of the page headers in a temporary buffer. @@ -573,7 +577,6 @@ directory for only the accessible portion of the buffer." (let ((pages-target-buffer (current-buffer)) (pages-directory-buffer (concat pages-directory-prefix " " (buffer-name))) - (linenum 1) (pages-buffer-original-position (point)) (pages-buffer-original-page 0)) @@ -644,10 +647,6 @@ directory for only the accessible portion of the buffer." 1 pages-buffer-original-page)))) -(defvar pages-buffer-original-position) -(defvar pages-buffer-original-page) -(defvar pages-buffer-original-page) - (defun pages-copy-header-and-position (count-lines-p) "Copy page header and its position to the Pages Directory. Only arg non-nil, count lines in page and insert before header. @@ -701,16 +700,13 @@ Used by `pages-directory' function." Move point to one of the lines in this buffer, then use \\[pages-directory-goto] to go to the same line in the pages buffer." - (make-local-variable 'pages-buffer) - (make-local-variable 'pages-pos-list) - (make-local-variable 'pages-directory-buffer-narrowing-p)) + ) -(defun pages-directory-goto () +(defun pages-directory-goto (&optional event) "Go to the corresponding line in the pages buffer." - -;;; This function is mostly a copy of `occur-mode-goto-occurrence' - - (interactive) + ;; This function is mostly a copy of `occur-mode-goto-occurrence' + (interactive (list last-nonmenu-event)) + (if event (mouse-set-point event)) (if (or (not pages-buffer) (not (buffer-name pages-buffer))) (progn @@ -724,18 +720,13 @@ to the same line in the pages buffer." (narrowing-p pages-directory-buffer-narrowing-p)) (pop-to-buffer pages-buffer) (widen) - (if end-of-directory-p - (goto-char (point-max)) - (goto-char (marker-position pos))) + (goto-char (if end-of-directory-p + (point-max) + (marker-position pos))) (if narrowing-p (narrow-to-page)))) -(defun pages-directory-goto-with-mouse (event) - "Go to the corresponding line under the mouse pointer in the pages buffer." - (interactive "e") - (with-current-buffer (window-buffer (posn-window (event-end event))) - (save-excursion - (goto-char (posn-point (event-end event))) - (pages-directory-goto)))) +(define-obsolete-function-alias 'pages-directory-goto-with-mouse + #'pages-directory-goto "26.1") ;;; The `pages-directory-for-addresses' function and ancillary code @@ -774,8 +765,8 @@ directory." ;; by RJC, 2006 Jun 11: including this causes failure; it results in ;; the message "Buffer in which pages were found is deleted" ;; (pages-directory-address-mode) - (setq pages-directory-buffer-narrowing-p - pages-directory-for-addresses-goto-narrowing-p) + (setq-local pages-directory-buffer-narrowing-p + pages-directory-for-addresses-goto-narrowing-p) (or pages-directory-for-addresses-buffer-keep-windows-p (delete-other-windows)) (save-excursion |