commit 612a65d90cc98c5f4a1e849629ddc2a7bb0fbd67 (HEAD, refs/remotes/origin/master) Author: Martin Rudalics Date: Wed Mar 6 10:20:48 2019 +0100 In unwind_with_echo_area_buffer use set_marker_restricted_both * src/xdisp.c (unwind_with_echo_area_buffer): Use set_marker_restricted_both instead of set_marker_both to avoid spurious assertion failures. diff --git a/src/xdisp.c b/src/xdisp.c index ffab1ded4a..6ceb5c9e51 100644 --- a/src/xdisp.c +++ b/src/xdisp.c @@ -11035,15 +11035,15 @@ unwind_with_echo_area_buffer (Lisp_Object vector) buffer = AREF (vector, 4); wset_buffer (w, buffer); - set_marker_both (w->pointm, buffer, - XFIXNAT (AREF (vector, 5)), - XFIXNAT (AREF (vector, 6))); - set_marker_both (w->old_pointm, buffer, - XFIXNAT (AREF (vector, 7)), - XFIXNAT (AREF (vector, 8))); - set_marker_both (w->start, buffer, - XFIXNAT (AREF (vector, 9)), - XFIXNAT (AREF (vector, 10))); + set_marker_restricted_both (w->pointm, buffer, + XFIXNAT (AREF (vector, 5)), + XFIXNAT (AREF (vector, 6))); + set_marker_restricted_both (w->old_pointm, buffer, + XFIXNAT (AREF (vector, 7)), + XFIXNAT (AREF (vector, 8))); + set_marker_restricted_both (w->start, buffer, + XFIXNAT (AREF (vector, 9)), + XFIXNAT (AREF (vector, 10))); } Vwith_echo_area_save_vector = vector; commit b079cfa8461ba890285268962715eef07a10eae3 Author: Martin Rudalics Date: Wed Mar 6 10:11:08 2019 +0100 Fix handling of 'window-combination-resize' with fixed-size windows * lisp/window.el (window-combinations): New optional argument IGNORE-FIXED. (window--combination-resizable): New function. (split-window): Fix handling of 'window-combination-resize' in the presence of fixed-size windows. diff --git a/lisp/window.el b/lisp/window.el index 9566429627..98cdf98cda 100644 --- a/lisp/window.el +++ b/lisp/window.el @@ -509,11 +509,14 @@ child if WINDOW is a horizontal combination." (window-left-child window) (window-top-child window))) -(defun window-combinations (window &optional horizontal) +(defun window-combinations (window &optional horizontal ignore-fixed) "Return largest number of windows vertically arranged within WINDOW. WINDOW must be a valid window and defaults to the selected one. If HORIZONTAL is non-nil, return the largest number of -windows horizontally arranged within WINDOW." +windows horizontally arranged within WINDOW. + +Optional argument IGNORE-FIXED, if non-nil, means to ignore +fixed-size windows in the calculation." (setq window (window-normalize-window window)) (cond ((window-live-p window) @@ -527,9 +530,10 @@ windows horizontally arranged within WINDOW." (let ((child (window-child window)) (count 0)) (while child - (setq count - (+ (window-combinations child horizontal) - count)) + (unless (and ignore-fixed (window-size-fixed-p child horizontal)) + (setq count + (+ (window-combinations child horizontal ignore-fixed) + count))) (setq child (window-right child))) count)) (t @@ -538,9 +542,10 @@ windows horizontally arranged within WINDOW." (let ((child (window-child window)) (count 1)) (while child - (setq count - (max (window-combinations child horizontal) - count)) + (unless (and ignore-fixed (window-size-fixed-p child horizontal)) + (setq count + (max (window-combinations child horizontal ignore-fixed) + count))) (setq child (window-right child))) count)))) @@ -4905,6 +4910,24 @@ showing BUFFER-OR-NAME." ;; If a window doesn't show BUFFER, unrecord BUFFER in it. (unrecord-window-buffer window buffer))))) +(defun window--combination-resizable (parent &optional horizontal) + "Return number of pixels recoverable from height of window PARENT. +PARENT must be a vertical (horizontal if HORIZONTAL is non-nil) +window combination. The return value is the sum of the pixel +heights of all non-fixed height child windows of PARENT divided +by their number plus 1. If HORIZONTAL is non-nil, return the sum +of the pixel widths of all non-fixed width child windows of +PARENT divided by their number plus 1." + (let ((sibling (window-child parent)) + (number 0) + (size 0)) + (while sibling + (unless (window-size-fixed-p sibling horizontal) + (setq number (1+ number)) + (setq size (+ (window-size sibling horizontal t) size))) + (setq sibling (window-next-sibling sibling))) + (/ size (1+ number)))) + (defun split-window (&optional window size side pixelwise) "Make a new window adjacent to WINDOW. WINDOW must be a valid window and defaults to the selected one. @@ -5042,8 +5065,7 @@ frame. The selected window is not changed by this function." ;; average size of a window in its combination. (max (min (- parent-pixel-size (window-min-size parent horizontal nil t)) - (/ parent-pixel-size - (1+ (window-combinations parent horizontal)))) + (window--combination-resizable parent horizontal)) (window-min-pixel-size)) ;; Else try to give the new window half the size ;; of WINDOW (plus an eventual odd pixel). @@ -5128,7 +5150,7 @@ frame. The selected window is not changed by this function." (pixel-size (/ (float new-pixel-size) (if new-parent old-pixel-size parent-pixel-size))) (new-parent 0.5) - (resize (/ 1.0 (1+ (window-combinations parent horizontal)))) + (resize (/ 1.0 (1+ (window-combinations parent horizontal t)))) (t (/ (window-normal-size window horizontal) 2.0)))) (if resize commit a425b4230d85e40ba196f7b673d0a36c1bf033f3 Author: Martin Rudalics Date: Wed Mar 6 09:18:27 2019 +0100 Fix initialization of Vwindow_state_change_functions * src/window.c (Vwindow_state_change_functions): Initialize the right variable. diff --git a/src/window.c b/src/window.c index 642c77ba56..8543cbf5ae 100644 --- a/src/window.c +++ b/src/window.c @@ -8135,7 +8135,7 @@ at least one window on that frame has been added, deleted, changed its buffer or its total or body size or the frame has been (de-)selected or its selected window has changed since the last redisplay. In this case the frame is passed as argument. */); - Vwindow_selection_change_functions = Qnil; + Vwindow_state_change_functions = Qnil; DEFVAR_LISP ("window-configuration-change-hook", Vwindow_configuration_change_hook, doc: /* Functions called during redisplay when window configuration has changed. commit 3470d8a285c9fd641687e85a912db4ae0f285e79 Author: Glenn Morris Date: Tue Mar 5 22:37:21 2019 -0800 ; * etc/CALC-NEWS: Update header for 2015/11 maintainer change. diff --git a/etc/CALC-NEWS b/etc/CALC-NEWS index 07167c9566..d00f136f91 100644 --- a/etc/CALC-NEWS +++ b/etc/CALC-NEWS @@ -10,18 +10,9 @@ Originally written by: San Jose CA 95134 daveg@synaptics.com, uunet!synaptx!daveg -Currently maintained by: +Calc was maintained for many years by: Jay Belanger -I am anxious to hear about your experiences using Calc. Send mail to -"jay.p.belanger@gmail.com". A bug report is most useful if you include the -exact input and output that occurred, any modes in effect (such as the -current precision), and so on. If you find Calc is difficult to operate -in any way, or if you have other suggestions, don't hesitate to let me -know. If you find errors (including simple typos) in the manual, let me -know. Even if you find no bugs at all I would love to hear your opinions. - - Summary of changes to "Calc" ------- -- ------- -- ---- commit 1a231f202628fb9f092258ed1e3ad90364a07e02 Author: Glenn Morris Date: Tue Mar 5 22:27:35 2019 -0800 * doc/misc/gnus-coding.texi: Remove no longer relevant sections. ; The whole remaining file is probably no longer relevant. ; It's just some basic info from 15 years ago. diff --git a/doc/misc/gnus-coding.texi b/doc/misc/gnus-coding.texi index f3e96a0cb6..6affea4872 100644 --- a/doc/misc/gnus-coding.texi +++ b/doc/misc/gnus-coding.texi @@ -227,153 +227,6 @@ ends (probably @file{nnml.el}, @file{nnfolder.el} and @c requires nnheader. -@section Compatibility - -No Gnus and Gnus 5.10.10 and up should work on: -@itemize @bullet -@item -Emacs 21.1 and up. -@item -XEmacs 21.4 and up. -@end itemize - -Gnus 5.10.8 and below should work on: -@itemize @bullet -@item -Emacs 20.7 and up. -@item -XEmacs 21.1 and up. -@end itemize - -@node Gnus Maintenance Guide -@chapter Gnus Maintenance Guide - -@section Stable and development versions - -The development of Gnus normally is done on the Git repository trunk -as of April 19, 2010 (formerly it was done in CVS; the repository is -at http://git.gnus.org), i.e., there are no separate branches to -develop and test new features. Most of the time, the trunk is -developed quite actively with more or less daily changes. Only after -a new major release, e.g., 5.10.1, there's usually a feature period of -several months. After the release of Gnus 5.10.6 the development of -new features started again on the trunk while the 5.10 series is -continued on the stable branch (v5-10) from which more stable releases -will be done when needed (5.10.8, @dots{}). @ref{Gnus Development, -,Gnus Development, gnus, The Gnus Newsreader} - -Stable releases of Gnus finally become part of Emacs. E.g., Gnus 5.8 -became a part of Emacs 21 (relabeled to Gnus 5.9). The 5.10 series -became part of Emacs 22 as Gnus 5.11. - -@section Syncing - -@c Some MIDs related to this follow. Use http://thread.gmane.org/MID -@c (and click on the subject) to get the thread on Gmane. - -@c Some quotes from Miles Bader follow... - -@c -@c - -In the past, the inclusion of Gnus into Emacs was quite cumbersome. For -each change made to Gnus in Emacs repository, it had to be checked that -it was applied to the new Gnus version, too. Else, bug fixes done in -Emacs repository might have been lost. - -With the inclusion of Gnus 5.10, Miles Bader has set up an Emacs-Gnus -gateway to ensure the bug fixes from Emacs CVS are propagated to Gnus -CVS semi-automatically. - -After Emacs moved to bzr and Gnus moved to git, Katsumi Yamaoka has -taken over the chore of keeping Emacs and Gnus in sync. In general, -changes made to one repository will usually be replicated in the other -within a few days. - -Basically the idea is that the gateway will cause all common files in -Emacs and Gnus v5-13 to be identical except when there's a very good -reason (e.g., the Gnus version string in Emacs says @samp{5.11}, but -the v5-13 version string remains @samp{5.13.x}). Furthermore, all -changes in these files in either Emacs or the v5-13 branch will be -installed into the Gnus git trunk, again except where there's a good -reason. - -@c (typically so far the only exception has been that the changes -@c already exist in the trunk in modified form). -Because of this, when the next major version of Gnus will be included in -Emacs, it should be very easy---just plonk in the files from the Gnus -trunk without worrying about lost changes from the Emacs tree. - -The effect of this is that as hacker, you should generally only have to -make changes in one place: - -@itemize -@item -If it's a file which is thought of as being outside of Gnus (e.g., the -new @file{encrypt.el}), you should probably make the change in the Emacs -tree, and it will show up in the Gnus tree a few days later. - -If you don't have Emacs repository access (or it's inconvenient), you -can change such a file in the v5-10 branch, and it should propagate to -the Emacs repository---however, it will get some extra scrutiny (by -Miles) to see if the changes are possibly controversial and need -discussion on the mailing list. Many changes are obvious bug-fixes -however, so often there won't be any problem. - -@item -If it's to a Gnus file, and it's important enough that it should be part -of Emacs and the v5-10 branch, then you can make the change on the v5-10 -branch, and it will go into Emacs and the Gnus git trunk (a few days -later). The most prominent examples for such changes are bug-fixed -including improvements on the documentation. - -If you know that there will be conflicts (perhaps because the affected -source code is different in v5-10 and the Gnus git trunk), then you can -install your change in both places, and when I try to sync them, there -will be a conflict---however, since in most such cases there would be a -conflict @emph{anyway}, it's often easier for me to resolve it simply if -I see two @samp{identical} changes, and can just choose the proper one, -rather than having to actually fix the code. - -@item -For general Gnus development changes, of course you just make the -change on the Gnus Git trunk and it goes into Emacs a few years -later... :-) - -@end itemize - -Of course in any case, if you just can't wait for me to sync your -change, you can commit it in more than one place and probably there will -be no problem; usually the changes are textually identical anyway, so -can be easily resolved automatically (sometimes I notice silly things in -such multiple commits, like whitespace differences, and unify those ;-). - - -@c I do Emacs->Gnus less often (than Gnus->Emacs) because it tends to -@c require more manual work. - -@c By default I sync about once a week. I also try to follow any Gnus -@c threads on the mailing lists and make sure any changes being discussed -@c are kept more up-to-date (so say 1-2 days delay for "topical" changes). - -@c - -@c BTW, just to add even more verbose explanation about the syncing thing: - -@section Miscellanea - -@heading Conventions for version information in defcustoms - -For new customizable variables introduced in Oort Gnus (including the -v5-10 branch) use @code{:version "22.1" ;; Oort Gnus} (including the -comment) or, e.g., @code{:version "22.2" ;; Gnus 5.10.10} if the feature -was added for Emacs 22.2 and Gnus 5.10.10. -@c -If the variable is new in No Gnus use @code{:version "23.1" ;; No Gnus}. - -The same applies for customizable variables when its default value was -changed. - @node GNU Free Documentation License @appendix GNU Free Documentation License @include doclicense.texi commit 940e6c28721321ce597afd7b4f023faead78d8ea Author: Glenn Morris Date: Tue Mar 5 22:22:12 2019 -0800 * doc/misc/gnus.texi (New Features): Refer to NEWS for newer items. diff --git a/doc/misc/gnus.texi b/doc/misc/gnus.texi index 790f3f0b36..272c8356c2 100644 --- a/doc/misc/gnus.texi +++ b/doc/misc/gnus.texi @@ -27216,6 +27216,8 @@ actually are people who are using Gnus. Who'd'a thunk it! * Ma Gnus:: Celebrating 25 years of Gnus. @end menu +For summaries of more recent changes, see the normal Emacs @file{NEWS} files. + These lists are, of course, just @emph{short} overviews of the @emph{most} important new features. No, really. There are tons more. Yes, we have feeping creaturism in full effect. commit 1cb1371c6dbb7f34bfe6b6c284f74406c47ae3d1 Author: Glenn Morris Date: Tue Mar 5 22:19:29 2019 -0800 Remove doc/misc/gnus-news.texi * doc/misc/gnus.texi (No Gnus): Merge in gnus-news.texi. * doc/misc/gnus-news.texi: Remove. diff --git a/doc/misc/gnus-news.texi b/doc/misc/gnus-news.texi deleted file mode 100644 index 707c6dd410..0000000000 --- a/doc/misc/gnus-news.texi +++ /dev/null @@ -1,370 +0,0 @@ -@c -*-texinfo-*- - -@c Copyright (C) 2004-2019 Free Software Foundation, Inc. - -@c Permission is granted to anyone to make or distribute verbatim copies -@c of this document as received, in any medium, provided that the -@c copyright notice and this permission notice are preserved, -@c thus giving the recipient permission to redistribute in turn. - -@c Permission is granted to distribute modified versions -@c of this document, or of portions of it, -@c under the above conditions, provided also that they -@c carry prominent notices stating who last changed them. - -@c This file contains a list of news features Gnus. It is supposed to be -@c included in 'gnus.texi'. - -@itemize @bullet - -@item Supported Emacs versions -The following Emacs versions are supported by No Gnus: -@itemize @bullet - -@item Emacs 22 and up -@item XEmacs 21.4 -@item XEmacs 21.5 -@item SXEmacs - -@end itemize - -@item Installation changes - -@itemize @bullet -@item Upgrading from previous (stable) version if you have used No Gnus. - -If you have tried No Gnus (the unstable Gnus branch leading to this -release) but went back to a stable version, be careful when upgrading -to this version. In particular, you will probably want to remove the -@file{~/News/marks} directory (perhaps selectively), so that flags are -read from your @file{~/.newsrc.eld} instead of from the stale marks -file, where this release will store flags for nntp. See a later entry -for more information about nntp marks. Note that downgrading isn't -safe in general. - -@item Incompatibility when switching from Emacs 23 to Emacs 22 -In Emacs 23, Gnus uses Emacs's new internal coding system @code{utf-8-emacs} -for saving articles drafts and @file{~/.newsrc.eld}. These files may not -be read correctly in Emacs 22 and below. If you want to use Gnus across -different Emacs versions, you may set @code{mm-auto-save-coding-system} -to @code{emacs-mule}. -@c FIXME: Untested. (Or did anyone test it?) -@c Cf. http://thread.gmane.org/gmane.emacs.gnus.general/66251/focus=66344 - -@item Lisp files are now installed in @file{.../site-lisp/gnus/} by default. -It defaulted to @file{.../site-lisp/} formerly. In addition to this, -the new installer issues a warning if other Gnus installations which -will shadow the latest one are detected. You can then remove those -shadows manually or remove them using @code{make -remove-installed-shadows}. - -@item The installation directory's name is allowed to have spaces and/or tabs. -@end itemize - -@item New packages and libraries within Gnus - -@itemize @bullet - -@item New version of @code{nnimap} - -@code{nnimap} has been reimplemented in a mostly-compatible way. See -the Gnus manual for a description of the new interface. In -particular, @code{nnimap-inbox} and the client side split method has -changed. - -@item Gnus includes the Emacs Lisp @acronym{SASL} library. - -This provides a clean @acronym{API} to @acronym{SASL} mechanisms from -within Emacs. The user visible aspects of this, compared to the earlier -situation, include support for @acronym{DIGEST}-@acronym{MD5} and -@acronym{NTLM}. @xref{Top, ,Emacs SASL, sasl, Emacs SASL}. - -@item ManageSieve connections uses the @acronym{SASL} library by default. - -The primary change this brings is support for @acronym{DIGEST-MD5} and -@acronym{NTLM}, when the server supports it. - -@item Gnus includes a password cache mechanism in password.el. - -It is enabled by default (see @code{password-cache}), with a short -timeout of 16 seconds (see @code{password-cache-expiry}). If -@acronym{PGG} is used as the @acronym{PGP} back end, the @acronym{PGP} -passphrase is managed by this mechanism. Passwords for ManageSieve -connections are managed by this mechanism, after querying the user -about whether to do so. - -@item Using EasyPG with Gnus -When EasyPG, is available, Gnus will use it instead of @acronym{PGG}. -EasyPG is an Emacs user interface to GNU Privacy Guard. @xref{Top, -,EasyPG Assistant user's manual, epa, EasyPG Assistant user's manual}. -EasyPG is included in Emacs 23 and available separately as well. -@end itemize - -@item Changes in group mode -@c ************************ - -@itemize @bullet - -@item -Symbols like @code{gcc-self} now have the same precedence rules in -@code{gnus-parameters} as other ``real'' variables: The last match -wins instead of the first match. - -@item -Old intermediate incoming mail files (@file{Incoming*}) are deleted -after a couple of days, not immediately. @xref{Mail Source -Customization}. -(New in Gnus 5.10.10 / No Gnus 0.8) -@c This entry is also present in the node "Oort Gnus". - -@end itemize - -@item Changes in summary and article mode - -@itemize @bullet - -@item There's now only one variable that determines how @acronym{HTML} -is rendered: @code{mm-text-html-renderer}. - -@item Gnus now supports sticky article buffers. Those are article buffers -that are not reused when you select another article. @xref{Sticky -Articles}. - -@c @item Bookmarks -@c FIXME: To be added - -@item Gnus can selectively display @samp{text/html} articles -with a WWW browser with @kbd{K H}. @xref{MIME Commands}. - -@c gnus-registry-marks -@c FIXME: To be added - -@item International host names (@acronym{IDNA}) can now be decoded -inside article bodies using @kbd{W i} -(@code{gnus-summary-idna-message}). This requires that GNU Libidn -(@url{https://www.gnu.org/software/libidn/}) has been installed. -@c FIXME: Also mention @code{message-use-idna}? - -@item The non-@acronym{ASCII} group names handling has been much -improved. The back ends that fully support non-@acronym{ASCII} group -names are now @code{nntp}, @code{nnml}, and @code{nnrss}. Also the -agent, the cache, and the marks features work with those back ends. -@xref{Non-ASCII Group Names}. - -@item Gnus now displays @acronym{DNS} master files sent as text/dns -using dns-mode. - -@item Gnus supports new limiting commands in the Summary buffer: -@kbd{/ r} (@code{gnus-summary-limit-to-replied}) and @kbd{/ R} -(@code{gnus-summary-limit-to-recipient}). @xref{Limiting}. - -@item You can now fetch all ticked articles from the server using -@kbd{Y t} (@code{gnus-summary-insert-ticked-articles}). @xref{Summary -Generation Commands}. - -@item Gnus supports a new sort command in the Summary buffer: -@kbd{C-c C-s C-t} (@code{gnus-summary-sort-by-recipient}). @xref{Summary -Sorting}. - -@item @acronym{S/MIME} now features @acronym{LDAP} user certificate searches. -You need to configure the server in @code{smime-ldap-host-list}. - -@item URLs inside Open@acronym{PGP} headers are retrieved and imported -to your PGP key ring when you click on them. - -@item -Picons can be displayed right from the textual address, see -@code{gnus-picon-style}. @xref{Picons}. - -@item @acronym{ANSI} @acronym{SGR} control sequences can be transformed -using @kbd{W A}. - -@acronym{ANSI} sequences are used in some Chinese hierarchies for -highlighting articles (@code{gnus-article-treat-ansi-sequences}). - -@item Gnus now MIME decodes articles even when they lack "MIME-Version" header. -This changes the default of @code{gnus-article-loose-mime}. - -@item @code{gnus-decay-scores} can be a regexp matching score files. -For example, set it to @samp{\\.ADAPT\\'} and only adaptive score files -will be decayed. @xref{Score Decays}. - -@item Strings prefixing to the @code{To} and @code{Newsgroup} headers in -summary lines when using @code{gnus-ignored-from-addresses} can be -customized with @code{gnus-summary-to-prefix} and -@code{gnus-summary-newsgroup-prefix}. @xref{To From Newsgroups}. - -@item You can replace @acronym{MIME} parts with external bodies. -See @code{gnus-mime-replace-part} and @code{gnus-article-replace-part}. -@xref{MIME Commands}, @ref{Using MIME}. - -@item -The option @code{mm-fill-flowed} can be used to disable treatment of -format=flowed messages. Also, flowed text is disabled when sending -inline @acronym{PGP} signed messages. @xref{Flowed text, ,Flowed text, -emacs-mime, The Emacs MIME Manual}. (New in Gnus 5.10.7) -@c This entry is also present in the node "Oort Gnus". - -@item Now the new command @kbd{S W} -(@code{gnus-article-wide-reply-with-original}) for a wide reply in the -article buffer yanks a text that is in the active region, if it is set, -as well as the @kbd{R} (@code{gnus-article-reply-with-original}) command. -Note that the @kbd{R} command in the article buffer no longer accepts a -prefix argument, which was used to make it do a wide reply. -@xref{Article Keymap}. - -@item The new command @kbd{C-h b} -(@code{gnus-article-describe-bindings}) used in the article buffer now -shows not only the article commands but also the real summary commands -that are accessible from the article buffer. - -@end itemize - -@item Changes in Message mode - -@itemize @bullet -@item Gnus now defaults to saving all outgoing messages in per-month -nnfolder archives. - -@item Gnus now supports the ``hashcash'' client puzzle anti-spam mechanism. -Use @code{(setq message-generate-hashcash t)} to enable. -@xref{Hashcash}. - -@item You can now drag and drop attachments to the Message buffer. -See @code{mml-dnd-protocol-alist} and @code{mml-dnd-attach-options}. -@xref{MIME, ,MIME, message, Message Manual}. - -@item The option @code{message-yank-empty-prefix} now controls how -empty lines are prefixed in cited text. @xref{Insertion Variables, -,Insertion Variables, message, Message Manual}. - -@item Gnus uses narrowing to hide headers in Message buffers. -The @code{References} header is hidden by default. To make all -headers visible, use @code{(setq message-hidden-headers nil)}. -@xref{Message Headers, ,Message Headers, message, Message Manual}. - -@item You can highlight different levels of citations like in the -article buffer. See @code{gnus-message-highlight-citation}. - -@item @code{auto-fill-mode} is enabled by default in Message mode. -See @code{message-fill-column}. @xref{Various Message Variables, , -Message Headers, message, Message Manual}. - -@item You can now store signature files in a special directory -named @code{message-signature-directory}. - -@item The option @code{message-citation-line-format} controls the format -of the "Whomever writes:" line. You need to set -@code{message-citation-line-function} to -@code{message-insert-formatted-citation-line} as well. -@end itemize - -@item Changes in Browse Server mode - -@itemize @bullet -@item Gnus' sophisticated subscription methods are now available in -Browse Server buffers as well using the variable -@code{gnus-browse-subscribe-newsgroup-method}. - -@end itemize - - -@item Changes in back ends - -@itemize @bullet -@item The nntp back end stores article marks in @file{~/News/marks}. - -The directory can be changed using the (customizable) variable -@code{nntp-marks-directory}, and marks can be disabled using the -(back end) variable @code{nntp-marks-is-evil}. The advantage of this -is that you can copy @file{~/News/marks} (using rsync, scp or -whatever) to another Gnus installation, and it will realize what -articles you have read and marked. The data in @file{~/News/marks} -has priority over the same data in @file{~/.newsrc.eld}. - -@item -You can import and export your @acronym{RSS} subscriptions from -@acronym{OPML} files. @xref{RSS}. - -@item @acronym{IMAP} identity (@acronym{RFC} 2971) is supported. - -By default, Gnus does not send any information about itself, but you can -customize it using the variable @code{nnimap-id}. - -@item The @code{nnrss} back end now supports multilingual text. -Non-@acronym{ASCII} group names for the @code{nnrss} groups are also -supported. @xref{RSS}. - -@item Retrieving mail with @acronym{POP3} is supported over @acronym{SSL}/@acronym{TLS} and with StartTLS. - -@item The nnml back end allows other compression programs beside @file{gzip} -for compressed message files. @xref{Mail Spool}. - -@item The nnml back end supports group compaction. - -This feature, accessible via the functions -@code{gnus-group-compact-group} (@kbd{G z} in the group buffer) and -@code{gnus-server-compact-server} (@kbd{z} in the server buffer) -renumbers all articles in a group, starting from 1 and removing gaps. -As a consequence, you get a correct total article count (until -messages are deleted again). - -@c @item nnmairix.el -@c FIXME - -@c @item nnir.el -@c FIXME - -@end itemize - -@item Appearance -@c Maybe it's not worth to separate this from "Miscellaneous"? - -@itemize @bullet - -@item The tool bar has been updated to use GNOME icons. -You can also customize the tool bars: @kbd{M-x customize-apropos @key{RET} --tool-bar$} should get you started. (Only for Emacs, not in XEmacs.) -@c FIXME: Document this in the manual - -@item The tool bar icons are now (de)activated correctly -in the group buffer, see the variable @code{gnus-group-update-tool-bar}. -Its default value depends on your Emacs version. -@c FIXME: Document this in the manual - -@item You can change the location of XEmacs's toolbars in Gnus buffers. -See @code{gnus-use-toolbar} and @code{message-use-toolbar}. - -@end itemize - -@item Miscellaneous changes - -@itemize @bullet -@item Having edited the select-method for the foreign server in the -server buffer is immediately reflected to the subscription of the groups -which use the server in question. For instance, if you change -@code{nntp-via-address} into @samp{bar.example.com} from -@samp{foo.example.com}, Gnus will connect to the news host by way of the -intermediate host @samp{bar.example.com} from next time. - -@item The @file{all.SCORE} file can be edited from the group buffer -using @kbd{W e}. - -@item You can set @code{gnus-mark-copied-or-moved-articles-as-expirable} -to a non-@code{nil} value so that articles that have been read may be -marked as expirable automatically when copying or moving them to a group -that has auto-expire turned on. The default is @code{nil} and copying -and moving of articles behave as before; i.e., the expirable marks will -be unchanged except that the marks will be removed when copying or -moving articles to a group that has not turned auto-expire on. -@xref{Expiring Mail}. - -@item NoCeM support has been removed. - -@item Carpal mode has been removed. - -@end itemize - -@end itemize - -@c gnus-news.texi ends here. diff --git a/doc/misc/gnus.texi b/doc/misc/gnus.texi index 73b12149e6..790f3f0b36 100644 --- a/doc/misc/gnus.texi +++ b/doc/misc/gnus.texi @@ -28586,7 +28586,358 @@ A new command which starts Gnus offline in slave mode. New features in No Gnus: @c FIXME: Gnus 5.12? -@include gnus-news.texi +@itemize @bullet + +@item Supported Emacs versions +The following Emacs versions are supported by No Gnus: +@itemize @bullet + +@item Emacs 22 and up +@item XEmacs 21.4 +@item XEmacs 21.5 +@item SXEmacs + +@end itemize + +@item Installation changes + +@itemize @bullet +@item Upgrading from previous (stable) version if you have used No Gnus. + +If you have tried No Gnus (the unstable Gnus branch leading to this +release) but went back to a stable version, be careful when upgrading +to this version. In particular, you will probably want to remove the +@file{~/News/marks} directory (perhaps selectively), so that flags are +read from your @file{~/.newsrc.eld} instead of from the stale marks +file, where this release will store flags for nntp. See a later entry +for more information about nntp marks. Note that downgrading isn't +safe in general. + +@item Incompatibility when switching from Emacs 23 to Emacs 22 +In Emacs 23, Gnus uses Emacs's new internal coding system @code{utf-8-emacs} +for saving articles drafts and @file{~/.newsrc.eld}. These files may not +be read correctly in Emacs 22 and below. If you want to use Gnus across +different Emacs versions, you may set @code{mm-auto-save-coding-system} +to @code{emacs-mule}. +@c FIXME: Untested. (Or did anyone test it?) +@c Cf. http://thread.gmane.org/gmane.emacs.gnus.general/66251/focus=66344 + +@item Lisp files are now installed in @file{.../site-lisp/gnus/} by default. +It defaulted to @file{.../site-lisp/} formerly. In addition to this, +the new installer issues a warning if other Gnus installations which +will shadow the latest one are detected. You can then remove those +shadows manually or remove them using @code{make +remove-installed-shadows}. + +@item The installation directory's name is allowed to have spaces and/or tabs. +@end itemize + +@item New packages and libraries within Gnus + +@itemize @bullet + +@item New version of @code{nnimap} + +@code{nnimap} has been reimplemented in a mostly-compatible way. See +the Gnus manual for a description of the new interface. In +particular, @code{nnimap-inbox} and the client side split method has +changed. + +@item Gnus includes the Emacs Lisp @acronym{SASL} library. + +This provides a clean @acronym{API} to @acronym{SASL} mechanisms from +within Emacs. The user visible aspects of this, compared to the earlier +situation, include support for @acronym{DIGEST}-@acronym{MD5} and +@acronym{NTLM}. @xref{Top, ,Emacs SASL, sasl, Emacs SASL}. + +@item ManageSieve connections uses the @acronym{SASL} library by default. + +The primary change this brings is support for @acronym{DIGEST-MD5} and +@acronym{NTLM}, when the server supports it. + +@item Gnus includes a password cache mechanism in password.el. + +It is enabled by default (see @code{password-cache}), with a short +timeout of 16 seconds (see @code{password-cache-expiry}). If +@acronym{PGG} is used as the @acronym{PGP} back end, the @acronym{PGP} +passphrase is managed by this mechanism. Passwords for ManageSieve +connections are managed by this mechanism, after querying the user +about whether to do so. + +@item Using EasyPG with Gnus +When EasyPG, is available, Gnus will use it instead of @acronym{PGG}. +EasyPG is an Emacs user interface to GNU Privacy Guard. @xref{Top, +,EasyPG Assistant user's manual, epa, EasyPG Assistant user's manual}. +EasyPG is included in Emacs 23 and available separately as well. +@end itemize + +@item Changes in group mode +@c ************************ + +@itemize @bullet + +@item +Symbols like @code{gcc-self} now have the same precedence rules in +@code{gnus-parameters} as other ``real'' variables: The last match +wins instead of the first match. + +@item +Old intermediate incoming mail files (@file{Incoming*}) are deleted +after a couple of days, not immediately. @xref{Mail Source +Customization}. +(New in Gnus 5.10.10 / No Gnus 0.8) +@c This entry is also present in the node "Oort Gnus". + +@end itemize + +@item Changes in summary and article mode + +@itemize @bullet + +@item There's now only one variable that determines how @acronym{HTML} +is rendered: @code{mm-text-html-renderer}. + +@item Gnus now supports sticky article buffers. Those are article buffers +that are not reused when you select another article. @xref{Sticky +Articles}. + +@c @item Bookmarks +@c FIXME: To be added + +@item Gnus can selectively display @samp{text/html} articles +with a WWW browser with @kbd{K H}. @xref{MIME Commands}. + +@c gnus-registry-marks +@c FIXME: To be added + +@item International host names (@acronym{IDNA}) can now be decoded +inside article bodies using @kbd{W i} +(@code{gnus-summary-idna-message}). This requires that GNU Libidn +(@url{https://www.gnu.org/software/libidn/}) has been installed. +@c FIXME: Also mention @code{message-use-idna}? + +@item The non-@acronym{ASCII} group names handling has been much +improved. The back ends that fully support non-@acronym{ASCII} group +names are now @code{nntp}, @code{nnml}, and @code{nnrss}. Also the +agent, the cache, and the marks features work with those back ends. +@xref{Non-ASCII Group Names}. + +@item Gnus now displays @acronym{DNS} master files sent as text/dns +using dns-mode. + +@item Gnus supports new limiting commands in the Summary buffer: +@kbd{/ r} (@code{gnus-summary-limit-to-replied}) and @kbd{/ R} +(@code{gnus-summary-limit-to-recipient}). @xref{Limiting}. + +@item You can now fetch all ticked articles from the server using +@kbd{Y t} (@code{gnus-summary-insert-ticked-articles}). @xref{Summary +Generation Commands}. + +@item Gnus supports a new sort command in the Summary buffer: +@kbd{C-c C-s C-t} (@code{gnus-summary-sort-by-recipient}). @xref{Summary +Sorting}. + +@item @acronym{S/MIME} now features @acronym{LDAP} user certificate searches. +You need to configure the server in @code{smime-ldap-host-list}. + +@item URLs inside Open@acronym{PGP} headers are retrieved and imported +to your PGP key ring when you click on them. + +@item +Picons can be displayed right from the textual address, see +@code{gnus-picon-style}. @xref{Picons}. + +@item @acronym{ANSI} @acronym{SGR} control sequences can be transformed +using @kbd{W A}. + +@acronym{ANSI} sequences are used in some Chinese hierarchies for +highlighting articles (@code{gnus-article-treat-ansi-sequences}). + +@item Gnus now MIME decodes articles even when they lack "MIME-Version" header. +This changes the default of @code{gnus-article-loose-mime}. + +@item @code{gnus-decay-scores} can be a regexp matching score files. +For example, set it to @samp{\\.ADAPT\\'} and only adaptive score files +will be decayed. @xref{Score Decays}. + +@item Strings prefixing to the @code{To} and @code{Newsgroup} headers in +summary lines when using @code{gnus-ignored-from-addresses} can be +customized with @code{gnus-summary-to-prefix} and +@code{gnus-summary-newsgroup-prefix}. @xref{To From Newsgroups}. + +@item You can replace @acronym{MIME} parts with external bodies. +See @code{gnus-mime-replace-part} and @code{gnus-article-replace-part}. +@xref{MIME Commands}, @ref{Using MIME}. + +@item +The option @code{mm-fill-flowed} can be used to disable treatment of +format=flowed messages. Also, flowed text is disabled when sending +inline @acronym{PGP} signed messages. @xref{Flowed text, ,Flowed text, +emacs-mime, The Emacs MIME Manual}. (New in Gnus 5.10.7) +@c This entry is also present in the node "Oort Gnus". + +@item Now the new command @kbd{S W} +(@code{gnus-article-wide-reply-with-original}) for a wide reply in the +article buffer yanks a text that is in the active region, if it is set, +as well as the @kbd{R} (@code{gnus-article-reply-with-original}) command. +Note that the @kbd{R} command in the article buffer no longer accepts a +prefix argument, which was used to make it do a wide reply. +@xref{Article Keymap}. + +@item The new command @kbd{C-h b} +(@code{gnus-article-describe-bindings}) used in the article buffer now +shows not only the article commands but also the real summary commands +that are accessible from the article buffer. + +@end itemize + +@item Changes in Message mode + +@itemize @bullet +@item Gnus now defaults to saving all outgoing messages in per-month +nnfolder archives. + +@item Gnus now supports the ``hashcash'' client puzzle anti-spam mechanism. +Use @code{(setq message-generate-hashcash t)} to enable. +@xref{Hashcash}. + +@item You can now drag and drop attachments to the Message buffer. +See @code{mml-dnd-protocol-alist} and @code{mml-dnd-attach-options}. +@xref{MIME, ,MIME, message, Message Manual}. + +@item The option @code{message-yank-empty-prefix} now controls how +empty lines are prefixed in cited text. @xref{Insertion Variables, +,Insertion Variables, message, Message Manual}. + +@item Gnus uses narrowing to hide headers in Message buffers. +The @code{References} header is hidden by default. To make all +headers visible, use @code{(setq message-hidden-headers nil)}. +@xref{Message Headers, ,Message Headers, message, Message Manual}. + +@item You can highlight different levels of citations like in the +article buffer. See @code{gnus-message-highlight-citation}. + +@item @code{auto-fill-mode} is enabled by default in Message mode. +See @code{message-fill-column}. @xref{Various Message Variables, , +Message Headers, message, Message Manual}. + +@item You can now store signature files in a special directory +named @code{message-signature-directory}. + +@item The option @code{message-citation-line-format} controls the format +of the "Whomever writes:" line. You need to set +@code{message-citation-line-function} to +@code{message-insert-formatted-citation-line} as well. +@end itemize + +@item Changes in Browse Server mode + +@itemize @bullet +@item Gnus' sophisticated subscription methods are now available in +Browse Server buffers as well using the variable +@code{gnus-browse-subscribe-newsgroup-method}. + +@end itemize + + +@item Changes in back ends + +@itemize @bullet +@item The nntp back end stores article marks in @file{~/News/marks}. + +The directory can be changed using the (customizable) variable +@code{nntp-marks-directory}, and marks can be disabled using the +(back end) variable @code{nntp-marks-is-evil}. The advantage of this +is that you can copy @file{~/News/marks} (using rsync, scp or +whatever) to another Gnus installation, and it will realize what +articles you have read and marked. The data in @file{~/News/marks} +has priority over the same data in @file{~/.newsrc.eld}. + +@item +You can import and export your @acronym{RSS} subscriptions from +@acronym{OPML} files. @xref{RSS}. + +@item @acronym{IMAP} identity (@acronym{RFC} 2971) is supported. + +By default, Gnus does not send any information about itself, but you can +customize it using the variable @code{nnimap-id}. + +@item The @code{nnrss} back end now supports multilingual text. +Non-@acronym{ASCII} group names for the @code{nnrss} groups are also +supported. @xref{RSS}. + +@item Retrieving mail with @acronym{POP3} is supported over @acronym{SSL}/@acronym{TLS} and with StartTLS. + +@item The nnml back end allows other compression programs beside @file{gzip} +for compressed message files. @xref{Mail Spool}. + +@item The nnml back end supports group compaction. + +This feature, accessible via the functions +@code{gnus-group-compact-group} (@kbd{G z} in the group buffer) and +@code{gnus-server-compact-server} (@kbd{z} in the server buffer) +renumbers all articles in a group, starting from 1 and removing gaps. +As a consequence, you get a correct total article count (until +messages are deleted again). + +@c @item nnmairix.el +@c FIXME + +@c @item nnir.el +@c FIXME + +@end itemize + +@item Appearance +@c Maybe it's not worth to separate this from "Miscellaneous"? + +@itemize @bullet + +@item The tool bar has been updated to use GNOME icons. +You can also customize the tool bars: @kbd{M-x customize-apropos @key{RET} +-tool-bar$} should get you started. (Only for Emacs, not in XEmacs.) +@c FIXME: Document this in the manual + +@item The tool bar icons are now (de)activated correctly +in the group buffer, see the variable @code{gnus-group-update-tool-bar}. +Its default value depends on your Emacs version. +@c FIXME: Document this in the manual + +@item You can change the location of XEmacs's toolbars in Gnus buffers. +See @code{gnus-use-toolbar} and @code{message-use-toolbar}. + +@end itemize + +@item Miscellaneous changes + +@itemize @bullet +@item Having edited the select-method for the foreign server in the +server buffer is immediately reflected to the subscription of the groups +which use the server in question. For instance, if you change +@code{nntp-via-address} into @samp{bar.example.com} from +@samp{foo.example.com}, Gnus will connect to the news host by way of the +intermediate host @samp{bar.example.com} from next time. + +@item The @file{all.SCORE} file can be edited from the group buffer +using @kbd{W e}. + +@item You can set @code{gnus-mark-copied-or-moved-articles-as-expirable} +to a non-@code{nil} value so that articles that have been read may be +marked as expirable automatically when copying or moving them to a group +that has auto-expire turned on. The default is @code{nil} and copying +and moving of articles behave as before; i.e., the expirable marks will +be unchanged except that the marks will be removed when copying or +moving articles to a group that has not turned auto-expire on. +@xref{Expiring Mail}. + +@item NoCeM support has been removed. + +@item Carpal mode has been removed. + +@end itemize + +@end itemize + @node Ma Gnus @subsubsection Ma Gnus commit 4fd20e66ab0337f9bc2ef3d0ab5d4d28da066c11 Author: Glenn Morris Date: Tue Mar 5 22:15:02 2019 -0800 Remove etc/GNUS-NEWS (bug#34662) It is not relevant since Gnus stopped being distributed separately. * etc/GNUS-NEWS: Remove this generated file. * etc/NEWS.26: Relocate an entry mistakenly added to GNUS-NEWS. * doc/misc/gnus-coding.texi (Gnus Maintenance Guide): No longer mention GNUS-NEWS. * doc/misc/gnus-news.el: Remove. * doc/misc/gnus-news.texi: Update a comment. * lisp/Makefile.in (update-gnus-news): Remove this phony target. diff --git a/doc/misc/gnus-coding.texi b/doc/misc/gnus-coding.texi index 95544628f7..f3e96a0cb6 100644 --- a/doc/misc/gnus-coding.texi +++ b/doc/misc/gnus-coding.texi @@ -362,14 +362,6 @@ such multiple commits, like whitespace differences, and unify those ;-). @section Miscellanea -@heading @file{GNUS-NEWS} - -The @file{etc/GNUS-NEWS} is created from -@file{doc/misc/gnus-news.texi}. Don't edit @file{etc/GNUS-NEWS}. -Edit @file{doc/misc/gnus-news.texi}, type @command{make -update-gnus-news} in the @file{lisp} directory and commit -@file{etc/GNUS-NEWS} and @file{doc/misc/gnus-news.texi}. - @heading Conventions for version information in defcustoms For new customizable variables introduced in Oort Gnus (including the diff --git a/doc/misc/gnus-news.el b/doc/misc/gnus-news.el deleted file mode 100644 index c90269fffe..0000000000 --- a/doc/misc/gnus-news.el +++ /dev/null @@ -1,115 +0,0 @@ -;;; gnus-news.el --- a hack to create GNUS-NEWS from texinfo source -;; Copyright (C) 2004-2019 Free Software Foundation, Inc. - -;; Author: Reiner Steib -;; Keywords: tools - -;; This file is part of GNU Emacs. - -;; 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 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 -;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -;; GNU General Public License for more details. - -;; You should have received a copy of the GNU General Public License -;; along with GNU Emacs. If not, see . - -;;; Commentary: - -;;; Code: - -(defvar gnus-news-header-disclaimer -"GNUS NEWS -- history of user-visible changes. - -Copyright (C) 1999-2019 Free Software Foundation, Inc. -See the end of the file for license conditions. - -Please send Gnus bug reports to bugs@gnus.org. -For older news, see Gnus info node \"New Features\".\n\n") - -(defvar gnus-news-trailer -" -* For older news, see Gnus info node \"New Features\". - ----------------------------------------------------------------------- - -This file is part of GNU Emacs. - -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 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 -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with GNU Emacs. If not, see . - - \nLocal variables:\nmode: outline -paragraph-separate: \"[ ]*$\"\nend:\n") - -(defvar gnus-news-makeinfo-command "makeinfo") - -(defvar gnus-news-fill-column 80) - -(defvar gnus-news-makeinfo-switches - (concat " --no-headers --paragraph-indent=0" - " --no-validate" ;; Allow unresolved references. - " --fill-column=" (number-to-string - (+ 3 ;; will strip leading spaces later - (or gnus-news-fill-column 80))))) - -(defun batch-gnus-news () - "Make GNUS-NEWS in batch mode." - (let (infile outfile) - (setq infile (car command-line-args-left) - command-line-args-left (cdr command-line-args-left) - outfile (car command-line-args-left) - command-line-args-left nil) - (if (and infile outfile) - (message "Creating `%s' from `%s'..." outfile infile) - (error "Not enough files given.")) - (gnus-news-translate-file infile outfile))) - -(defun gnus-news-translate-file (infile outfile) - "Translate INFILE (texinfo) to OUTFILE (GNUS-NEWS)." - (let* ((dir (concat (or (getenv "srcdir") ".") "/")) - (infile (concat dir infile)) - (buffer (find-file-noselect (concat dir outfile)))) - (with-temp-buffer - ;; Could be done using 'texinfmt' stuff as in 'infohack.el'. - (insert - (shell-command-to-string - (concat gnus-news-makeinfo-command " " - gnus-news-makeinfo-switches " " infile))) - (goto-char (point-max)) - (delete-char -1) - (goto-char (point-min)) - (save-excursion - (while (re-search-forward "^ \\* " nil t) - (replace-match "\f\n* "))) - (save-excursion - (while (re-search-forward "^ \\* " nil t) - (replace-match "** "))) - (save-excursion - (while (re-search-forward "^ " nil t) - (replace-match ""))) - ;; Avoid '*' from @ref at beginning of line: - (save-excursion - (while (re-search-forward "^\\*Note" nil t) - (replace-match " \\&"))) - (goto-char (point-min)) - (insert gnus-news-header-disclaimer) - (goto-char (point-max)) - (insert gnus-news-trailer) - (write-region (point-min) (point-max) outfile)))) - -;;; gnus-news.el ends here diff --git a/doc/misc/gnus-news.texi b/doc/misc/gnus-news.texi index 9bf8d19041..707c6dd410 100644 --- a/doc/misc/gnus-news.texi +++ b/doc/misc/gnus-news.texi @@ -13,8 +13,7 @@ @c carry prominent notices stating who last changed them. @c This file contains a list of news features Gnus. It is supposed to be -@c included in 'gnus.texi'. 'GNUS-NEWS' is automatically generated from -@c this file (see 'gnus-news.el'). +@c included in 'gnus.texi'. @itemize @bullet diff --git a/etc/GNUS-NEWS b/etc/GNUS-NEWS deleted file mode 100644 index a8b03857bd..0000000000 --- a/etc/GNUS-NEWS +++ /dev/null @@ -1,316 +0,0 @@ -GNUS NEWS -- history of user-visible changes. - -Copyright (C) 1999-2019 Free Software Foundation, Inc. -See the end of the file for license conditions. - -Please send Gnus bug reports to bugs@gnus.org. -For older news, see Gnus info node "New Features". - - -* Supported Emacs versions The following Emacs versions are supported by No -Gnus: - -** Emacs 22 and up -** XEmacs 21.4 -** XEmacs 21.5 -** SXEmacs - - -* Installation changes - -** Upgrading from previous (stable) version if you have used No Gnus. - -If you have tried No Gnus (the unstable Gnus branch leading to this -release) but went back to a stable version, be careful when upgrading to -this version. In particular, you will probably want to remove the -'~/News/marks' directory (perhaps selectively), so that flags are read -from your '~/.newsrc.eld' instead of from the stale marks file, where -this release will store flags for nntp. See a later entry for more -information about nntp marks. Note that downgrading isn't safe in -general. - -** Incompatibility when switching from Emacs 23 to Emacs 22 In Emacs 23, -Gnus uses Emacs's new internal coding system 'utf-8-emacs' for saving -articles drafts and '~/.newsrc.eld'. These files may not be read -correctly in Emacs 22 and below. If you want to use Gnus across -different Emacs versions, you may set 'mm-auto-save-coding-system' to -'emacs-mule'. - -** Lisp files are now installed in '.../site-lisp/gnus/' by default. It -defaulted to '.../site-lisp/' formerly. In addition to this, the new -installer issues a warning if other Gnus installations which will shadow -the latest one are detected. You can then remove those shadows manually -or remove them using 'make remove-installed-shadows'. - -** The installation directory name is allowed to have spaces and/or tabs. - - -* New packages and libraries within Gnus - -** New version of 'nnimap' - -'nnimap' has been reimplemented in a mostly-compatible way. See the Gnus -manual for a description of the new interface. In particular, -'nnimap-inbox' and the client side split method has changed. - -** Gnus includes the Emacs Lisp SASL library. - -This provides a clean API to SASL mechanisms from within Emacs. The user -visible aspects of this, compared to the earlier situation, include -support for DIGEST-MD5 and NTLM. *Note Emacs SASL: (sasl)Top. - -** ManageSieve connections uses the SASL library by default. - -The primary change this brings is support for DIGEST-MD5 and NTLM, when -the server supports it. - -** Gnus includes a password cache mechanism in password.el. - -It is enabled by default (see 'password-cache'), with a short timeout of -16 seconds (see 'password-cache-expiry'). If PGG is used as the PGP back -end, the PGP passphrase is managed by this mechanism. Passwords for -ManageSieve connections are managed by this mechanism, after querying the -user about whether to do so. - -** Using EasyPG with Gnus When EasyPG, is available, Gnus will use it -instead of PGG. EasyPG is an Emacs user interface to GNU Privacy Guard. - *Note EasyPG Assistant user's manual: (epa)Top. EasyPG is included in -Emacs 23 and available separately as well. - - -* Changes in group mode - -** Symbols like 'gcc-self' now have the same precedence rules in -'gnus-parameters' as other "real" variables: The last match wins instead -of the first match. - -** Old intermediate incoming mail files ('Incoming*') are deleted after a -couple of days, not immediately. *Note Mail Source Customization::. -(New in Gnus 5.10.10 / No Gnus 0.8) - - -* Changes in summary and article mode - -** There's now only one variable that determines how HTML is rendered: -'mm-text-html-renderer'. - -** Gnus now supports sticky article buffers. Those are article buffers that -are not reused when you select another article. *Note Sticky Articles::. - -** Gnus can selectively display 'text/html' articles with a WWW browser with -'K H'. *Note MIME Commands::. - -** International host names (IDNA) can now be decoded inside article bodies -using 'W i' ('gnus-summary-idna-message'). This requires that GNU Libidn -() has been installed. - -** The non-ASCII group names handling has been much improved. The back ends -that fully support non-ASCII group names are now 'nntp', 'nnml', and -'nnrss'. Also the agent, the cache, and the marks features work with -those back ends. *Note Non-ASCII Group Names::. - -** Gnus now displays DNS master files sent as text/dns using dns-mode. - -** Gnus supports new limiting commands in the Summary buffer: '/ r' -('gnus-summary-limit-to-replied') and '/ R' -('gnus-summary-limit-to-recipient'). *Note Limiting::. - -** You can now fetch all ticked articles from the server using 'Y t' -('gnus-summary-insert-ticked-articles'). *Note Summary Generation -Commands::. - -** Gnus supports a new sort command in the Summary buffer: 'C-c C-s C-t' -('gnus-summary-sort-by-recipient'). *Note Summary Sorting::. - -** S/MIME now features LDAP user certificate searches. You need to -configure the server in 'smime-ldap-host-list'. - -** URLs inside OpenPGP headers are retrieved and imported to your PGP key -ring when you click on them. - -** Picons can be displayed right from the textual address, see -'gnus-picon-style'. *Note Picons::. - -** ANSI SGR control sequences can be transformed using 'W A'. - -ANSI sequences are used in some Chinese hierarchies for highlighting -articles ('gnus-article-treat-ansi-sequences'). - -** Gnus now MIME decodes articles even when they lack "MIME-Version" header. -This changes the default of 'gnus-article-loose-mime'. - -** 'gnus-decay-scores' can be a regexp matching score files. For example, -set it to '\\.ADAPT\\'' and only adaptive score files will be decayed. - *Note Score Decays::. - -** Strings prefixing to the 'To' and 'Newsgroup' headers in summary lines -when using 'gnus-ignored-from-addresses' can be customized with -'gnus-summary-to-prefix' and 'gnus-summary-newsgroup-prefix'. *Note To -From Newsgroups::. - -** You can replace MIME parts with external bodies. See -'gnus-mime-replace-part' and 'gnus-article-replace-part'. *Note MIME -Commands::, *note Using MIME::. - -** The option 'mm-fill-flowed' can be used to disable treatment of -format=flowed messages. Also, flowed text is disabled when sending -inline PGP signed messages. *Note Flowed text: (emacs-mime)Flowed text. -(New in Gnus 5.10.7) - -** Now the new command 'S W' ('gnus-article-wide-reply-with-original') for a -wide reply in the article buffer yanks a text that is in the active -region, if it is set, as well as the 'R' -('gnus-article-reply-with-original') command. Note that the 'R' command -in the article buffer no longer accepts a prefix argument, which was used -to make it do a wide reply. *Note Article Keymap::. - -** The new command 'C-h b' ('gnus-article-describe-bindings') used in the -article buffer now shows not only the article commands but also the real -summary commands that are accessible from the article buffer. - - -* Changes in Message mode - -** Gnus now defaults to saving all outgoing messages in per-month nnfolder -archives. - -** Gnus now supports the "hashcash" client puzzle anti-spam mechanism. Use -'(setq message-generate-hashcash t)' to enable. *Note Hashcash::. - -** You can now drag and drop attachments to the Message buffer. See -'mml-dnd-protocol-alist' and 'mml-dnd-attach-options'. *Note MIME: -(message)MIME. - -** The option 'message-yank-empty-prefix' now controls how empty lines are -prefixed in cited text. *Note Insertion Variables: (message)Insertion -Variables. - -** Gnus uses narrowing to hide headers in Message buffers. The 'References' -header is hidden by default. To make all headers visible, use '(setq -message-hidden-headers nil)'. *Note Message Headers: (message)Message -Headers. - -** You can highlight different levels of citations like in the article -buffer. See 'gnus-message-highlight-citation'. - -** 'auto-fill-mode' is enabled by default in Message mode. See -'message-fill-column'. *Note Message Headers: (message)Various Message -Variables. - -** You can now store signature files in a special directory named -'message-signature-directory'. - -** The option 'message-citation-line-format' controls the format of the -"Whomever writes:" line. You need to set -'message-citation-line-function' to -'message-insert-formatted-citation-line' as well. - - -* Changes in Browse Server mode - -** Gnus' sophisticated subscription methods are now available in Browse -Server buffers as well using the variable -'gnus-browse-subscribe-newsgroup-method'. - - -* Changes in back ends - -** The nntp back end stores article marks in '~/News/marks'. - -The directory can be changed using the (customizable) variable -'nntp-marks-directory', and marks can be disabled using the (back end) -variable 'nntp-marks-is-evil'. The advantage of this is that you can -copy '~/News/marks' (using rsync, scp or whatever) to another Gnus -installation, and it will realize what articles you have read and marked. -The data in '~/News/marks' has priority over the same data in -'~/.newsrc.eld'. - -** You can import and export your RSS subscriptions from OPML files. *Note -RSS::. - -** IMAP identity (RFC 2971) is supported. - -By default, Gnus does not send any information about itself, but you can -customize it using the variable 'nnimap-id'. - -** The 'nnrss' back end now supports multilingual text. Non-ASCII group -names for the 'nnrss' groups are also supported. *Note RSS::. - -** Retrieving mail with POP3 is supported over SSL/TLS and with StartTLS. - -** The nnml back end allows other compression programs beside 'gzip' for -compressed message files. *Note Mail Spool::. - -** The nnml back end supports group compaction. - -This feature, accessible via the functions 'gnus-group-compact-group' ('G -z' in the group buffer) and 'gnus-server-compact-server' ('z' in the -server buffer) renumbers all articles in a group, starting from 1 and -removing gaps. As a consequence, you get a correct total article count -(until messages are deleted again). - - -* Appearance - -** The tool bar has been updated to use GNOME icons. You can also customize -the tool bars: 'M-x customize-apropos RET -tool-bar$' should get you -started. (Only for Emacs, not in XEmacs.) - -** The tool bar icons are now (de)activated correctly in the group buffer, -see the variable 'gnus-group-update-tool-bar'. Its default value depends -on your Emacs version. - -** You can change the location of XEmacs's toolbars in Gnus buffers. See -'gnus-use-toolbar' and 'message-use-toolbar'. - - -* Miscellaneous changes - -** New user option 'gnus-rcvstore-options' provides a way to -specify additional options when saving messages to an MH folder. - -** Having edited the select-method for the foreign server in the server -buffer is immediately reflected to the subscription of the groups which -use the server in question. For instance, if you change -'nntp-via-address' into 'bar.example.com' from 'foo.example.com', Gnus -will connect to the news host by way of the intermediate host -'bar.example.com' from next time. - -** The 'all.SCORE' file can be edited from the group buffer using 'W e'. - -** You can set 'gnus-mark-copied-or-moved-articles-as-expirable' to a -non-'nil' value so that articles that have been read may be marked as -expirable automatically when copying or moving them to a group that has -auto-expire turned on. The default is 'nil' and copying and moving of -articles behave as before; i.e., the expirable marks will be unchanged -except that the marks will be removed when copying or moving articles to -a group that has not turned auto-expire on. *Note Expiring Mail::. - -** NoCeM support has been removed. - -** Carpal mode has been removed. - -* For older news, see Gnus info node "New Features". - ----------------------------------------------------------------------- - -This file is part of GNU Emacs. - -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 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 -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with GNU Emacs. If not, see . - - -Local variables: -mode: outline -paragraph-separate: "[ ]*$" -end: diff --git a/etc/NEWS.26 b/etc/NEWS.26 index 9ee1a4f284..d8ad575cc1 100644 --- a/etc/NEWS.26 +++ b/etc/NEWS.26 @@ -800,6 +800,9 @@ zone name instead of the numeric form. The '%z' format continues to be the numeric form. The new behavior is compatible with 'format-time-string'. +*** New user option 'gnus-rcvstore-options' provides a way to +specify additional options when saving messages to an MH folder. + ** Ibuffer *** New command 'ibuffer-jump'. diff --git a/lisp/Makefile.in b/lisp/Makefile.in index 1f251bdeb5..9bcd5a8824 100644 --- a/lisp/Makefile.in +++ b/lisp/Makefile.in @@ -220,7 +220,7 @@ update-subdirs: $(srcdir)/../build-aux/update-subdirs $$file; \ done; -.PHONY: updates repo-update update-authors update-gnus-news +.PHONY: updates repo-update update-authors # Some modes of make-dist use this. updates: update-subdirs autoloads finder-data custom-deps @@ -233,17 +233,12 @@ updates: update-subdirs autoloads finder-data custom-deps # this directory's autoloads rule. repo-update: compile finder-data custom-deps -# Update etc/AUTHORS and etc/GNUS-NEWS. +# Update etc/AUTHORS update-authors: $(emacs) -L "$(top_srcdir)/admin" -l authors \ -f batch-update-authors "$(top_srcdir)/etc/AUTHORS" "$(top_srcdir)" -update-gnus-news: - $(emacs) -L "$(top_srcdir)/doc/misc" -l gnus-news -f batch-gnus-news \ - "$(top_srcdir)/doc/misc/gnus-news.texi" \ - "$(top_srcdir)/etc/GNUS-NEWS" - FORCE: .PHONY: FORCE commit a23ff0ca03a6d57c22d56662bf636b8b98671543 Author: Glenn Morris Date: Tue Mar 5 21:55:09 2019 -0800 Remove gnus-overrides.texi * doc/misc/gnus-overrides.texi: Remove. * doc/misc/auth.texi, doc/misc/emacs-mime.texi: * doc/misc/gnus.texi, doc/misc/message.texi, doc/misc/pgg.texi: * doc/misc/sasl.texi, doc/misc/sieve.texi: Do not include gnus-overrides.texi. diff --git a/doc/misc/auth.texi b/doc/misc/auth.texi index ddfeabcba7..a46e3d73fc 100644 --- a/doc/misc/auth.texi +++ b/doc/misc/auth.texi @@ -1,7 +1,5 @@ \input texinfo @c -*-texinfo-*- -@include gnus-overrides.texi - @set VERSION 0.3 @setfilename ../../info/auth.info diff --git a/doc/misc/emacs-mime.texi b/doc/misc/emacs-mime.texi index 09242407d0..dd651fff35 100644 --- a/doc/misc/emacs-mime.texi +++ b/doc/misc/emacs-mime.texi @@ -1,7 +1,5 @@ \input texinfo -@include gnus-overrides.texi - @setfilename ../../info/emacs-mime.info @settitle Emacs MIME Manual @include docstyle.texi diff --git a/doc/misc/gnus-overrides.texi b/doc/misc/gnus-overrides.texi deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/doc/misc/gnus.texi b/doc/misc/gnus.texi index ff2dd7dd54..73b12149e6 100644 --- a/doc/misc/gnus.texi +++ b/doc/misc/gnus.texi @@ -1,7 +1,5 @@ \input texinfo -@include gnus-overrides.texi - @setfilename ../../info/gnus.info @settitle Gnus Manual @include docstyle.texi diff --git a/doc/misc/message.texi b/doc/misc/message.texi index addad99bdb..7089bb5dfe 100644 --- a/doc/misc/message.texi +++ b/doc/misc/message.texi @@ -1,7 +1,5 @@ \input texinfo @c -*-texinfo-*- -@include gnus-overrides.texi - @setfilename ../../info/message.info @settitle Message Manual @include docstyle.texi diff --git a/doc/misc/pgg.texi b/doc/misc/pgg.texi index ffb8e4a357..2fac24a427 100644 --- a/doc/misc/pgg.texi +++ b/doc/misc/pgg.texi @@ -1,7 +1,5 @@ \input texinfo @c -*-texinfo-*- -@include gnus-overrides.texi - @setfilename ../../info/pgg.info @set VERSION 0.1 diff --git a/doc/misc/sasl.texi b/doc/misc/sasl.texi index 3e7768d319..1d31150f04 100644 --- a/doc/misc/sasl.texi +++ b/doc/misc/sasl.texi @@ -1,7 +1,5 @@ \input texinfo @c -*-texinfo-*- -@include gnus-overrides.texi - @setfilename ../../info/sasl.info @set VERSION 0.2 diff --git a/doc/misc/sieve.texi b/doc/misc/sieve.texi index 7f28994f1e..2d07b0a8d7 100644 --- a/doc/misc/sieve.texi +++ b/doc/misc/sieve.texi @@ -1,7 +1,5 @@ \input texinfo @c -*-texinfo-*- -@include gnus-overrides.texi - @setfilename ../../info/sieve.info @settitle Emacs Sieve Manual @include docstyle.texi commit 3635be5aeebf780d64b874a568cb38b638d0508b Author: Wilson Snyder Date: Tue Mar 5 20:51:35 2019 -0500 Fix regexp issues introduced in last trunk commit. * verilog-mode.el (verilog-coverpoint-re): Fix regexp issues introduced in last trunk commit. diff --git a/lisp/progmodes/verilog-mode.el b/lisp/progmodes/verilog-mode.el index 10601dfc6a..f9c3177be4 100644 --- a/lisp/progmodes/verilog-mode.el +++ b/lisp/progmodes/verilog-mode.el @@ -121,7 +121,7 @@ ;; ;; This variable will always hold the version number of the mode -(defconst verilog-mode-version "2019-03-05-e72ce53-vpo-GNU" +(defconst verilog-mode-version "2019-03-05-39b4dac-vpo-GNU" "Version of this Verilog mode.") (defconst verilog-mode-release-emacs t "If non-nil, this version of Verilog mode was released with Emacs itself.") @@ -2786,7 +2786,7 @@ find the errors." (defconst verilog-behavioral-block-beg-re (eval-when-compile (verilog-regexp-words '("initial" "final" "always" "always_comb" "always_latch" "always_ff" "function" "task")))) -(defconst verilog-coverpoint-re "\\w+\\s*:\\s*\\(coverpoint\\|cross\\|constraint\\)") +(defconst verilog-coverpoint-re "\\w+\\s-*:\\s-*\\(coverpoint\\|cross\\|constraint\\)") (defconst verilog-in-constraint-re ; keywords legal in constraint blocks starting a statement/block (eval-when-compile (verilog-regexp-words '("if" "else" "solve" "foreach")))) commit 1c349c62305d432abf0fa2b6e3f5d754fe4cab79 Author: Eli Zaretskii Date: Tue Mar 5 18:25:23 2019 +0200 Remove unreliable assertion in buf_bytepos_to_charpos * src/marker.c (buf_bytepos_to_charpos): Remove the assertion regarding bytepos always at the head byte of a multibyte sequence. For the reasons, see http://lists.gnu.org/archive/html/emacs-devel/2019-03/msg00100.html http://lists.gnu.org/archive/html/emacs-devel/2019-03/msg00102.html diff --git a/src/marker.c b/src/marker.c index 6755993bfa..b58051a8c2 100644 --- a/src/marker.c +++ b/src/marker.c @@ -332,12 +332,6 @@ buf_bytepos_to_charpos (struct buffer *b, ptrdiff_t bytepos) if (best_above == best_above_byte) return bytepos; -#if 0 - /* Check bytepos is not in the middle of a character. */ - eassert (bytepos >= BUF_Z_BYTE (b) - || CHAR_HEAD_P (BUF_FETCH_BYTE (b, bytepos))); -#endif - best_below = BEG; best_below_byte = BEG_BYTE; commit c5c2acd1c605243da7f8b9c4cd41ebdb0e9a7a38 Author: Wilson Snyder Date: Tue Mar 5 09:46:36 2019 -0500 Fix regular-expression glitches and typos. Update verilog-mode from upstream. * lisp/progmodes/verilog-mode.el (verilog-read-decls): Fix AUTO vectors with double brackets, msg2839. (verilog-read-auto-template-middle): Fix AUTO_TEMPLATE with regexp capture group reference, but1379. Reported by David Rogoff. diff --git a/lisp/progmodes/verilog-mode.el b/lisp/progmodes/verilog-mode.el index e1003378b2..10601dfc6a 100644 --- a/lisp/progmodes/verilog-mode.el +++ b/lisp/progmodes/verilog-mode.el @@ -121,7 +121,7 @@ ;; ;; This variable will always hold the version number of the mode -(defconst verilog-mode-version "2018-11-26-bb3814b-vpo-GNU" +(defconst verilog-mode-version "2019-03-05-e72ce53-vpo-GNU" "Version of this Verilog mode.") (defconst verilog-mode-release-emacs t "If non-nil, this version of Verilog mode was released with Emacs itself.") @@ -2786,7 +2786,7 @@ find the errors." (defconst verilog-behavioral-block-beg-re (eval-when-compile (verilog-regexp-words '("initial" "final" "always" "always_comb" "always_latch" "always_ff" "function" "task")))) -(defconst verilog-coverpoint-re "\\w+\\s-*:\\s-*\\(coverpoint\\|cross\\constraint\\)" ) +(defconst verilog-coverpoint-re "\\w+\\s*:\\s*\\(coverpoint\\|cross\\|constraint\\)") (defconst verilog-in-constraint-re ; keywords legal in constraint blocks starting a statement/block (eval-when-compile (verilog-regexp-words '("if" "else" "solve" "foreach")))) @@ -6558,9 +6558,9 @@ Return >0 for nested struct." (t nil)))) (skip-chars-forward " \t\n\f") (while - (cond - ((looking-at "/\\*") - (progn + (cond + ((looking-at "/\\*") + (progn (setq h (point)) (goto-char (match-end 0)) (if (search-forward "*/" nil t) @@ -8515,21 +8515,23 @@ Return an array of [outputs inouts inputs wire reg assign const]." (forward-char 1) (when (< paren sig-paren) (setq expect-signal nil rvalue nil))) ; ) that ends variables inside v2k arg list - ((looking-at "\\s-*\\(\\[[^]]+\\]\\)") - (goto-char (match-end 0)) + ((looking-at "\\[") + (setq keywd (buffer-substring-no-properties + (point) + (progn (forward-sexp 1) (point)))) (cond (newsig ; Memory, not just width. Patch last signal added's memory (nth 3) (setcar (cdr (cdr (cdr newsig))) (if (verilog-sig-memory newsig) (concat (verilog-sig-memory newsig) - (match-string-no-properties 1)) - (match-string-no-properties 1)))) + keywd) + keywd))) (vec ; Multidimensional (setq multidim (cons vec multidim)) (setq vec (verilog-string-replace-matches - "\\s-+" "" nil nil (match-string-no-properties 1)))) + "\\s-+" "" nil nil keywd))) (t ; Bit width (setq vec (verilog-string-replace-matches - "\\s-+" "" nil nil (match-string-no-properties 1)))))) + "\\s-+" "" nil nil keywd))))) ;; Normal or escaped identifier -- note we remember the \ if escaped ((looking-at "\\s-*\\([a-zA-Z0-9`_$]+\\|\\\\[^ \t\n\f]+\\)") (goto-char (match-end 0)) @@ -8950,10 +8952,10 @@ Inserts the list of signals found." (forward-char 1) (or (search-forward "*)") (error "%s: Unmatched (* *), at char %d" (verilog-point-text) (point)))) - ;; On pins, parse and advance to next pin - ;; Looking at pin, but *not* an // Output comment, or ) to end the inst - ((looking-at "\\s-*[a-zA-Z0-9`_$({}\\][^,]*") - (goto-char (match-end 0)) + ;; On pins, parse and advance to next pin + ;; Looking at pin, but *not* an // Output comment, or ) to end the inst + ((looking-at "\\s-*[a-zA-Z0-9`_$({}\\][^,]*") + (goto-char (match-end 0)) (setq verilog-read-sub-decls-gate-ios (or (car iolist) "input") iolist (cdr iolist)) (verilog-read-sub-decls-expr @@ -9354,10 +9356,10 @@ Returns REGEXP and list of ( (signal_name connection_name)... )." templateno lineno) tpl-sig-list)) (goto-char (match-end 0))) - ;; Regexp form?? - ((looking-at - ;; Regexp bug in XEmacs disallows ][ inside [], and wants + last - "\\s-*\\.\\(\\([-a-zA-Z0-9`_$+@^.*?]\\|[][]\\|\\\\[()|]\\)+\\)\\s-*(\\(.*\\))\\s-*\\(,\\|)\\s-*;\\)") + ;; Regexp form?? + ((looking-at + ;; Regexp bug in XEmacs disallows ][ inside [], and wants + last + "\\s-*\\.\\(\\([-a-zA-Z0-9`_$+@^.*?|]\\|[][]\\|\\\\[()|0-9]\\)+\\)\\s-*(\\(.*\\))\\s-*\\(,\\|)\\s-*;\\)") (setq rep (match-string-no-properties 3)) (goto-char (match-end 0)) (setq tpl-wild-list commit 9b93e3b0759d562989283eaecf32e075f984c18c Author: Martin Rudalics Date: Tue Mar 5 11:01:14 2019 +0100 Fix interactive spec of some functions in window.el (Bug#34749) * lisp/window.el (delete-windows-on, quit-windows-on) (display-buffer-other-frame): Interactively, permit existing buffers only (Bug#34749). diff --git a/lisp/window.el b/lisp/window.el index 80828bb35c..9566429627 100644 --- a/lisp/window.el +++ b/lisp/window.el @@ -4711,7 +4711,7 @@ frames. When a window showing BUFFER-OR-NAME is dedicated and the only window of its frame, that frame is deleted when there are other frames left." - (interactive "BDelete windows on (buffer):\nP") + (interactive "bDelete windows on (buffer):\nP") (let ((buffer (window-normalize-buffer buffer-or-name)) ;; Handle the "inverted" meaning of the FRAME argument wrt other ;; `window-list-1' based function. @@ -4894,7 +4894,7 @@ BUFFER-OR-NAME. Optional argument FRAME is handled as by This function calls `quit-window' on all candidate windows showing BUFFER-OR-NAME." - (interactive "BQuit windows on (buffer):\nP") + (interactive "bQuit windows on (buffer):\nP") (let ((buffer (window-normalize-buffer buffer-or-name)) ;; Handle the "inverted" meaning of the FRAME argument wrt other ;; `window-list-1' based function. @@ -7188,7 +7188,7 @@ on all the frames on the current terminal, skipping the selected window; if that fails, it pops up a new frame. This uses the function `display-buffer' as a subroutine; see its documentation for additional customization information." - (interactive "BDisplay buffer in other frame: ") + (interactive "bDisplay buffer in other frame: ") (display-buffer buffer display-buffer--other-frame-action t)) ;;; `display-buffer' action functions: commit a552cc21dc324b1be71c181684b0ab2e6cf0a60f Author: Martin Rudalics Date: Tue Mar 5 10:46:19 2019 +0100 Fix handling of minibuffer-only child frames (Bug#33498) * doc/lispref/frames.texi (Buffer Parameters): Describe how to make a minibuffer-only child frame. (Child Frames): Describe how minbuffer child frames are deleted. * src/frame.c (delete_frame): Handle deletion of minibuffer child frames (Bug#33498). In the course, fix reassigning of 'default-minibuffer-frame' with minibuffer-only frames. * lisp/frame.el (frame-notice-user-settings): Handle creation of initial minibuffer-only child frame. (make-frame): Handle creation of frame with a minibuffer-only child frame. diff --git a/doc/lispref/frames.texi b/doc/lispref/frames.texi index 820006a567..9b3e02f4de 100644 --- a/doc/lispref/frames.texi +++ b/doc/lispref/frames.texi @@ -1884,6 +1884,12 @@ minibuffer window to @code{t} and vice-versa, or from @code{t} to @code{nil}. If the parameter specifies a minibuffer window already, setting it to @code{nil} has no effect. +The special value @code{child-frame} means to make a minibuffer-only +child frame (@pxref{Child Frames}) whose parent becomes the frame +created. As if specified as @code{nil}, Emacs will set this parameter +to the minibuffer window of the child frame but will not select the +child frame after its creation. + @vindex buffer-predicate@r{, a frame parameter} @item buffer-predicate The buffer-predicate function for this frame. The function @@ -3214,9 +3220,17 @@ top-level frame which also always appears on top of its parent window---the desktop's root window. When a parent frame is iconified or made invisible (@pxref{Visibility of Frames}), its child frames are made invisible. When a parent frame is deiconified or made visible, its -child frames are made visible. When a parent frame is about to be -deleted (@pxref{Deleting Frames}), its child frames are recursively -deleted before it. +child frames are made visible. + + When a parent frame is about to be deleted (@pxref{Deleting +Frames}), its child frames are recursively deleted before it. There +is one exception to this rule: When the child frame serves as a +surrogate minibuffer frame (@pxref{Minibuffers and Frames}) for +another frame, it is retained until the parent frame has been deleted. +If, at this time, no remaining frame uses the child frame as its +minibuffer frame, Emacs will try to delete the child frame too. If +that deletion fails for whatever reason, the child frame is made a +top-level frame. Whether a child frame can have a menu or tool bar is window-system or window manager dependent. Most window-systems explicitly disallow menus diff --git a/etc/NEWS b/etc/NEWS index fc4e2c5726..3e347b5318 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -1166,6 +1166,11 @@ the 128...255 range, as expected. +++ *** New command 'make-frame-on-monitor' makes a frame on the specified monitor. ++++ +*** New value of 'minibuffer' frame parameter 'child-frame'. +This allows to create and parent immediately a minibuffer-only child +frame when making a frame. + * New Modes and Packages in Emacs 27.1 diff --git a/lisp/frame.el b/lisp/frame.el index d71a3fe5e8..cdb2ac4af1 100644 --- a/lisp/frame.el +++ b/lisp/frame.el @@ -316,10 +316,15 @@ there (in decreasing order of priority)." ;; want to use save-excursion here, because that may also try to set ;; the buffer of the selected window, which fails when the selected ;; window is the minibuffer. - (let ((old-buffer (current-buffer)) - (window-system-frame-alist - (cdr (assq initial-window-system - window-system-default-frame-alist)))) + (let* ((old-buffer (current-buffer)) + (window-system-frame-alist + (cdr (assq initial-window-system + window-system-default-frame-alist))) + (minibuffer + (cdr (or (assq 'minibuffer initial-frame-alist) + (assq 'minibuffer window-system-frame-alist) + (assq 'minibuffer default-frame-alist) + '(minibuffer . t))))) (when (and frame-notice-user-settings (null frame-initial-frame)) @@ -410,11 +415,7 @@ there (in decreasing order of priority)." ;; default-frame-alist in the parameters of the screen we ;; create here, so that its new value, gleaned from the user's ;; init file, will be applied to the existing screen. - (if (not (eq (cdr (or (assq 'minibuffer initial-frame-alist) - (assq 'minibuffer window-system-frame-alist) - (assq 'minibuffer default-frame-alist) - '(minibuffer . t))) - t)) + (if (not (eq minibuffer t)) ;; Create the new frame. (let (parms new) ;; MS-Windows needs this to avoid inflooping below. @@ -442,7 +443,15 @@ there (in decreasing order of priority)." parms nil)) - ;; Get rid of `reverse', because that was handled + (when (eq minibuffer 'child-frame) + ;; When the minibuffer shall be shown in a child frame, + ;; remove the 'minibuffer' parameter from PARMS. It + ;; will get assigned by the usual routines to the child + ;; frame's root window below. + (setq parms (cons '(minibuffer) + (delq (assq 'minibuffer parms) parms)))) + + ;; Get rid of `reverse', because that was handled ;; when we first made the frame. (setq parms (cons '(reverse) (delq (assq 'reverse parms) parms))) @@ -465,7 +474,18 @@ there (in decreasing order of priority)." ;; the only frame with a minibuffer. If it is, create a ;; new one. (or (delq frame-initial-frame (minibuffer-frame-list)) - (make-initial-minibuffer-frame nil)) + (and (eq minibuffer 'child-frame) + ;; Create a minibuffer child frame and parent it + ;; immediately. Take any other parameters for + ;; the child frame from 'minibuffer-frame-list'. + (let* ((minibuffer-frame-alist + (cons `(parent-frame . ,new) minibuffer-frame-alist))) + (make-initial-minibuffer-frame nil) + ;; With a minibuffer child frame we do not want + ;; to select the minibuffer frame initially as + ;; we do for standard minibuffer-only frames. + (select-frame new))) + (make-initial-minibuffer-frame nil)) ;; If the initial frame is serving as a surrogate ;; minibuffer frame for any frames, we need to wean them @@ -795,7 +815,7 @@ the new frame according to its own rules." (t window-system))) (oldframe (selected-frame)) (params parameters) - frame) + frame child-frame) (unless (get w 'window-system-initialized) (let ((window-system w)) ;Hack attack! @@ -811,17 +831,44 @@ the new frame according to its own rules." (dolist (p default-frame-alist) (unless (assq (car p) params) (push p params))) - ;; Now make the frame. - (run-hooks 'before-make-frame-hook) ;; (setq frame-size-history '(1000)) - (setq frame (let ((window-system w)) ;Hack attack! + (when (eq (cdr (or (assq 'minibuffer params) '(minibuffer . t))) + 'child-frame) + ;; If the 'minibuffer' parameter equals 'child-frame' make a + ;; frame without minibuffer first using the root window of + ;; 'default-minibuffer-frame' as its minibuffer window + (setq child-frame t) + (setq params (cons '(minibuffer) + (delq (assq 'minibuffer params) params)))) + + ;; Now make the frame. + (run-hooks 'before-make-frame-hook) + + (setq frame (let ((window-system w)) ; Hack attack! (frame-creation-function params))) + + (when child-frame + ;; When we want to equip the new frame with a minibuffer-only + ;; child frame, make that frame and reparent it immediately. + (setq child-frame + (make-frame + (append + `((display . ,display) (minibuffer . only) + (parent-frame . ,frame)) + minibuffer-frame-alist))) + (when (frame-live-p child-frame) + ;; Have the 'minibuffer' parameter of our new frame refer to + ;; its child frame's root window. + (set-frame-parameter + frame 'minibuffer (frame-root-window child-frame)))) + (normal-erase-is-backspace-setup-frame frame) - ;; Inherit the original frame's parameters. + ;; Inherit original frame's parameters unless they are overridden + ;; by explicit parameters. (dolist (param frame-inherited-parameters) - (unless (assq param parameters) ;Overridden by explicit parameters. + (unless (assq param parameters) (let ((val (frame-parameter oldframe param))) (when val (set-frame-parameter frame param val))))) diff --git a/src/frame.c b/src/frame.c index 165ed4a4e5..3d83dc0a0d 100644 --- a/src/frame.c +++ b/src/frame.c @@ -1849,6 +1849,7 @@ delete_frame (Lisp_Object frame, Lisp_Object force) Lisp_Object frames, frame1; int minibuffer_selected, is_tooltip_frame; bool nochild = !FRAME_PARENT_FRAME (f); + Lisp_Object minibuffer_child_frame = Qnil; if (!FRAME_LIVE_P (f)) return Qnil; @@ -1865,13 +1866,33 @@ delete_frame (Lisp_Object frame, Lisp_Object force) /* Softly delete all frames with this frame as their parent frame or as their `delete-before' frame parameter value. */ FOR_EACH_FRAME (frames, frame1) - if (FRAME_PARENT_FRAME (XFRAME (frame1)) == f + { + struct frame *f1 = XFRAME (frame1); + + if (EQ (frame1, frame) || FRAME_TOOLTIP_P (f1)) + continue; + else if (FRAME_PARENT_FRAME (f1) == f) + { + if (FRAME_HAS_MINIBUF_P (f1) && !FRAME_HAS_MINIBUF_P (f) + && EQ (FRAME_MINIBUF_WINDOW (f), FRAME_MINIBUF_WINDOW (f1))) + /* frame1 owns frame's minibuffer window so we must not + delete it here to avoid a surrogate minibuffer error. + Unparent frame1 and make it a top-level frame. */ + { + Fmodify_frame_parameters + (frame1, Fcons (Fcons (Qparent_frame, Qnil), Qnil)); + minibuffer_child_frame = frame1; + } + else + delete_frame (frame1, Qnil); + } + else if (nochild + && EQ (get_frame_param (XFRAME (frame1), Qdelete_before), frame)) /* Process `delete-before' parameter iff FRAME is not a child frame. This avoids that we enter an infinite chain of mixed dependencies. */ - || (nochild - && EQ (get_frame_param (XFRAME (frame1), Qdelete_before), frame))) - delete_frame (frame1, Qnil); + delete_frame (frame1, Qnil); + } /* Does this frame have a minibuffer, and is it the surrogate minibuffer for any other frame? */ @@ -2136,18 +2157,27 @@ delete_frame (Lisp_Object frame, Lisp_Object force) { struct frame *f1 = XFRAME (frame1); - /* Consider only frames on the same kboard - and only those with minibuffers. */ - if (kb == FRAME_KBOARD (f1) - && FRAME_HAS_MINIBUF_P (f1)) + /* Set frame_on_same_kboard to frame1 if it is on the same + keyboard. Set frame_with_minibuf to frame1 if it also + has a minibuffer. Leave the loop immediately if frame1 + is also minibuffer-only. + + Emacs 26 does _not_ set frame_on_same_kboard here when it + finds a minibuffer-only frame and subsequently fails to + set default_minibuffer_frame below. Not a great deal and + never noticed since make_frame_without_minibuffer creates + a new minibuffer frame in that case (which can be a minor + annoyance though). To consider for Emacs 26.3. */ + if (kb == FRAME_KBOARD (f1)) { - frame_with_minibuf = frame1; - if (FRAME_MINIBUF_ONLY_P (f1)) - break; + frame_on_same_kboard = frame1; + if (FRAME_HAS_MINIBUF_P (f1)) + { + frame_with_minibuf = frame1; + if (FRAME_MINIBUF_ONLY_P (f1)) + break; + } } - - if (kb == FRAME_KBOARD (f1)) - frame_on_same_kboard = frame1; } if (!NILP (frame_on_same_kboard)) @@ -2180,7 +2210,46 @@ delete_frame (Lisp_Object frame, Lisp_Object force) = Fcons (list3 (Qrun_hook_with_args, Qafter_delete_frame_functions, frame), pending_funcalls); else - safe_call2 (Qrun_hook_with_args, Qafter_delete_frame_functions, frame); + safe_call2 (Qrun_hook_with_args, Qafter_delete_frame_functions, frame); + + if (!NILP (minibuffer_child_frame)) + /* If minibuffer_child_frame is non-nil, it was FRAME's minibuffer + child frame. Delete it unless it's also the minibuffer frame + of another frame in which case we make sure it's visible. */ + { + struct frame *f1 = XFRAME (minibuffer_child_frame); + + if (FRAME_LIVE_P (f1)) + { + Lisp_Object window1 = FRAME_ROOT_WINDOW (f1); + Lisp_Object frame2; + + FOR_EACH_FRAME (frames, frame2) + { + struct frame *f2 = XFRAME (frame2); + + if (EQ (frame2, minibuffer_child_frame) || FRAME_TOOLTIP_P (f2)) + continue; + else if (EQ (FRAME_MINIBUF_WINDOW (f2), window1)) + { + /* minibuffer_child_frame serves as minibuffer frame + for at least one other frame - so make it visible + and quit. */ + if (!FRAME_VISIBLE_P (f1) && !FRAME_ICONIFIED_P (f1)) + Fmake_frame_visible (frame1); + + return Qnil; + } + } + + /* No other frame found that uses minibuffer_child_frame as + minibuffer frame. If FORCE is Qnoelisp or there are + other visible frames left, delete minibuffer_child_frame + since it presumably was used by FRAME only. */ + if (EQ (force, Qnoelisp) || other_frames (f1, false, !NILP (force))) + delete_frame (minibuffer_child_frame, Qnoelisp); + } + } return Qnil; }