diff --git a/INSTALL b/INSTALL index 22abf7fd8456..ab2e800e6766 100644 --- a/INSTALL +++ b/INSTALL @@ -34,7 +34,7 @@ some of the steps manually. The more detailed description in the other sections of this guide will help you do that, so please refer to those sections if you need to. - 1. Unpacking the Emacs 25 release requires about 200 MB of free + 1. Unpacking the Emacs release requires about 200 MB of free disk space. Building Emacs uses about another 200 MB of space. The final installed Emacs uses about 150 MB of disk space. This includes the space-saving that comes from automatically diff --git a/doc/lispref/customize.texi b/doc/lispref/customize.texi index 7fea507fd032..4d88d7c8c98d 100644 --- a/doc/lispref/customize.texi +++ b/doc/lispref/customize.texi @@ -257,6 +257,13 @@ customizable variable @code{custom-unlispify-remove-prefixes} is non-@code{nil}, the item's tag will omit @var{prefix}. A group can have any number of prefixes. @end table + +@cindex @code{custom-group} property +The variables and subgroups of a group are stored in the +@code{custom-group} property of the group's symbol. @xref{Symbol +Plists}. The value of that property is a list of pairs whose +@code{car} is the variable or subgroup symbol and the @code{cdr} is +either @code{custom-variable} or @code{custom-group}. @end defmac @defopt custom-unlispify-remove-prefixes diff --git a/etc/DEBUG b/etc/DEBUG index aeb447bae337..19c75e81adae 100644 --- a/etc/DEBUG +++ b/etc/DEBUG @@ -78,6 +78,14 @@ described in the node "Auto-loading safe path" in the GDB user manual. If nothing else helps, type "source /path/to/.gdbinit RET" at the GDB prompt, to unconditionally load the GDB init file. +Running GDB on macOS sometimes brings an error message like this: + + Unable to find Mach task port for process-id NNN: (os/kern) failure (0x5). + +To overcome this, search the Internet for the phrase "Unable to find +Mach task port for process-id", and you will find detailed +instructions to follow. + *** Use the Emacs GDB UI front-end We recommend using the GUI front-end for GDB provided by Emacs. With diff --git a/lisp/net/browse-url.el b/lisp/net/browse-url.el index bdedcb2bd3ed..bf179c8782ae 100644 --- a/lisp/net/browse-url.el +++ b/lisp/net/browse-url.el @@ -877,7 +877,21 @@ The optional NEW-WINDOW argument is not used." (error "Browsing URLs is not supported on this system"))) ((eq system-type 'cygwin) (call-process "cygstart" nil nil nil url)) - (t (w32-shell-execute "open" (url-unhex-string url))))) + (t + (w32-shell-execute "open" + ;; w32-shell-execute passes file:// URLs + ;; to APIs that expect file names, so we + ;; need to unhex any %nn encoded + ;; characters in the URL. We don't do + ;; that for other URLs; in particular, + ;; default Windows mail client barfs on + ;; quotes in the MAILTO URLs, so we prefer + ;; to leave the URL with its embedded %nn + ;; encoding intact. + (if (eq t (compare-strings url nil 7 + "file://" nil nil)) + (url-unhex-string url) + url))))) (defun browse-url-default-macosx-browser (url &optional _new-window) "Invoke the macOS system's default Web browser. diff --git a/lisp/progmodes/gud.el b/lisp/progmodes/gud.el index 2664d03e723a..de398350bd2b 100644 --- a/lisp/progmodes/gud.el +++ b/lisp/progmodes/gud.el @@ -1695,8 +1695,7 @@ and source-file directory for your debugger." (gud-def gud-up "up" "<" "Up one stack frame.") (gud-def gud-down "down" ">" "Down one stack frame.") (gud-def gud-print "p %e" "\C-p" "Evaluate Python expression at point.") - ;; Is this right? - (gud-def gud-statement "! %e" "\C-e" "Execute Python statement at point.") + (gud-def gud-statement "!%e" "\C-e" "Execute Python statement at point.") ;; (setq comint-prompt-regexp "^(.*pdb[+]?) *") (setq comint-prompt-regexp "^(Pdb) *") diff --git a/lisp/textmodes/ispell.el b/lisp/textmodes/ispell.el index d03d12b37588..73a2c2da8b1f 100644 --- a/lisp/textmodes/ispell.el +++ b/lisp/textmodes/ispell.el @@ -1212,8 +1212,10 @@ Internal use.") (defun ispell--get-extra-word-characters (&optional lang) "Get the extra word characters for LANG as a character class. If LANG is omitted, get the extra word characters for the default language." - (concat "[" (string-trim-right (apply 'ispell--call-enchant-lsmod - (append '("-word-chars") (if lang `(,lang))))) "]")) + (let ((extra (string-trim-right + (apply 'ispell--call-enchant-lsmod + (append '("-word-chars") (if lang `(,lang))))))) + (if (string= extra "") "" (concat "[" extra "]")))) (defun ispell-find-enchant-dictionaries () "Find Enchant's dictionaries, and record in `ispell-enchant-dictionary-alist'." @@ -1243,6 +1245,10 @@ If LANG is omitted, get the extra word characters for the default language." (defvar ispell-last-program-name nil "Last value of `ispell-program-name'. Internal use.") +;; Allow dynamically binding ispell-base-dicts-override-alist as +;; advertised in the doc string of ispell-initialize-spellchecker-hook. +(defvar ispell-base-dicts-override-alist) + (defvar ispell-initialize-spellchecker-hook nil "Normal hook run on spellchecker initialization. This hook is run when a spellchecker is used for the first diff --git a/msdos/INSTALL b/msdos/INSTALL index 3b343f145636..3707f436625f 100644 --- a/msdos/INSTALL +++ b/msdos/INSTALL @@ -19,6 +19,15 @@ the necessary utilities; search for "MS-DOS". The configuration step (see below) will test for these utilities and will refuse to continue if any of them isn't found. +You should carefully choose the version of GCC you use to build Emacs, +because recent versions of GCC don't support building Emacs very well. +The main issue is the debug info: the DJGPP build of Emacs must use +the COFF debug info. GCC support for COFF debug info was steadily +deteriorating since GCC 5, and GCC 8.1 officially stopped supporting +the -gcoff switch, which the Emacs build process needs. We recommend +using GCC 3.4.X and Binutils 2.26; GDB 7.2 is capable to debug an +Emacs binary built by this combination. + Bootstrapping Emacs or recompiling Lisp files in the `lisp' subdirectory using the various targets in the lisp/Makefile file requires additional utilities: `find' (from Findutils), GNU `echo' and @@ -70,15 +79,15 @@ Running "config msdos" checks for several programs that are required to configure and build Emacs; if one of those programs is not found, CONFIG.BAT stops and prints an error message. -On Windows NT and Windows 2000/XP/Vista/7, running "config msdos" +On Windows NT and Windows 2000/XP and later, running "config msdos" might print an error message like "VDM has been already loaded". This is because those systems have a program called `redir.exe' which is incompatible with a program by the same name supplied with DJGPP, which is used by config.bat. To resolve this, move the DJGPP's `bin' subdirectory to the front of your PATH environment variable. -Windows Vista/7 has several bugs in its DPMI server related to memory -allocation: it fails DPMI resize memory block function, and it +Windows Vista and later has several bugs in its DPMI server related to +memory allocation: it fails DPMI resize memory block function, and it arbitrarily limits the default amount of DPMI memory to 32MB. To work around these bugs, first configure Emacs to use the `malloc' function from the DJGPP library. To this end, run CONFIG.BAT with the diff --git a/src/xdisp.c b/src/xdisp.c index 50fd6857784b..1299ba38e3d3 100644 --- a/src/xdisp.c +++ b/src/xdisp.c @@ -14027,11 +14027,6 @@ redisplay_internal (void) /* Notice any pending interrupt request to change frame size. */ do_pending_window_change (true); - /* do_pending_window_change could change the selected_window due to - frame resizing which makes the selected window too small. */ - if (WINDOWP (selected_window) && (w = XWINDOW (selected_window)) != sw) - sw = w; - /* Clear frames marked as garbaged. */ clear_garbaged_frames (); @@ -14039,6 +14034,13 @@ redisplay_internal (void) if (NILP (Vmemory_full)) prepare_menu_bars (); + /* do_pending_window_change could change the selected_window due to + frame resizing which makes the selected window too small. + prepare_menu_bars may call lisp hooks and hence also change the + selected_window. */ + if (WINDOWP (selected_window) && (w = XWINDOW (selected_window)) != sw) + sw = w; + reconsider_clip_changes (w); /* In most cases selected window displays current buffer. */ diff --git a/test/src/fns-tests.el b/test/src/fns-tests.el index 0301ceaad52e..d9cca557cf2d 100644 --- a/test/src/fns-tests.el +++ b/test/src/fns-tests.el @@ -119,10 +119,9 @@ ;; In POSIX or C locales, collation order is lexicographic. (should (string-collate-lessp "XYZZY" "xyzzy" "POSIX")) - ;; In a language specific locale, collation order is different. - (should (string-collate-lessp - "xyzzy" "XYZZY" - (if (eq system-type 'windows-nt) "enu_USA" "en_US.UTF-8"))) + ;; In a language specific locale on MS-Windows, collation order is different. + (when (eq system-type 'windows-nt) + (should (string-collate-lessp "xyzzy" "XYZZY" "enu_USA"))) ;; Ignore case. (should (string-collate-equalp "xyzzy" "XYZZY" nil t)) @@ -154,8 +153,6 @@ (9 . "aaa") (9 . "zzz") (9 . "ppp") (9 . "fff")]))) (ert-deftest fns-tests-collate-sort () - ;; See https://lists.gnu.org/r/emacs-devel/2015-10/msg02505.html. - :expected-result (if (eq system-type 'cygwin) :failed :passed) (skip-unless (fns-tests--collate-enabled-p)) ;; Punctuation and whitespace characters are relevant for POSIX. @@ -165,15 +162,16 @@ (lambda (a b) (string-collate-lessp a b "POSIX"))) '("1 1" "1 2" "1.1" "1.2" "11" "12"))) ;; Punctuation and whitespace characters are not taken into account - ;; for collation in other locales. - (should - (equal - (sort '("11" "12" "1 1" "1 2" "1.1" "1.2") - (lambda (a b) - (let ((w32-collate-ignore-punctuation t)) - (string-collate-lessp - a b (if (eq system-type 'windows-nt) "enu_USA" "en_US.UTF-8"))))) - '("11" "1 1" "1.1" "12" "1 2" "1.2"))) + ;; for collation in other locales, on MS-Windows systems. + (when (eq system-type 'windows-nt) + (should + (equal + (sort '("11" "12" "1 1" "1 2" "1.1" "1.2") + (lambda (a b) + (let ((w32-collate-ignore-punctuation t)) + (string-collate-lessp + a b "enu_USA")))) + '("11" "1 1" "1.1" "12" "1 2" "1.2")))) ;; Diacritics are different letters for POSIX, they sort lexicographical. (should @@ -181,15 +179,17 @@ (sort '("Ævar" "Agustín" "Adrian" "Eli") (lambda (a b) (string-collate-lessp a b "POSIX"))) '("Adrian" "Agustín" "Eli" "Ævar"))) - ;; Diacritics are sorted between similar letters for other locales. - (should - (equal - (sort '("Ævar" "Agustín" "Adrian" "Eli") - (lambda (a b) - (let ((w32-collate-ignore-punctuation t)) - (string-collate-lessp - a b (if (eq system-type 'windows-nt) "enu_USA" "en_US.UTF-8"))))) - '("Adrian" "Ævar" "Agustín" "Eli")))) + ;; Diacritics are sorted between similar letters for other locales, + ;; on MS-Windows systems. + (when (eq system-type 'windows-nt) + (should + (equal + (sort '("Ævar" "Agustín" "Adrian" "Eli") + (lambda (a b) + (let ((w32-collate-ignore-punctuation t)) + (string-collate-lessp + a b "enu_USA")))) + '("Adrian" "Ævar" "Agustín" "Eli"))))) (ert-deftest fns-tests-string-version-lessp () (should (string-version-lessp "foo2.png" "foo12.png"))