mirror of
git://git.sv.gnu.org/emacs.git
synced 2025-12-06 06:20:55 -08:00
Merge from origin/emacs-28
f232d989fdImprove HTML export of NEWS file397890ba77Delete "etc/NEWS*.html" from .gitignore70ca5f6524; * etc/NEWS: Fix typos.19de241a7dRecommend NonGNU ELPA over MELPAf25f9dbf30Minor doc fixes in picture.el520b041b54* lisp/textmodes/page-ext.el: Improve Commentary. # Conflicts: # etc/NEWS
This commit is contained in:
commit
6e4f6e97bf
6 changed files with 196 additions and 143 deletions
1
.gitignore
vendored
1
.gitignore
vendored
|
|
@ -268,7 +268,6 @@ doc/misc/cc-mode.ss
|
||||||
doc/misc/modus-themes.texi
|
doc/misc/modus-themes.texi
|
||||||
doc/misc/org.texi
|
doc/misc/org.texi
|
||||||
etc/DOC
|
etc/DOC
|
||||||
etc/NEWS*.html
|
|
||||||
etc/refcards/emacsver.tex
|
etc/refcards/emacsver.tex
|
||||||
gnustmp*
|
gnustmp*
|
||||||
/info/
|
/info/
|
||||||
|
|
|
||||||
211
admin/admin.el
211
admin/admin.el
|
|
@ -778,69 +778,13 @@ Optional argument TYPE is type of output (nil means all)."
|
||||||
(if (member type (list nil m))
|
(if (member type (list nil m))
|
||||||
(make-manuals-dist--1 root m))))
|
(make-manuals-dist--1 root m))))
|
||||||
|
|
||||||
(defun make-news-html-file (root version)
|
(defvar admin--org-export-headers-format "\
|
||||||
"Convert the NEWS file into an HTML file."
|
|
||||||
(interactive (let ((root
|
|
||||||
(if noninteractive
|
|
||||||
(or (pop command-line-args-left)
|
|
||||||
default-directory)
|
|
||||||
(read-directory-name "Emacs root directory: "
|
|
||||||
source-directory nil t))))
|
|
||||||
(list root
|
|
||||||
(read-string "Version number: " emacs-version))))
|
|
||||||
(unless (file-exists-p (expand-file-name "src/emacs.c" root))
|
|
||||||
(user-error "%s doesn't seem to be the root of an Emacs source tree" root))
|
|
||||||
(let* ((dir (make-temp-file "emacs-news-file" t))
|
|
||||||
(orig (expand-file-name "etc/NEWS" root))
|
|
||||||
(new (expand-file-name (format "NEWS.%s.org" version) dir))
|
|
||||||
(html-file (format "%s.html" (file-name-base new)))
|
|
||||||
(copyright-years (format-time-string "%Y")))
|
|
||||||
(unwind-protect
|
|
||||||
(progn
|
|
||||||
(copy-file orig new)
|
|
||||||
(find-file new)
|
|
||||||
|
|
||||||
;; Find the copyright range:
|
|
||||||
(goto-char (point-min))
|
|
||||||
(re-search-forward "^Copyright (C) \\([0-9-]+\\) Free Software Foundation, Inc.")
|
|
||||||
(setq copyright-years (match-string 1))
|
|
||||||
|
|
||||||
;; Get rid of some unnecessary stuff:
|
|
||||||
(replace-regexp-in-region "^---$" "" (point-min) (point-max))
|
|
||||||
(replace-regexp-in-region "^\\+\\+\\+$" "" (point-min) (point-max))
|
|
||||||
(dolist (str '("\n"
|
|
||||||
"GNU Emacs NEWS -- history of user-visible changes."
|
|
||||||
"Temporary note:"
|
|
||||||
"+++ indicates that all relevant manuals in doc/ have been updated."
|
|
||||||
"--- means no change in the manuals is needed."
|
|
||||||
"When you add a new item, use the appropriate mark if you are sure it"
|
|
||||||
"applies, and please also update docstrings as needed."
|
|
||||||
"You can narrow news to a specific version by calling 'view-emacs-news'"
|
|
||||||
"with a prefix argument or by typing 'C-u C-h C-n'."))
|
|
||||||
(replace-string-in-region str "" (point-min) (point-max)))
|
|
||||||
|
|
||||||
;; Use Org-mode markers for <code>.
|
|
||||||
(replace-regexp-in-region
|
|
||||||
;; This could probably be improved quite a bit...
|
|
||||||
(rx "'" (group (+ (not (any "'\n")))) "'")
|
|
||||||
"~\\1~" (point-min) (point-max))
|
|
||||||
|
|
||||||
;; Format Emacs Lisp.
|
|
||||||
(while (re-search-forward "^ " nil t)
|
|
||||||
(backward-paragraph)
|
|
||||||
(insert "\n#+begin_src emacs-lisp")
|
|
||||||
(forward-paragraph)
|
|
||||||
(insert "#+end_src\n"))
|
|
||||||
|
|
||||||
;; Insert Org-mode export headers.
|
|
||||||
(goto-char (point-min))
|
|
||||||
(insert (format
|
|
||||||
"\
|
|
||||||
#+title: GNU Emacs %s NEWS -- history of user-visible changes
|
#+title: GNU Emacs %s NEWS -- history of user-visible changes
|
||||||
#+author:
|
#+author:
|
||||||
#+options: author:nil creator:nil toc:1 num:2 *:nil \\n:nil
|
#+options: author:nil creator:nil toc:1 num:2 *:nil \\n:t ^:nil tex:nil
|
||||||
#+language: en
|
#+language: en
|
||||||
#+HTML_LINK_HOME: https://www.gnu.org/software/emacs
|
#+HTML_LINK_HOME: /software/emacs
|
||||||
|
#+HTML_LINK_UP: /software/emacs
|
||||||
#+html_head_extra: <link rel=\"stylesheet\" type=\"text/css\" href=\"/mini.css\" media=\"handheld\" />
|
#+html_head_extra: <link rel=\"stylesheet\" type=\"text/css\" href=\"/mini.css\" media=\"handheld\" />
|
||||||
#+html_head_extra: <link rel=\"stylesheet\" type=\"text/css\" href=\"/layout.min.css\" media=\"screen\" />
|
#+html_head_extra: <link rel=\"stylesheet\" type=\"text/css\" href=\"/layout.min.css\" media=\"screen\" />
|
||||||
#+html_head_extra: <link rel=\"stylesheet\" type=\"text/css\" href=\"/print.min.css\" media=\"print\" />
|
#+html_head_extra: <link rel=\"stylesheet\" type=\"text/css\" href=\"/print.min.css\" media=\"print\" />
|
||||||
|
|
@ -852,12 +796,9 @@ Optional argument TYPE is type of output (nil means all)."
|
||||||
of a GNU] \" width=\"129\" height=\"122\"/>
|
of a GNU] \" width=\"129\" height=\"122\"/>
|
||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
#+END_EXPORT\n\n"
|
#+END_EXPORT\n\n")
|
||||||
version))
|
|
||||||
(org-mode)
|
(defvar admin--org-html-postamble "
|
||||||
(let ((org-html-postamble
|
|
||||||
(format
|
|
||||||
"
|
|
||||||
<p>
|
<p>
|
||||||
Return to the <a href=\"/software/emacs/emacs.html\">GNU Emacs home page</a>.
|
Return to the <a href=\"/software/emacs/emacs.html\">GNU Emacs home page</a>.
|
||||||
</p>
|
</p>
|
||||||
|
|
@ -892,21 +833,129 @@ $Date: %s $
|
||||||
<!-- timestamp end -->
|
<!-- timestamp end -->
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
</div>"
|
</div>")
|
||||||
copyright-years
|
|
||||||
;; e.g. "2022/09/13 09:13:13"
|
(defun admin--require-external-package (pkg)
|
||||||
(format-time-string "%Y/%M/%y %H:%m:%S"))))
|
(package-initialize)
|
||||||
;; Actually export.
|
(require pkg nil t)
|
||||||
(org-html-export-to-html)
|
(unless (featurep pkg)
|
||||||
;; Kill the .org buffer.
|
(when (yes-or-no-p (format "Package \"%s\" is missing. Install now?" pkg))
|
||||||
(kill-buffer (current-buffer))
|
(package-install pkg)
|
||||||
;; Move file into place.
|
(require pkg nil t))))
|
||||||
(let ((old (expand-file-name html-file dir))
|
|
||||||
(new (expand-file-name html-file (expand-file-name "etc" root))))
|
(defvar org-html-postamble)
|
||||||
(delete-file new)
|
(defvar org-html-mathjax-template)
|
||||||
(copy-file old new)
|
(defun make-news-html-file (root version)
|
||||||
(find-file new))))
|
"Convert the NEWS file into an HTML file."
|
||||||
(delete-directory dir t))))
|
(interactive (let ((root
|
||||||
|
(if noninteractive
|
||||||
|
(or (pop command-line-args-left)
|
||||||
|
default-directory)
|
||||||
|
(read-directory-name "Emacs root directory: "
|
||||||
|
source-directory nil t))))
|
||||||
|
(list root
|
||||||
|
(read-string "Major version number: "
|
||||||
|
(number-to-string emacs-major-version)))))
|
||||||
|
(unless (file-exists-p (expand-file-name "src/emacs.c" root))
|
||||||
|
(user-error "%s doesn't seem to be the root of an Emacs source tree" root))
|
||||||
|
(admin--require-external-package 'htmlize)
|
||||||
|
(let* ((orig (expand-file-name "etc/NEWS" root))
|
||||||
|
(new (expand-file-name (format "etc/NEWS.%s.org" version) root))
|
||||||
|
(html-file (format "%s.html" (file-name-base new)))
|
||||||
|
(copyright-years (format-time-string "%Y")))
|
||||||
|
(copy-file orig new t)
|
||||||
|
(find-file new)
|
||||||
|
|
||||||
|
;; Find the copyright range.
|
||||||
|
(goto-char (point-min))
|
||||||
|
(re-search-forward "^Copyright (C) \\([0-9-]+\\) Free Software Foundation, Inc.")
|
||||||
|
(setq copyright-years (match-string 1))
|
||||||
|
|
||||||
|
;; Delete some unnecessary stuff.
|
||||||
|
(replace-regexp-in-region "^---$" "" (point-min) (point-max))
|
||||||
|
(replace-regexp-in-region "^\\+\\+\\+$" "" (point-min) (point-max))
|
||||||
|
(dolist (str '("\n"
|
||||||
|
"GNU Emacs NEWS -- history of user-visible changes."
|
||||||
|
"Temporary note:"
|
||||||
|
"+++ indicates that all relevant manuals in doc/ have been updated."
|
||||||
|
"--- means no change in the manuals is needed."
|
||||||
|
"When you add a new item, use the appropriate mark if you are sure it"
|
||||||
|
"applies, and please also update docstrings as needed."
|
||||||
|
"You can narrow news to a specific version by calling 'view-emacs-news'"
|
||||||
|
"with a prefix argument or by typing 'C-u C-h C-n'."))
|
||||||
|
(replace-string-in-region str "" (point-min) (point-max)))
|
||||||
|
|
||||||
|
;; Escape some characters.
|
||||||
|
(replace-regexp-in-region (rx "$") "@@html:$@@" (point-min) (point-max))
|
||||||
|
|
||||||
|
;; Use Org-mode markers for 'symbols', 'C-x k', etc.
|
||||||
|
(replace-regexp-in-region
|
||||||
|
(rx-let ((key (seq
|
||||||
|
;; Modifier (optional)
|
||||||
|
(? (any "ACHMSs") "-")
|
||||||
|
(or
|
||||||
|
;; single key
|
||||||
|
(not (any " \n"))
|
||||||
|
;; "<return>" and "<remap> <foo>"
|
||||||
|
(seq "<"
|
||||||
|
(+ (any "A-Za-z-"))
|
||||||
|
(+ (seq " " (+ (any "A-Za-z-"))))
|
||||||
|
">")
|
||||||
|
"NUL" "RET" "LFD" "TAB"
|
||||||
|
"ESC" "SPC" "DEL")))
|
||||||
|
(email (seq (+ (not (any " @\n")))
|
||||||
|
"@"
|
||||||
|
(+ (not (any " @\n")))))
|
||||||
|
(lisp-symbol (regexp lisp-mode-symbol-regexp)))
|
||||||
|
(rx "'" (group
|
||||||
|
(or lisp-symbol
|
||||||
|
email
|
||||||
|
(seq "M-x " lisp-symbol)
|
||||||
|
(seq key (+ " " key))))
|
||||||
|
"'"))
|
||||||
|
"~\\1~" (point-min) (point-max))
|
||||||
|
|
||||||
|
;; Format code blocks.
|
||||||
|
(while (re-search-forward "^ " nil t)
|
||||||
|
(let ((elisp-block (looking-at "(")))
|
||||||
|
(backward-paragraph)
|
||||||
|
(insert (if elisp-block
|
||||||
|
"\n#+BEGIN_SRC emacs-lisp"
|
||||||
|
"\n#+BEGIN_EXAMPLE"))
|
||||||
|
(forward-paragraph)
|
||||||
|
(insert (if elisp-block
|
||||||
|
"#+END_SRC\n"
|
||||||
|
"#+END_EXAMPLE\n"))))
|
||||||
|
|
||||||
|
;; Delete buffer local variables.
|
||||||
|
(goto-char (point-max))
|
||||||
|
(when (re-search-backward "Local variables:")
|
||||||
|
(forward-line -1)
|
||||||
|
(delete-region (point) (point-max)))
|
||||||
|
|
||||||
|
;; Insert Org-mode export headers.
|
||||||
|
(goto-char (point-min))
|
||||||
|
(insert (format admin--org-export-headers-format version))
|
||||||
|
(org-mode)
|
||||||
|
(save-buffer)
|
||||||
|
|
||||||
|
;; Make the HTML export.
|
||||||
|
(let* ((org-html-postamble
|
||||||
|
(format admin--org-html-postamble
|
||||||
|
copyright-years
|
||||||
|
;; e.g. "2022/09/13 09:13:13"
|
||||||
|
(format-time-string "%Y/%M/%y %H:%m:%S")))
|
||||||
|
(org-html-mathjax-template "")
|
||||||
|
(htmlize-output-type 'css))
|
||||||
|
(org-html-export-as-html))
|
||||||
|
|
||||||
|
;; Write HTML to file.
|
||||||
|
(let ((new (expand-file-name html-file (expand-file-name "etc" root))))
|
||||||
|
(write-file new)
|
||||||
|
(unless noninteractive
|
||||||
|
(find-file new)
|
||||||
|
(html-mode))
|
||||||
|
(message "Successfully exported HTML to %s" new))))
|
||||||
|
|
||||||
|
|
||||||
;; Stuff to check new `defcustom's got :version tags.
|
;; Stuff to check new `defcustom's got :version tags.
|
||||||
|
|
|
||||||
|
|
@ -11042,7 +11042,7 @@ a major LaTeX mode like AUCTeX in order to speed-up insertion of
|
||||||
environments and math templates. Inside Org mode, you can make use of
|
environments and math templates. Inside Org mode, you can make use of
|
||||||
some of the features of CDLaTeX mode. You need to install
|
some of the features of CDLaTeX mode. You need to install
|
||||||
=cdlatex.el= and =texmathp.el= (the latter comes also with AUCTeX)
|
=cdlatex.el= and =texmathp.el= (the latter comes also with AUCTeX)
|
||||||
using [[https://melpa.org/][MELPA]] with the [[https://www.gnu.org/software/emacs/manual/html_node/emacs/Package-Installation.html][Emacs packaging system]] or alternatively from
|
from [[https://elpa.nongnu.org/][NonGNU ELPA]] with the [[https://www.gnu.org/software/emacs/manual/html_node/emacs/Package-Installation.html][Emacs packaging system]] or alternatively from
|
||||||
[[https://staff.fnwi.uva.nl/c.dominik/Tools/cdlatex/]]. Do not use
|
[[https://staff.fnwi.uva.nl/c.dominik/Tools/cdlatex/]]. Do not use
|
||||||
CDLaTeX mode itself under Org mode, but use the special version Org
|
CDLaTeX mode itself under Org mode, but use the special version Org
|
||||||
CDLaTeX minor mode that comes as part of Org. Turn it on for the
|
CDLaTeX minor mode that comes as part of Org. Turn it on for the
|
||||||
|
|
@ -22024,7 +22024,7 @@ a deadline string. See ~org-agenda-entry-types~ on how to set what
|
||||||
planning information is taken into account.
|
planning information is taken into account.
|
||||||
|
|
||||||
[fn:104] For HTML you need to install Hrvoje Nikšić's =htmlize.el=
|
[fn:104] For HTML you need to install Hrvoje Nikšić's =htmlize.el=
|
||||||
as an Emacs package from MELPA or from [[https://github.com/hniksic/emacs-htmlize][Hrvoje Nikšić's repository]].
|
as an Emacs package from [[https://elpa.nongnu.org/][NonGNU ELPA]] or from [[https://github.com/hniksic/emacs-htmlize][Hrvoje Nikšić's repository]].
|
||||||
|
|
||||||
[fn:105] To create PDF output, the Ghostscript ps2pdf utility must be
|
[fn:105] To create PDF output, the Ghostscript ps2pdf utility must be
|
||||||
installed on the system. Selecting a PDF file also creates the
|
installed on the system. Selecting a PDF file also creates the
|
||||||
|
|
|
||||||
|
|
@ -386,7 +386,7 @@ the current buffer and the text "GNU Emacs" instead of the value of
|
||||||
your init file:
|
your init file:
|
||||||
|
|
||||||
(setq frame-title-format '(multiple-frames "%b"
|
(setq frame-title-format '(multiple-frames "%b"
|
||||||
("" invocation-name "@" system-name)))
|
("" invocation-name "@" system-name)))
|
||||||
|
|
||||||
*** New frame parameter 'drag-with-tab-line'.
|
*** New frame parameter 'drag-with-tab-line'.
|
||||||
This parameter, similar to 'drag-with-header-line', allows moving frames
|
This parameter, similar to 'drag-with-header-line', allows moving frames
|
||||||
|
|
@ -3958,7 +3958,6 @@ and enable the MS-Windows native Input Method Editor (IME) at run
|
||||||
time. A companion function 'w32-get-ime-open-status' returns the
|
time. A companion function 'w32-get-ime-open-status' returns the
|
||||||
current IME activation status.
|
current IME activation status.
|
||||||
|
|
||||||
--
|
|
||||||
** On macOS, 's-<left>' and 's-<right>' are now bound to
|
** On macOS, 's-<left>' and 's-<right>' are now bound to
|
||||||
'move-beginning-of-line' and 'move-end-of-line' respectively. The commands
|
'move-beginning-of-line' and 'move-end-of-line' respectively. The commands
|
||||||
to select previous/next frame are still bound to 's-~' and 's-`'.
|
to select previous/next frame are still bound to 's-~' and 's-`'.
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,6 @@
|
||||||
;;; page-ext.el --- extended page handling commands -*- lexical-binding:t -*-
|
;;; page-ext.el --- extended page handling commands -*- lexical-binding:t -*-
|
||||||
|
|
||||||
;; Copyright (C) 1990-1991, 1993-1994, 2001-2022 Free Software
|
;; Copyright (C) 1990-2022 Free Software Foundation, Inc.
|
||||||
;; Foundation, Inc.
|
|
||||||
|
|
||||||
;; Author: Robert J. Chassell <bob@gnu.org>
|
;; Author: Robert J. Chassell <bob@gnu.org>
|
||||||
;; (according to ack.texi)
|
;; (according to ack.texi)
|
||||||
|
|
@ -25,20 +24,20 @@
|
||||||
;;; Commentary:
|
;;; Commentary:
|
||||||
|
|
||||||
;; You may use these commands to handle an address list or other
|
;; You may use these commands to handle an address list or other
|
||||||
;; small data base.
|
;; small database.
|
||||||
|
|
||||||
|
|
||||||
;;; Summary
|
;;; Summary
|
||||||
|
|
||||||
;; The current page commands are:
|
;; The current page commands are:
|
||||||
|
|
||||||
;; forward-page C-x ]
|
;; `forward-page' C-x ]
|
||||||
;; backward-page C-x [
|
;; `backward-page' C-x [
|
||||||
;; narrow-to-page C-x p
|
;; `narrow-to-page' C-x p
|
||||||
;; count-lines-page C-x l
|
;; `count-lines-page' C-x l
|
||||||
;; mark-page C-x C-p (change this to C-x C-p C-m)
|
;; `mark-page' C-x C-p (change this to C-x C-p C-m)
|
||||||
;; sort-pages not bound
|
;; `sort-pages' not bound
|
||||||
;; what-page not bound
|
;; `what-page' not bound
|
||||||
|
|
||||||
;; The new page handling commands all use `C-x C-p' as a prefix. This
|
;; The new page handling commands all use `C-x C-p' as a prefix. This
|
||||||
;; means that the key binding for `mark-page' must be changed.
|
;; means that the key binding for `mark-page' must be changed.
|
||||||
|
|
@ -47,15 +46,15 @@
|
||||||
|
|
||||||
;; New page handling commands:
|
;; New page handling commands:
|
||||||
|
|
||||||
;; pages-next-page C-x C-p C-n
|
;; `pages-next-page' C-x C-p C-n
|
||||||
;; pages-previous-page C-x C-p C-p
|
;; `pages-previous-page' C-x C-p C-p
|
||||||
;; pages-search C-x C-p C-s
|
;; `pages-search' C-x C-p C-s
|
||||||
;; pages-add-new-page C-x C-p C-a
|
;; `pages-add-new-page' C-x C-p C-a
|
||||||
;; pages-sort-buffer C-x C-p s
|
;; `pages-sort-buffer' C-x C-p s
|
||||||
;; pages-set-delimiter C-x C-p C-l
|
;; `pages-set-delimiter' C-x C-p C-l
|
||||||
;; pages-directory C-x C-p C-d
|
;; `pages-directory' C-x C-p C-d
|
||||||
;; pages-directory-for-addresses C-x C-p d
|
;; `pages-directory-for-addresses' C-x C-p d
|
||||||
;; pages-directory-goto C-c C-c
|
;; `pages-directory-goto' C-c C-c
|
||||||
|
|
||||||
|
|
||||||
;;; Using the page commands
|
;;; Using the page commands
|
||||||
|
|
@ -103,8 +102,8 @@
|
||||||
;;
|
;;
|
||||||
;; 2. The first line of text in each entry is the `heading line'; it
|
;; 2. The first line of text in each entry is the `heading line'; it
|
||||||
;; will appear in the pages-directory-buffer which is constructed
|
;; will appear in the pages-directory-buffer which is constructed
|
||||||
;; using the `C-x C-p C-d' (pages-directory) command or the `C-x
|
;; using the `C-x C-p C-d' (`pages-directory') command or the
|
||||||
;; C-p d' (pages-directory-for-addresses) command.
|
;; `C-x C-p d' (`pages-directory-for-addresses') command.
|
||||||
;;
|
;;
|
||||||
;; The heading line may be on the same line as the page-delimiter
|
;; The heading line may be on the same line as the page-delimiter
|
||||||
;; or it may follow after. It is the first non-blank line on the
|
;; or it may follow after. It is the first non-blank line on the
|
||||||
|
|
@ -163,17 +162,18 @@
|
||||||
;; `pages-previous-page', `pages-add-new-page', `mark-page', and `pages-search'
|
;; `pages-previous-page', `pages-add-new-page', `mark-page', and `pages-search'
|
||||||
;; commands.
|
;; commands.
|
||||||
|
|
||||||
;; You may use either the `C-x C-p d' (pages-directory-for-addresses)
|
;; You may use either the `C-x C-p d' (`pages-directory-for-addresses')
|
||||||
;; or the `C-x C-p C-d' (pages-directory) command to construct and
|
;; or the `C-x C-p C-d' (`pages-directory') command to construct and
|
||||||
;; display a directory of all the heading lines.
|
;; display a directory of all the heading lines.
|
||||||
|
|
||||||
;; In the directory, you may position the cursor over a heading line
|
;; In the directory, you may position the cursor over a heading line
|
||||||
;; and type `C-c C-c' (pages-directory-goto) to go to the entry to
|
;; and type `C-c C-c' (`pages-directory-goto') to go to the entry to
|
||||||
;; which it refers in the pages buffer.
|
;; which it refers in the pages buffer.
|
||||||
|
|
||||||
;; You can type `C-c C-p C-a' (pages-add-new-page) to add a new entry in the
|
;; You can type `C-c C-p C-a' (`pages-add-new-page') to add a new
|
||||||
;; pages buffer or address file. This is the same command you use to
|
;; entry in the pages buffer or address file. This is the same
|
||||||
;; add a new entry when you are in the pages buffer or address file.
|
;; command you use to add a new entry when you are in the pages buffer
|
||||||
|
;; or address file.
|
||||||
|
|
||||||
;; If you wish, you may create several different directories,
|
;; If you wish, you may create several different directories,
|
||||||
;; one for each different buffer.
|
;; one for each different buffer.
|
||||||
|
|
|
||||||
|
|
@ -23,9 +23,9 @@
|
||||||
|
|
||||||
;;; Commentary:
|
;;; Commentary:
|
||||||
|
|
||||||
;; This code provides the picture-mode commands documented in the Emacs
|
;; This code provides the `picture-mode' commands documented in the Emacs
|
||||||
;; manual. The screen is treated as a semi-infinite quarter-plane with
|
;; manual. The screen is treated as a semi-infinite quarter-plane with
|
||||||
;; support for rectangle operations and `etch-a-sketch' character
|
;; support for rectangle operations and "etch-a-sketch" character
|
||||||
;; insertion in any of eight directions.
|
;; insertion in any of eight directions.
|
||||||
|
|
||||||
;;; Code:
|
;;; Code:
|
||||||
|
|
@ -96,7 +96,7 @@ If scan reaches end of buffer, stop there without error."
|
||||||
|
|
||||||
(defun picture-forward-column (arg &optional interactive)
|
(defun picture-forward-column (arg &optional interactive)
|
||||||
"Move cursor right, making whitespace if necessary.
|
"Move cursor right, making whitespace if necessary.
|
||||||
With argument, move that many columns."
|
With prefix argument ARG, move that many columns."
|
||||||
(interactive "^p\nd")
|
(interactive "^p\nd")
|
||||||
(let (deactivate-mark)
|
(let (deactivate-mark)
|
||||||
(picture-update-desired-column interactive)
|
(picture-update-desired-column interactive)
|
||||||
|
|
@ -110,14 +110,14 @@ With argument, move that many columns."
|
||||||
|
|
||||||
(defun picture-backward-column (arg &optional interactive)
|
(defun picture-backward-column (arg &optional interactive)
|
||||||
"Move cursor left, making whitespace if necessary.
|
"Move cursor left, making whitespace if necessary.
|
||||||
With argument, move that many columns."
|
With prefix argument ARG, move that many columns."
|
||||||
(interactive "^p\nd")
|
(interactive "^p\nd")
|
||||||
(picture-update-desired-column interactive)
|
(picture-update-desired-column interactive)
|
||||||
(picture-forward-column (- arg)))
|
(picture-forward-column (- arg)))
|
||||||
|
|
||||||
(defun picture-move-down (arg)
|
(defun picture-move-down (arg)
|
||||||
"Move vertically down, making whitespace if necessary.
|
"Move vertically down, making whitespace if necessary.
|
||||||
With argument, move that many lines."
|
With prefix argument ARG, move that many lines."
|
||||||
(interactive "^p")
|
(interactive "^p")
|
||||||
(let (deactivate-mark)
|
(let (deactivate-mark)
|
||||||
(picture-update-desired-column nil)
|
(picture-update-desired-column nil)
|
||||||
|
|
@ -134,7 +134,7 @@ With argument, move that many lines."
|
||||||
|
|
||||||
(defun picture-move-up (arg)
|
(defun picture-move-up (arg)
|
||||||
"Move vertically up, making whitespace if necessary.
|
"Move vertically up, making whitespace if necessary.
|
||||||
With argument, move that many lines."
|
With prefix argument ARG, move that many lines."
|
||||||
(interactive "^p")
|
(interactive "^p")
|
||||||
(picture-update-desired-column nil)
|
(picture-update-desired-column nil)
|
||||||
(picture-move-down (- arg)))
|
(picture-move-down (- arg)))
|
||||||
|
|
@ -161,36 +161,36 @@ With argument, move that many lines."
|
||||||
|
|
||||||
(defun picture-movement-nw (&optional arg)
|
(defun picture-movement-nw (&optional arg)
|
||||||
"Move up and left after self-inserting character in Picture mode.
|
"Move up and left after self-inserting character in Picture mode.
|
||||||
With prefix argument, move up and two-column left."
|
With prefix argument ARG, move up and two-column left."
|
||||||
(interactive "P")
|
(interactive "P")
|
||||||
(picture-set-motion -1 (if arg -2 -1)))
|
(picture-set-motion -1 (if arg -2 -1)))
|
||||||
|
|
||||||
(defun picture-movement-ne (&optional arg)
|
(defun picture-movement-ne (&optional arg)
|
||||||
"Move up and right after self-inserting character in Picture mode.
|
"Move up and right after self-inserting character in Picture mode.
|
||||||
With prefix argument, move up and two-column right."
|
With prefix argument ARG, move up and two-column right."
|
||||||
(interactive "P")
|
(interactive "P")
|
||||||
(picture-set-motion -1 (if arg 2 1)))
|
(picture-set-motion -1 (if arg 2 1)))
|
||||||
|
|
||||||
(defun picture-movement-sw (&optional arg)
|
(defun picture-movement-sw (&optional arg)
|
||||||
"Move down and left after self-inserting character in Picture mode.
|
"Move down and left after self-inserting character in Picture mode.
|
||||||
With prefix argument, move down and two-column left."
|
With prefix argument ARG, move down and two-column left."
|
||||||
(interactive "P")
|
(interactive "P")
|
||||||
(picture-set-motion 1 (if arg -2 -1)))
|
(picture-set-motion 1 (if arg -2 -1)))
|
||||||
|
|
||||||
(defun picture-movement-se (&optional arg)
|
(defun picture-movement-se (&optional arg)
|
||||||
"Move down and right after self-inserting character in Picture mode.
|
"Move down and right after self-inserting character in Picture mode.
|
||||||
With prefix argument, move down and two-column right."
|
With prefix argument ARG, move down and two-column right."
|
||||||
(interactive "P")
|
(interactive "P")
|
||||||
(picture-set-motion 1 (if arg 2 1)))
|
(picture-set-motion 1 (if arg 2 1)))
|
||||||
|
|
||||||
(defun picture-set-motion (vert horiz)
|
(defun picture-set-motion (vertical horizontal)
|
||||||
"Set VERTICAL and HORIZONTAL increments for movement in Picture mode.
|
"Set VERTICAL and HORIZONTAL increments for movement in Picture mode.
|
||||||
The mode line is updated to reflect the current direction."
|
The mode line is updated to reflect the current direction."
|
||||||
(setq picture-vertical-step vert
|
(setq picture-vertical-step vertical
|
||||||
picture-horizontal-step horiz)
|
picture-horizontal-step horizontal)
|
||||||
(setq mode-name
|
(setq mode-name
|
||||||
(format "Picture:%s"
|
(format "Picture:%s"
|
||||||
(nth (+ 2 (% horiz 3) (* 5 (1+ (% vert 2))))
|
(nth (+ 2 (% horizontal 3) (* 5 (1+ (% vertical 2))))
|
||||||
'(wnw nw up ne ene Left left none right Right
|
'(wnw nw up ne ene Left left none right Right
|
||||||
wsw sw down se ese))))
|
wsw sw down se ese))))
|
||||||
(force-mode-line-update)
|
(force-mode-line-update)
|
||||||
|
|
@ -305,9 +305,9 @@ Use \"\\[command-apropos] picture-movement\" to see those commands."
|
||||||
|
|
||||||
(defun picture-clear-line (arg)
|
(defun picture-clear-line (arg)
|
||||||
"Clear out rest of line; if at end of line, advance to next line.
|
"Clear out rest of line; if at end of line, advance to next line.
|
||||||
Cleared-out line text goes into the kill ring, as do newlines that are
|
Cleared-out line text goes into the kill ring, as do newlines
|
||||||
advanced over. With argument, clear out (and save in kill ring) that
|
that are advanced over. With prefix argument ARG, clear out (and
|
||||||
many lines."
|
save in kill ring) that many lines."
|
||||||
(interactive "P")
|
(interactive "P")
|
||||||
(if arg
|
(if arg
|
||||||
(progn
|
(progn
|
||||||
|
|
@ -320,7 +320,8 @@ many lines."
|
||||||
|
|
||||||
(defun picture-newline (arg)
|
(defun picture-newline (arg)
|
||||||
"Move to the beginning of the following line.
|
"Move to the beginning of the following line.
|
||||||
With argument, moves that many lines (up, if negative argument);
|
With prefix argument ARG, move that many lines (up, if negative
|
||||||
|
argument);
|
||||||
always moves to the beginning of a line."
|
always moves to the beginning of a line."
|
||||||
(interactive "^p")
|
(interactive "^p")
|
||||||
(let ((start (point))
|
(let ((start (point))
|
||||||
|
|
@ -466,8 +467,11 @@ If no such character is found, move to beginning of line."
|
||||||
|
|
||||||
(defun picture-tab (&optional arg)
|
(defun picture-tab (&optional arg)
|
||||||
"Tab transparently (just move point) to next tab stop.
|
"Tab transparently (just move point) to next tab stop.
|
||||||
With prefix arg, overwrite the traversed text with spaces. The tab stop
|
With prefix argument ARG, overwrite the traversed text with
|
||||||
list can be changed by \\[picture-set-tab-stops] and \\[edit-tab-stops].
|
spaces. The tab stop list can be changed by \
|
||||||
|
\\<picture-mode-map>\\[picture-set-tab-stops] and
|
||||||
|
\\[edit-tab-stops].
|
||||||
|
|
||||||
See also documentation for variable `picture-tab-chars'."
|
See also documentation for variable `picture-tab-chars'."
|
||||||
(interactive "^P")
|
(interactive "^P")
|
||||||
(let* ((opoint (point)))
|
(let* ((opoint (point)))
|
||||||
|
|
@ -515,10 +519,11 @@ Interactively, reads the register using `register-read-with-preview'."
|
||||||
|
|
||||||
(defun picture-yank-rectangle (&optional insertp)
|
(defun picture-yank-rectangle (&optional insertp)
|
||||||
"Overlay rectangle saved by \\[picture-clear-rectangle].
|
"Overlay rectangle saved by \\[picture-clear-rectangle].
|
||||||
The rectangle is positioned with upper left corner at point, overwriting
|
The rectangle is positioned with upper left corner at point,
|
||||||
existing text. With prefix argument, the rectangle is inserted instead,
|
overwriting existing text. With prefix argument INSERTP, the
|
||||||
shifting existing text. Leaves mark at one corner of rectangle and
|
rectangle is inserted instead, shifting existing text. Leave
|
||||||
point at the other (diagonally opposed) corner."
|
mark at one corner of rectangle and point at the
|
||||||
|
other (diagonally opposed) corner."
|
||||||
(interactive "P")
|
(interactive "P")
|
||||||
(if (not (consp picture-killed-rectangle))
|
(if (not (consp picture-killed-rectangle))
|
||||||
(error "No rectangle saved")
|
(error "No rectangle saved")
|
||||||
|
|
@ -536,10 +541,11 @@ regardless of where you click."
|
||||||
|
|
||||||
(defun picture-yank-rectangle-from-register (register &optional insertp)
|
(defun picture-yank-rectangle-from-register (register &optional insertp)
|
||||||
"Overlay rectangle saved in REGISTER.
|
"Overlay rectangle saved in REGISTER.
|
||||||
The rectangle is positioned with upper left corner at point, overwriting
|
The rectangle is positioned with upper left corner at point,
|
||||||
existing text. With prefix argument, the rectangle is
|
overwriting existing text. With prefix argument INSERTP, the
|
||||||
inserted instead, shifting existing text. Leaves mark at one corner
|
rectangle is inserted instead, shifting existing text. Leave
|
||||||
of rectangle and point at the other (diagonally opposed) corner.
|
mark at one corner of rectangle and point at the
|
||||||
|
other (diagonally opposed) corner.
|
||||||
|
|
||||||
Interactively, reads the register using `register-read-with-preview'."
|
Interactively, reads the register using `register-read-with-preview'."
|
||||||
(interactive (list (register-read-with-preview "Rectangle from register: ")
|
(interactive (list (register-read-with-preview "Rectangle from register: ")
|
||||||
|
|
@ -552,7 +558,7 @@ Interactively, reads the register using `register-read-with-preview'."
|
||||||
(defun picture-insert-rectangle (rectangle &optional insertp)
|
(defun picture-insert-rectangle (rectangle &optional insertp)
|
||||||
"Overlay RECTANGLE with upper left corner at point.
|
"Overlay RECTANGLE with upper left corner at point.
|
||||||
Optional argument INSERTP, if non-nil causes RECTANGLE to be inserted.
|
Optional argument INSERTP, if non-nil causes RECTANGLE to be inserted.
|
||||||
Leaves the region surrounding the rectangle."
|
Leave the region surrounding the rectangle."
|
||||||
(let ((indent-tabs-mode nil))
|
(let ((indent-tabs-mode nil))
|
||||||
(if (not insertp)
|
(if (not insertp)
|
||||||
(save-excursion
|
(save-excursion
|
||||||
|
|
@ -570,7 +576,7 @@ Leaves the region surrounding the rectangle."
|
||||||
(if (= (current-column) 0) 1 0)))
|
(if (= (current-column) 0) 1 0)))
|
||||||
|
|
||||||
(defun picture-draw-rectangle (start end)
|
(defun picture-draw-rectangle (start end)
|
||||||
"Draw a rectangle around region."
|
"Draw a rectangle around region from START to END."
|
||||||
(interactive "*r") ; start will be less than end
|
(interactive "*r") ; start will be less than end
|
||||||
(let* ((sl (picture-current-line))
|
(let* ((sl (picture-current-line))
|
||||||
(sc (current-column))
|
(sc (current-column))
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue