commit 0c5fa361e14fc5a52da62939178b720224aaa4fe (HEAD, refs/remotes/origin/master) Author: Martin Rudalics Date: Wed May 20 10:35:13 2015 +0200 Fix handling and doc-string of FRAME arg of `other-buffer' (Bug#20533) * src/buffer.c (Fother_buffer): Argument FRAME must denote a live frame. Fix doc-string (Bug#20533). diff --git a/src/buffer.c b/src/buffer.c index b09676c..148d077 100644 --- a/src/buffer.c +++ b/src/buffer.c @@ -1467,15 +1467,15 @@ DEFUN ("other-buffer", Fother_buffer, Sother_buffer, 0, 3, 0, Buffers not visible in windows are preferred to visible buffers, unless optional second argument VISIBLE-OK is non-nil. Ignore the argument BUFFER unless it denotes a live buffer. If the optional third argument -FRAME is non-nil, use that frame's buffer list instead of the selected -frame's buffer list. +FRAME specifies a live frame, then use that frame's buffer list instead +of the selected frame's buffer list. The buffer is found by scanning the selected or specified frame's buffer list first, followed by the list of all buffers. If no other buffer exists, return the buffer `*scratch*' (creating it if necessary). */) (Lisp_Object buffer, Lisp_Object visible_ok, Lisp_Object frame) { - struct frame *f = decode_any_frame (frame); + struct frame *f = decode_live_frame (frame); Lisp_Object tail = f->buffer_list, pred = f->buffer_predicate; Lisp_Object buf, notsogood = Qnil; commit 31d58d45249b3fb13a0a9a2c921f04cd9b42ff3f Author: Martin Rudalics Date: Wed May 20 08:49:23 2015 +0200 Improve `switch-to-buffer' in strongly dedicated windows (Bug#20472) * lisp/window.el (switch-to-buffer-in-dedicated-window): New option. (switch-to-buffer): If the selected window is strongly dedicated to its buffer, signal error before prompting for buffer name. Handle `switch-to-buffer-in-dedicated-window'. (Bug#20472) * doc/lispref/windows.texi (Switching Buffers): Document `switch-to-buffer-in-dedicated-window'. diff --git a/doc/lispref/windows.texi b/doc/lispref/windows.texi index 6da3582..b2bc637 100644 --- a/doc/lispref/windows.texi +++ b/doc/lispref/windows.texi @@ -2005,16 +2005,49 @@ list---both the global buffer list and the selected frame's buffer list (@pxref{Buffer List}). However, this is not done if the optional argument @var{norecord} is non-@code{nil}. -Sometimes, @code{switch-to-buffer} may be unable to display the buffer -in the selected window. This happens if the selected window is a -minibuffer window, or if the selected window is strongly dedicated to -its buffer (@pxref{Dedicated Windows}). In that case, the command -normally tries to display the buffer in some other window, by invoking -@code{pop-to-buffer} (see below). However, if the optional argument -@var{force-same-window} is non-@code{nil}, it signals an error -instead. +Sometimes, the selected window may not be suitable for displaying the +buffer. This happens if the selected window is a minibuffer window, or +if the selected window is strongly dedicated to its buffer +(@pxref{Dedicated Windows}). In such cases, the command normally tries +to display the buffer in some other window, by invoking +@code{pop-to-buffer} (see below). + +If the optional argument @var{force-same-window} is non-@code{nil} and +the selected window is not suitable for displaying the buffer, this +function always signals an error when called non-interactively. In +interactive use, if the selected window is a minibuffer window, this +function will try to use some other window instead. If the selected +window is strongly dedicated to its buffer, the option +@code{switch-to-buffer-in-dedicated-window} described next can be used +to proceed. @end deffn +@defopt switch-to-buffer-in-dedicated-window +This option, if non-@code{nil}, allows @code{switch-to-buffer} to +proceed when called interactively and the selected window is strongly +dedicated to its buffer. + +The following values are respected: + +@table @code +@item nil +Disallows switching and signals an error as in non-interactive use. + +@item prompt +Prompts the user whether to allow switching. + +@item pop +Invokes @code{pop-to-buffer} to proceed. + +@item t +Marks the selected window as non-dedicated and proceeds. +@end table + +When called non-interactively, @code{switch-to-buffer} always signals an +error when the selected window is dedicated to its buffer and +@var{force-same-window} is non-@code{nil}. +@end defopt + By default, @code{switch-to-buffer} shows the buffer at its position of @code{point}. This behavior can be tuned using the following option. diff --git a/etc/NEWS b/etc/NEWS index c4c9d77..2540756 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -165,7 +165,7 @@ buffers to allow certain parts of the text to be writable. ** A new function `directory-files-recursively' returns all matching files (recursively) under a directory. -** The new `directory-name-p' can be used to check whether a file +** The new function `directory-name-p' can be used to check whether a file name (as returned from, for instance, `file-name-all-completions' is a directory file name. It returns non-nil if the last character in the name is a forward slash. @@ -585,8 +585,8 @@ nil to disable this. fitting for use in money calculations; factorial works with non-integer inputs. -** HideIfDef mode now support full C/C++ expressions, argumented macro expansions -, interactive macro evaluation and automatic scanning of #defined symbols. +** HideIfDef mode now support full C/C++ expressions, argumented macro expansions, +interactive macro evaluation and automatic scanning of #defined symbols. *** New custom variable `hide-ifdef-header-regexp' to define C/C++ header file name patterns. Default case-insensitive .h, .hh, .hpp and .hxx. @@ -755,7 +755,7 @@ If you want the old behavior of calling the function in the buffer from which the minibuffer was entered, call it with the new argument `switch-buffer'. -** window-configurations no longer record the buffers's marks. +** window-configurations no longer record the buffers' marks. ** inhibit-modification-hooks now also inhibits lock-file checks, as well as active region handling. @@ -960,6 +960,11 @@ fullwidth frames, the behavior may depend on the toolkit used. windows without "fixing" it. It's supported by `fit-window-to-buffer', `temp-buffer-resize-mode' and `display-buffer'. ++++ +** New option `switch-to-buffer-in-dedicated-window' allows to customize +how `switch-to-buffer' proceeds interactively when the selected window +is strongly dedicated to its buffer. + ** Tearoff menus and detachable toolbars for Gtk+ has been removed. Those features have been deprecated in Gtk+ for a long time. diff --git a/lisp/window.el b/lisp/window.el index 49b7e2c..c13499f 100644 --- a/lisp/window.el +++ b/lisp/window.el @@ -6884,6 +6884,33 @@ the selected window or never appeared in it before, or if :group 'windows :version "24.3") +(defcustom switch-to-buffer-in-dedicated-window nil + "Allow switching to buffer in strongly dedicated windows. +If non-nil, allow `switch-to-buffer' to proceed when called +interactively and the selected window is strongly dedicated to +its buffer. + +The following values are recognized: + +nil - disallow switching; signal an error + +prompt - prompt user whether to allow switching + +pop - perform `pop-to-buffer' instead + +t - undedicate selected window and switch + +When called non-interactively, `switch-to-buffer' always signals +an error when the selected window is dedicated to its buffer and +FORCE-SAME-WINDOW is non-nil." + :type '(choice + (const :tag "Disallow" nil) + (const :tag "Prompt" prompt) + (const :tag "Pop" pop) + (const :tag "Allow" t)) + :group 'windows + :version "25.1") + (defun switch-to-buffer (buffer-or-name &optional norecord force-same-window) "Display buffer BUFFER-OR-NAME in the selected window. @@ -6891,10 +6918,12 @@ WARNING: This is NOT the way to work on another buffer temporarily within a Lisp program! Use `set-buffer' instead. That avoids messing with the window-buffer correspondences. -If the selected window cannot display the specified -buffer (e.g. if it is a minibuffer window or strongly dedicated -to another buffer), call `pop-to-buffer' to select the buffer in -another window. +If the selected window cannot display the specified buffer +because it is a minibuffer window or strongly dedicated to +another buffer, call `pop-to-buffer' to select the buffer in +another window. In interactive use, if the selected window is +strongly dedicated to its buffer, the value of the option +`switch-to-buffer-in-dedicated-window' specifies how to proceed. If called interactively, read the buffer name using the minibuffer. The variable `confirm-nonexistent-file-or-buffer' @@ -6911,8 +6940,9 @@ at the front of the buffer list, and do not make the window displaying it the most recently selected one. If optional argument FORCE-SAME-WINDOW is non-nil, the buffer -must be displayed in the selected window; if that is impossible, -signal an error rather than calling `pop-to-buffer'. +must be displayed in the selected window when called +non-interactively; if that is impossible, signal an error rather +than calling `pop-to-buffer'. The option `switch-to-buffer-preserve-window-point' can be used to make the buffer appear at its last position in the selected @@ -6920,7 +6950,25 @@ window. Return the buffer switched to." (interactive - (list (read-buffer-to-switch "Switch to buffer: ") nil 'force-same-window)) + (let ((force-same-window + (cond + ((window-minibuffer-p) nil) + ((not (eq (window-dedicated-p) t)) 'force-same-window) + ((pcase switch-to-buffer-in-dedicated-window + (`nil (user-error + "Cannot switch buffers in a dedicated window")) + (`prompt + (if (y-or-n-p + (format "Window is dedicated to %s; undedicate it" + (window-buffer))) + (progn + (set-window-dedicated-p nil nil) + 'force-same-window) + (user-error + "Cannot switch buffers in a dedicated window"))) + (`pop nil) + (_ (set-window-dedicated-p nil nil) 'force-same-window)))))) + (list (read-buffer-to-switch "Switch to buffer: ") nil force-same-window))) (let ((buffer (window-normalize-buffer-to-switch-to buffer-or-name))) (cond ;; Don't call set-window-buffer if it's not needed since it commit f743819b57ef519109c1b9d520d358d19a197086 Author: Paul Eggert Date: Tue May 19 19:08:11 2015 -0700 Prefer "this" to “this” in doc strings This mostly just straightens quotes introduced in my previous patch. Suggested by Dmitry Gutov in: http://lists.gnu.org/archive/html/emacs-devel/2015-05/msg00565.html * lisp/faces.el, lisp/gnus/gnus-group.el, lisp/ldefs-boot.el: * lisp/mail/supercite.el, lisp/net/tramp.el, lisp/recentf.el: * lisp/textmodes/artist.el, lisp/textmodes/rst.el: * lisp/textmodes/tildify.el, lisp/vc/ediff-util.el: * lisp/vc/log-edit.el, lisp/xt-mouse.el: Prefer straight double quotes to curved double quotes in doc strings. diff --git a/lisp/faces.el b/lisp/faces.el index d6d3766..9c087c9 100644 --- a/lisp/faces.el +++ b/lisp/faces.el @@ -892,7 +892,7 @@ where COLOR is a string or `foreground-color', and STYLE is either foreground color. :style may be omitted, which means to use a line. FRAME nil or not specified means change face on all frames. -Use `set-face-attribute' to “unspecify” underlining." +Use `set-face-attribute' to \"unspecify\" underlining." (interactive (read-face-and-attribute :underline)) (set-face-attribute face frame :underline underline)) @@ -905,7 +905,7 @@ Use `set-face-attribute' to “unspecify” underlining." INVERSE-VIDEO-P non-nil means FACE displays explicitly in inverse video. INVERSE-VIDEO-P nil means FACE explicitly is not in inverse video. FRAME nil or not specified means change face on all frames. -Use `set-face-attribute' to “unspecify” the inverse video attribute." +Use `set-face-attribute' to \"unspecify\" the inverse video attribute." (interactive (let ((list (read-face-and-attribute :inverse-video))) (list (car list) (if (cadr list) t)))) diff --git a/lisp/gnus/gnus-group.el b/lisp/gnus/gnus-group.el index 69a2482..dbeada2 100644 --- a/lisp/gnus/gnus-group.el +++ b/lisp/gnus/gnus-group.el @@ -3285,7 +3285,7 @@ mail messages or news articles in files that have numeric names." Rights is a string listing a (possibly empty) set of alphanumeric characters, each character listing a set of operations which is being - controlled. Letters are reserved for “standard” rights, listed + controlled. Letters are reserved for \"standard\" rights, listed below. Digits are reserved for implementation or site defined rights. l - lookup (mailbox is visible to LIST/LSUB commands) diff --git a/lisp/ldefs-boot.el b/lisp/ldefs-boot.el index 0d1940c..a52a19e 100644 --- a/lisp/ldefs-boot.el +++ b/lisp/ldefs-boot.el @@ -27708,7 +27708,7 @@ Convert space before point into a hard space if the context is right. If * character before point is a space character, - * character before that has “w” character syntax (i.e. it's a word + * character before that has \"w\" character syntax (i.e. it's a word constituent), * `tildify-space-pattern' matches when `looking-back' (no more than 10 characters) from before the space character, and diff --git a/lisp/mail/supercite.el b/lisp/mail/supercite.el index f6b27c2..56158cc 100644 --- a/lisp/mail/supercite.el +++ b/lisp/mail/supercite.el @@ -886,10 +886,10 @@ Action can be one of: View, Modify, Add, or Delete." (defun sc-attribs-%@-addresses (from &optional delim) "Extract the author's email terminus from email address FROM. -Match addresses of the style “name%[stuff].” when called with DELIM -of \"%\" and addresses of the style “[stuff]name@[stuff]” when +Match addresses of the style \"name%[stuff].\" when called with DELIM +of \"%\" and addresses of the style \"[stuff]name@[stuff]\" when called with DELIM \"@\". If DELIM is nil or not provided, matches -addresses of the style “name”." +addresses of the style \"name\"." (and (string-match (concat "[-[:alnum:]_.]+" delim) from 0) (substring from (match-beginning 0) @@ -897,7 +897,7 @@ addresses of the style “name”." (defun sc-attribs-!-addresses (from) "Extract the author's email terminus from email address FROM. -Match addresses of the style “[stuff]![stuff]...!name[stuff].”" +Match addresses of the style \"[stuff]![stuff]...!name[stuff].\"" (let ((eos (length from)) (mstart (string-match "![-[:alnum:]_.]+\\([^-![:alnum:]_.]\\|$\\)" from 0)) @@ -907,7 +907,7 @@ Match addresses of the style “[stuff]![stuff]...!name[stuff].”" (defun sc-attribs-<>-addresses (from) "Extract the author's email terminus from email address FROM. -Match addresses of the style “.”" +Match addresses of the style \".\"" (and (string-match "<\\(.*\\)>" from) (match-string 1 from))) diff --git a/lisp/net/tramp.el b/lisp/net/tramp.el index c71cf5e..f4ece90 100644 --- a/lisp/net/tramp.el +++ b/lisp/net/tramp.el @@ -300,8 +300,8 @@ are fit for gateways must have `tramp-default-port' at least. Notes: -When using `su' or `sudo' the phrase “open connection to a remote -host” sounds strange, but it is used nevertheless, for consistency. +When using `su' or `sudo' the phrase \"open connection to a remote +host\" sounds strange, but it is used nevertheless, for consistency. No connection is opened to a remote host, but `su' or `sudo' is started on the local host. You should specify a remote host `localhost' or the name of the local host. Another host name is diff --git a/lisp/recentf.el b/lisp/recentf.el index dd5ba86..89c1517 100644 --- a/lisp/recentf.el +++ b/lisp/recentf.el @@ -294,7 +294,7 @@ They are successively passed a file name to transform it." (function :tag "Other function"))))) (defcustom recentf-show-file-shortcuts-flag t - "Whether to show “[N]” for the Nth item up to 10. + "Whether to show \"[N]\" for the Nth item up to 10. If non-nil, `recentf-open-files' will show labels for keys that can be used as shortcuts to open the Nth file." :group 'recentf diff --git a/lisp/textmodes/artist.el b/lisp/textmodes/artist.el index 7c9002b..14cf402 100644 --- a/lisp/textmodes/artist.el +++ b/lisp/textmodes/artist.el @@ -298,7 +298,7 @@ during the flood-fill." (defcustom artist-ellipse-right-char ?\) "Character to use at the rightmost position when drawing narrow ellipses. -In this figure, it is the right parenthesis (the “)” character): +In this figure, it is the right parenthesis (the \")\" character): ----- ( ) -----" @@ -309,7 +309,7 @@ In this figure, it is the right parenthesis (the “)” character): (defcustom artist-ellipse-left-char ?\( "Character to use at the leftmost position when drawing narrow ellipses. -In this figure, it is the left parenthesis (the “(” character): +In this figure, it is the left parenthesis (the \"(\" character): ----- ( ) -----" @@ -331,7 +331,7 @@ Accept this many characters cutting off a line and still treat it as one line. Example: If `artist-vaporize-fuzziness' is 2, then those will be recognized as - lines from A to B (provided you start vaporizing them at the “*”): + lines from A to B (provided you start vaporizing them at the \"*\"): / A----*------/-----------B \\/ @@ -342,7 +342,7 @@ Example: \\/ / A----*----/\\/----------B / /\\ - (in fact, only the left part [between the A and the leftmost “/” + (in fact, only the left part [between the A and the leftmost \"/\" crossing the line] will be vaporized)." :group 'artist :type 'integer) @@ -397,8 +397,8 @@ Example: ;; This is a defvar, not a defcustom, since the custom ;; package shows lists of characters as a lists of integers, ;; which is confusing - "Characters (“color”) to use when spraying. -They should be ordered from the “lightest” to the “heaviest” + "Characters (\"color\") to use when spraying. +They should be ordered from the \"lightest\" to the \"heaviest\" since spraying replaces a light character with the next heavier one.") @@ -1275,7 +1275,7 @@ Drawing with the mouse: * Cut copies, then clears the rectangle/square. * When drawing lines or poly-lines, you can set arrows. - See below under “Arrows” for more info. + See below under \"Arrows\" for more info. * The mode line shows the currently selected drawing operation. In addition, if it has an asterisk (*) at the end, you @@ -1383,8 +1383,8 @@ Variables artist-vaporize-fuzziness Tolerance when recognizing lines artist-spray-interval Seconds between repeated sprayings artist-spray-radius Size of the spray-area - artist-spray-chars The spray-“color” - artist-spray-new-chars Initial spray-“color” + artist-spray-chars The spray-\"color\" + artist-spray-new-chars Initial spray-\"color\" Hooks @@ -2020,7 +2020,7 @@ The replacement is used to convert tabs and new-lines to spaces." (defsubst artist-replace-string (string &optional see-thru) "Replace contents at point with STRING. With optional argument SEE-THRU set to non-nil, text in the buffer -“shines thru” blanks in the STRING." +\"shines thru\" blanks in the STRING." (let ((char-list (append string nil)) ; convert the string to a list (overwrite-mode 'overwrite-mode-textual) (fill-column 32765) ; Large :-) @@ -2385,7 +2385,7 @@ in the coord." ;; Pretend we are plotting a pixel. Instead we just list it ;; (defmacro artist-put-pixel (point-list x y) - "In POINT-LIST, store a “pixel” at coord X,Y." + "In POINT-LIST, store a \"pixel\" at coord X,Y." `(setq ,point-list (append ,point-list (list (artist-new-coord ,x ,y))))) @@ -2928,7 +2928,7 @@ This is done by calling the function specified by `artist-text-renderer-function', which must return a list of strings, to be inserted in the buffer. -Text already in the buffer “shines thru” blanks in the rendered text." +Text already in the buffer \"shines thru\" blanks in the rendered text." (let* ((input-text (read-string "Type text to render: ")) (rendered-text (artist-funcall artist-text-renderer-function input-text))) (artist-text-insert-see-thru x y rendered-text))) diff --git a/lisp/textmodes/rst.el b/lisp/textmodes/rst.el index bc437b7..9d3f2a9 100644 --- a/lisp/textmodes/rst.el +++ b/lisp/textmodes/rst.el @@ -1512,8 +1512,8 @@ PFXARG (alternate behavior). This function is a bit of a swiss knife. It is meant to adjust the adornments of a section title in reStructuredText. It tries -to deal with all the possible cases gracefully and to do “the -right thing” in all cases. +to deal with all the possible cases gracefully and to do \"the +right thing\" in all cases. See the documentations of `rst-adjust-adornment-work' and `rst-promote-region' for full details. diff --git a/lisp/textmodes/tildify.el b/lisp/textmodes/tildify.el index 0eae67a..4e385a0 100644 --- a/lisp/textmodes/tildify.el +++ b/lisp/textmodes/tildify.el @@ -431,7 +431,7 @@ current `case-fold-search' setting." If * character before point is a space character, - * character before that has “w” character syntax (i.e. it's a word + * character before that has \"w\" character syntax (i.e. it's a word constituent), * `tildify-space-pattern' matches when `looking-back' (no more than 10 characters) from before the space character, and diff --git a/lisp/vc/ediff-util.el b/lisp/vc/ediff-util.el index 4ebffec..26bba40 100644 --- a/lisp/vc/ediff-util.el +++ b/lisp/vc/ediff-util.el @@ -3988,7 +3988,7 @@ and mail it to the address above. Please read this first: ---------------------- -Some “bugs” may actually be no bugs at all. For instance, if you are +Some \"bugs\" may actually be no bugs at all. For instance, if you are reporting that certain difference regions are not matched as you think they should, this is most likely due to the way Unix diff program decides what constitutes a difference region. Ediff is an Emacs interface to diff, and diff --git a/lisp/vc/log-edit.el b/lisp/vc/log-edit.el index 452977a..d595497 100644 --- a/lisp/vc/log-edit.el +++ b/lisp/vc/log-edit.el @@ -167,7 +167,7 @@ can be obtained from `log-edit-files'." (defvar log-edit-changelog-full-paragraphs t "If non-nil, include full ChangeLog paragraphs in the log. -This may be set in the “local variables” section of a ChangeLog, to +This may be set in the \"local variables\" section of a ChangeLog, to indicate the policy for that ChangeLog. A ChangeLog paragraph is a bunch of log text containing no blank lines; diff --git a/lisp/xt-mouse.el b/lisp/xt-mouse.el index 5a258a7..2bb7154 100644 --- a/lisp/xt-mouse.el +++ b/lisp/xt-mouse.el @@ -321,21 +321,21 @@ Enables basic mouse tracking, mouse motion events and finally extended tracking on terminals that support it. The following escape sequences are understood by modern xterms: -\"\\e[?1000h\" “Basic mouse mode”: Enables reports for mouse +\"\\e[?1000h\" \"Basic mouse mode\": Enables reports for mouse clicks. There is a limit to the maximum row/column position (<= 223), which can be reported in this basic mode. -\"\\e[?1002h\" “Mouse motion mode”: Enables reports for mouse +\"\\e[?1002h\" \"Mouse motion mode\": Enables reports for mouse motion events during dragging operations. -\"\\e[?1005h\" “UTF-8 coordinate extension”: Enables an extension +\"\\e[?1005h\" \"UTF-8 coordinate extension\": Enables an extension to the basic mouse mode, which uses UTF-8 characters to overcome the 223 row/column limit. This extension may conflict with non UTF-8 applications or non UTF-8 locales. -\"\\e[?1006h\" “SGR coordinate extension”: Enables a newer +\"\\e[?1006h\" \"SGR coordinate extension\": Enables a newer alternative extension to the basic mouse mode, which overcomes the 223 row/column limit without the drawbacks of the UTF-8 coordinate extension. commit 9d35bb8d6518bb913ab08bace2af08963c003177 Author: Paul Eggert Date: Tue May 19 14:59:15 2015 -0700 Fix minor quoting problems in doc strings These were glitches regardless of how or whether we tackle the problem of grave accent in doc strings. * lisp/calc/calc-aent.el (math-restore-placeholders): * lisp/ido.el (ido-ignore-buffers, ido-ignore-files): * lisp/leim/quail/cyrillic.el ("bulgarian-alt-phonetic"): * lisp/leim/quail/hebrew.el ("hebrew-new") ("hebrew-biblical-sil"): * lisp/leim/quail/thai.el ("thai-kesmanee"): * lisp/progmodes/idlw-shell.el (idlwave-shell-file-name-chars): Used curved quotes to avoid ambiguities like ‘`''’ in doc strings. * lisp/calendar/calendar.el (calendar-month-abbrev-array): * lisp/cedet/semantic/mru-bookmark.el (semantic-mrub-cache-flush-fcn): * lisp/cedet/semantic/symref.el (semantic-symref-tool-baseclass): * lisp/cedet/semantic/tag.el (semantic-tag-copy) (semantic-tag-components): * lisp/cedet/srecode/cpp.el (srecode-semantic-handle-:cpp): * lisp/cedet/srecode/texi.el (srecode-texi-texify-docstring): * lisp/emacs-lisp/byte-opt.el (byte-optimize-all-constp): * lisp/emacs-lisp/checkdoc.el (checkdoc-message-text-engine): * lisp/emacs-lisp/generator.el (iter-next): * lisp/gnus/gnus-art.el (gnus-treat-strip-list-identifiers) (gnus-article-mode-syntax-table): * lisp/net/rlogin.el (rlogin-directory-tracking-mode): * lisp/net/soap-client.el (soap-wsdl-get): * lisp/net/telnet.el (telnet-mode): * lisp/org/org-compat.el (org-number-sequence): * lisp/org/org.el (org-remove-highlights-with-change) (org-structure-template-alist): * lisp/org/ox-html.el (org-html-link-org-files-as-html): * lisp/play/handwrite.el (handwrite-10pt, handwrite-11pt) (handwrite-12pt, handwrite-13pt): * lisp/progmodes/f90.el (f90-mode, f90-abbrev-start): * lisp/progmodes/idlwave.el (idlwave-mode, idlwave-check-abbrev): * lisp/progmodes/verilog-mode.el (verilog-tool) (verilog-string-replace-matches, verilog-preprocess) (verilog-auto-insert-lisp, verilog-auto-insert-last): * lisp/textmodes/makeinfo.el (makeinfo-options): * src/font.c (Ffont_spec): Fix minor quoting problems in doc strings, e.g., missing quote, ``x'' where `x' was meant, etc. * lisp/erc/erc-backend.el (erc-process-sentinel-2): Fix minor quoting problem in other string. * lisp/leim/quail/ethiopic.el ("ethiopic"): * lisp/term/tvi970.el (tvi970-set-keypad-mode): Omit unnecessary quotes. * lisp/faces.el (set-face-attribute, set-face-underline) (set-face-inverse-video, x-create-frame-with-faces): * lisp/gnus/gnus-group.el (gnus-group-nnimap-edit-acl): * lisp/mail/supercite.el (sc-attribs-%@-addresses) (sc-attribs-!-addresses, sc-attribs-<>-addresses): * lisp/net/tramp.el (tramp-methods): * lisp/recentf.el (recentf-show-file-shortcuts-flag): * lisp/textmodes/artist.el (artist-ellipse-right-char) (artist-ellipse-left-char, artist-vaporize-fuzziness) (artist-spray-chars, artist-mode, artist-replace-string) (artist-put-pixel, artist-text-see-thru): * lisp/vc/ediff-util.el (ediff-submit-report): * lisp/vc/log-edit.el (log-edit-changelog-full-paragraphs): Use double-quotes rather than TeX markup in doc strings. * lisp/skeleton.el (skeleton-pair-insert-maybe): Reword to avoid the need for grave accent and apostrophe. * lisp/xt-mouse.el (xterm-mouse-tracking-enable-sequence): Don't use grave and acute accents to quote. diff --git a/lisp/calc/calc-aent.el b/lisp/calc/calc-aent.el index 23de53e..cc048eb 100644 --- a/lisp/calc/calc-aent.el +++ b/lisp/calc/calc-aent.el @@ -1034,7 +1034,7 @@ in Calc algebraic input.") (defun math-restore-placeholders (x) "Replace placeholders by the proper characters in the symbol x. -This includes `#' for `_' and `'' for `%'. +This includes ‘#’ for ‘_’ and ‘'’ for ‘%’. If the current Calc language does not use placeholders, return nil." (if (or (memq calc-language calc-lang-allow-underscores) (memq calc-language calc-lang-allow-percentsigns)) diff --git a/lisp/calendar/calendar.el b/lisp/calendar/calendar.el index e42a010..1612f48 100644 --- a/lisp/calendar/calendar.el +++ b/lisp/calendar/calendar.el @@ -2182,7 +2182,7 @@ in `calendar-month-name-array'. These abbreviations are used in the calendar menu entries, and can also be used in the diary file. Do not include a trailing `.' in the strings specified in this variable, though you may use such in the diary file. By -default, each string is the first ``calendar-abbrev-length' +default, each string is the first `calendar-abbrev-length' characters of the corresponding full name." :group 'calendar :set-after '(calendar-abbrev-length calendar-month-name-array) diff --git a/lisp/cedet/semantic/mru-bookmark.el b/lisp/cedet/semantic/mru-bookmark.el index b75408f..b2a2c8c 100644 --- a/lisp/cedet/semantic/mru-bookmark.el +++ b/lisp/cedet/semantic/mru-bookmark.el @@ -207,7 +207,7 @@ The resulting bookmark is then sorted within the ring." ))) (defun semantic-mrub-cache-flush-fcn () - "Function called in the `semantic-before-toplevel-cache-flush-hook`. + "Function called in the `semantic-before-toplevel-cache-flush-hook'. Cause tags in the ring to become unlinked." (let* ((ring (oref semantic-mru-bookmark-ring ring)) (len (ring-length ring)) diff --git a/lisp/cedet/semantic/symref.el b/lisp/cedet/semantic/symref.el index 2c5e3ba..ca5dd7d 100644 --- a/lisp/cedet/semantic/symref.el +++ b/lisp/cedet/semantic/symref.el @@ -351,7 +351,7 @@ until the next command is executed." (setq semantic-symref-recently-opened-buffers nil) (remove-hook 'post-command-hook 'semantic-symref-cleanup-recent-buffers-fcn) ) - + (cl-defmethod semantic-symref-result-get-tags ((result semantic-symref-result) &optional open-buffers) "Get the list of tags from the symref result RESULT. @@ -512,7 +512,7 @@ buffers that were opened." (searchtype :initarg :searchtype :type symbol :documentation "The type of search to do. -Values could be `symbol, `regexp, 'tagname, or 'completion.") +Values could be 'symbol, 'regexp, 'tagname, or 'completion.") (searchscope :initarg :searchscope :type symbol :documentation diff --git a/lisp/cedet/semantic/tag.el b/lisp/cedet/semantic/tag.el index 3ad192b..545ca91 100644 --- a/lisp/cedet/semantic/tag.el +++ b/lisp/cedet/semantic/tag.el @@ -621,7 +621,7 @@ buffer, the originating buffer file name is kept in the `:filename' property of the copied tag. If KEEP-FILE is a string, and the originating buffer is NOT available, then KEEP-FILE is stored on the `:filename' property. -This runs the tag hook `unlink-copy-hook`." +This runs the tag hook `unlink-copy-hook'." ;; Right now, TAG is a list. (let ((copy (semantic-tag-clone tag name))) @@ -958,7 +958,7 @@ Return nil if TAG is not of class 'alias." "Return a list of components for TAG. A Component is a part of TAG which itself may be a TAG. Examples include the elements of a structure in a -tag of class `type, or the list of arguments to a +tag of class 'type, or the list of arguments to a tag of class 'function." ) diff --git a/lisp/cedet/srecode/cpp.el b/lisp/cedet/srecode/cpp.el index ec92ae3..e77e05c 100644 --- a/lisp/cedet/srecode/cpp.el +++ b/lisp/cedet/srecode/cpp.el @@ -84,7 +84,7 @@ HEADER - Shown section if in a header file." ;;;###autoload (defun srecode-semantic-handle-:cpp (dict) "Add macros into the dictionary DICT based on the current c file. -Calls `srecode-semantic-handle-:c. +Calls `srecode-semantic-handle-:c'. Also adds the following: - nothing -" (srecode-semantic-handle-:c dict) diff --git a/lisp/cedet/srecode/texi.el b/lisp/cedet/srecode/texi.el index 5c3f21c..be75f37 100644 --- a/lisp/cedet/srecode/texi.el +++ b/lisp/cedet/srecode/texi.el @@ -241,11 +241,11 @@ This is to take advantage of TeXinfo's markup symbols." For instances where CLASS is the class being referenced, do not Xref that class. - `function' => @dfn{function} - `variable' => @code{variable} - `class' => @code{class} @xref{class} - `unknown' => @code{unknown} - \"text\" => ``text'' + function => @dfn{function} + variable => @code{variable} + class => @code{class} @xref{class} + unknown => @code{unknown} + \" text \" => `` text '' 'quoteme => @code{quoteme} non-nil => non-@code{nil} t => @code{t} diff --git a/lisp/emacs-lisp/byte-opt.el b/lisp/emacs-lisp/byte-opt.el index 06a1106..3014793 100644 --- a/lisp/emacs-lisp/byte-opt.el +++ b/lisp/emacs-lisp/byte-opt.el @@ -566,7 +566,7 @@ (cons fn args))))))) (defun byte-optimize-all-constp (list) - "Non-nil if all elements of LIST satisfy `macroexp-const-p" + "Non-nil if all elements of LIST satisfy `macroexp-const-p'." (let ((constant t)) (while (and list constant) (unless (macroexp-const-p (car list)) @@ -1225,7 +1225,7 @@ window-left-child window-left-column window-margins window-minibuffer-p window-next-buffers window-next-sibling window-new-normal window-new-total window-normal-size window-parameter window-parameters - window-parent window-pixel-edges window-point window-prev-buffers + window-parent window-pixel-edges window-point window-prev-buffers window-prev-sibling window-redisplay-end-trigger window-scroll-bars window-start window-text-height window-top-child window-top-line window-total-height window-total-width window-use-time window-vscroll diff --git a/lisp/emacs-lisp/checkdoc.el b/lisp/emacs-lisp/checkdoc.el index b3ef44a..fc257d0 100644 --- a/lisp/emacs-lisp/checkdoc.el +++ b/lisp/emacs-lisp/checkdoc.el @@ -2405,7 +2405,7 @@ Argument END is the maximum bounds to search in." According to the documentation for the function `error', the error list should not end with a period, and should start with a capital letter. The function `y-or-n-p' has similar constraints. -Argument TYPE specifies the type of question, such as `error or `y-or-n-p." +Argument TYPE specifies the type of question, such as `error' or `y-or-n-p'." ;; If type is nil, then attempt to derive it. (if (not type) (save-excursion diff --git a/lisp/emacs-lisp/generator.el b/lisp/emacs-lisp/generator.el index c8e61f3..08e1b7c 100644 --- a/lisp/emacs-lisp/generator.el +++ b/lisp/emacs-lisp/generator.el @@ -704,7 +704,7 @@ of values. Callers can retrieve each value using `iter-next'." (defun iter-next (iterator &optional yield-result) "Extract a value from an iterator. -YIELD-RESULT becomes the return value of `iter-yield` in the +YIELD-RESULT becomes the return value of `iter-yield' in the context of the generator. This routine raises the `iter-end-of-sequence' condition if the diff --git a/lisp/erc/erc-backend.el b/lisp/erc/erc-backend.el index 8ce199f..ee81113 100644 --- a/lisp/erc/erc-backend.el +++ b/lisp/erc/erc-backend.el @@ -652,7 +652,7 @@ EVENT is the message received from the closed connection process." (run-at-time erc-server-reconnect-timeout nil #'erc-process-sentinel-2 event buffer) - (error (concat "`erc-server-reconnect-timeout`" + (error (concat "`erc-server-reconnect-timeout'" " must be a number"))))))))))) (defun erc-process-sentinel-1 (event buffer) diff --git a/lisp/faces.el b/lisp/faces.el index 54e444b..d6d3766 100644 --- a/lisp/faces.el +++ b/lisp/faces.el @@ -619,7 +619,7 @@ VALUE must be a string specifying the font family `:foundry' VALUE must be a string specifying the font foundry, -e.g. ``adobe''. If a font foundry is specified, wild-cards `*' +e.g., \"adobe\". If a font foundry is specified, wild-cards `*' and `?' are allowed. `:width' @@ -892,7 +892,7 @@ where COLOR is a string or `foreground-color', and STYLE is either foreground color. :style may be omitted, which means to use a line. FRAME nil or not specified means change face on all frames. -Use `set-face-attribute' to ``unspecify'' underlining." +Use `set-face-attribute' to “unspecify” underlining." (interactive (read-face-and-attribute :underline)) (set-face-attribute face frame :underline underline)) @@ -905,7 +905,7 @@ Use `set-face-attribute' to ``unspecify'' underlining." INVERSE-VIDEO-P non-nil means FACE displays explicitly in inverse video. INVERSE-VIDEO-P nil means FACE explicitly is not in inverse video. FRAME nil or not specified means change face on all frames. -Use `set-face-attribute' to ``unspecify'' the inverse video attribute." +Use `set-face-attribute' to “unspecify” the inverse video attribute." (interactive (let ((list (read-face-and-attribute :inverse-video))) (list (car list) (if (cadr list) t)))) @@ -2042,7 +2042,7 @@ Value is the new parameter list." "Create and return a frame with frame parameters PARAMETERS. If PARAMETERS specify a frame name, handle X geometry resources for that name. If PARAMETERS includes a `reverse' parameter, or -the X resource ``reverseVideo'' is present, handle that." +the X resource \"reverseVideo\" is present, handle that." (setq parameters (x-handle-named-frame-geometry parameters)) (let* ((params (copy-tree parameters)) (visibility-spec (assq 'visibility parameters)) diff --git a/lisp/forms.el b/lisp/forms.el index aa57a66..bccb4a0 100644 --- a/lisp/forms.el +++ b/lisp/forms.el @@ -1755,7 +1755,7 @@ Otherwise enables edit mode if the visited file is writable." With ARG: store the record after the current one. If `forms-new-record-filter' contains the name of a function, it is called to fill (some of) the fields with default values. -If `forms-insert-after is non-nil, the default behavior is to insert +If `forms-insert-after' is non-nil, the default behavior is to insert after the current record." (interactive "P") diff --git a/lisp/gnus/canlock.el b/lisp/gnus/canlock.el index 4082b87..6ebd533 100644 --- a/lisp/gnus/canlock.el +++ b/lisp/gnus/canlock.el @@ -35,8 +35,9 @@ ;; Verifying Cancel-Lock is mainly a function of news servers, however, ;; you can verify your own article using the command `canlock-verify' in ;; the (raw) article buffer. You will be prompted for the password for -;; each time if the option `canlock-password' or `canlock-password-for- -;; verify' is nil. Note that setting these options is a bit unsafe. +;; each time if the option `canlock-password' or +;; `canlock-password-for-verify' is nil. Note that setting these +;; options is a bit unsafe. ;;; Code: diff --git a/lisp/gnus/deuglify.el b/lisp/gnus/deuglify.el index 331b99b..df54f74 100644 --- a/lisp/gnus/deuglify.el +++ b/lisp/gnus/deuglify.el @@ -110,7 +110,7 @@ ;; > Bye, John ;; ;; Repairing the attribution line will be done by function -;; `gnus-article-outlook-repair-attribution which calls other function that +;; `gnus-article-outlook-repair-attribution' which calls other function that ;; try to recognize and repair broken attribution lines. See variable ;; `gnus-outlook-deuglify-attrib-cut-regexp' for stuff that should be ;; cut off from the beginning of an attribution line and variable @@ -121,7 +121,7 @@ ;; Rearranging the article so that the cited text appears above the ;; new text will be done by function ;; `gnus-article-outlook-rearrange-citation'. This function calls -;; `gnus-article-outlook-repair-attribution to find and repair an attribution +;; `gnus-article-outlook-repair-attribution' to find and repair an attribution ;; line. ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; @@ -177,14 +177,14 @@ ;; As I said before there may (or will) be a few false positives on ;; unwrapping cited lines with `gnus-article-outlook-unwrap-lines'. ;; -;; `gnus-article-outlook-repair-attribution will only fix the first +;; `gnus-article-outlook-repair-attribution' will only fix the first ;; attribution line found in the article. Furthermore it fixed to ;; certain kinds of attributions. And there may be horribly many ;; false positives, vanishing lines and so on -- so don't trust your ;; eyes. Again I recommend manual invocation. ;; ;; `gnus-article-outlook-rearrange-citation' carries all the limitations of -;; `gnus-article-outlook-repair-attribution. +;; `gnus-article-outlook-repair-attribution'. ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; diff --git a/lisp/gnus/gnus-art.el b/lisp/gnus/gnus-art.el index 989a424..7630afb 100644 --- a/lisp/gnus/gnus-art.el +++ b/lisp/gnus/gnus-art.el @@ -1256,7 +1256,7 @@ how to control what it hides." :type gnus-article-treat-custom) (defcustom gnus-treat-strip-list-identifiers 'head - "Strip list identifiers from `gnus-list-identifiers`. + "Strip list identifiers from `gnus-list-identifiers'. Valid values are nil, t, `head', `first', `last', an integer or a predicate. See Info node `(gnus)Customizing Articles'." :version "21.1" @@ -1735,7 +1735,7 @@ regexp." (modify-syntax-entry ?` " " table) table) "Syntax table used in article mode buffers. -Initialized from `text-mode-syntax-table.") +Initialized from `text-mode-syntax-table'.") (defvar gnus-save-article-buffer nil) diff --git a/lisp/gnus/gnus-group.el b/lisp/gnus/gnus-group.el index ff839d7..69a2482 100644 --- a/lisp/gnus/gnus-group.el +++ b/lisp/gnus/gnus-group.el @@ -3285,7 +3285,7 @@ mail messages or news articles in files that have numeric names." Rights is a string listing a (possibly empty) set of alphanumeric characters, each character listing a set of operations which is being - controlled. Letters are reserved for ``standard'' rights, listed + controlled. Letters are reserved for “standard” rights, listed below. Digits are reserved for implementation or site defined rights. l - lookup (mailbox is visible to LIST/LSUB commands) diff --git a/lisp/ido.el b/lisp/ido.el index 60a59d6..b97f72c 100644 --- a/lisp/ido.el +++ b/lisp/ido.el @@ -377,7 +377,7 @@ use either \\[customize] or the function `ido-mode'." '("\\` ") "List of regexps or functions matching buffer names to ignore. For example, traditional behavior is not to list buffers whose names begin -with a space, for which the regexp is `\\` '. See the source file for +with a space, for which the regexp is ‘\\` ’. See the source file for example functions that filter buffer names." :type '(repeat (choice regexp function)) :group 'ido) @@ -386,7 +386,7 @@ example functions that filter buffer names." '("\\`CVS/" "\\`#" "\\`.#" "\\`\\.\\./" "\\`\\./") "List of regexps or functions matching file names to ignore. For example, traditional behavior is not to list files whose names begin -with a #, for which the regexp is `\\`#'. See the source file for +with a #, for which the regexp is ‘\\`#’. See the source file for example functions that filter filenames." :type '(repeat (choice regexp function)) :group 'ido) diff --git a/lisp/leim/quail/cyrillic.el b/lisp/leim/quail/cyrillic.el index 08d53ea..7caa5ec 100644 --- a/lisp/leim/quail/cyrillic.el +++ b/lisp/leim/quail/cyrillic.el @@ -1244,8 +1244,8 @@ Unicode based." This phonetic layout replaces all the Latin letters with Bulgarian \(Cyrillic) letters based on similarities in their pronunciation or look. -Note that, since the letters 'щ', 'ь', 'ю' and 'я' are attached to the -']', '\', '`' and '[' keys respectively, Caps Lock does not affect them." +Note that, since the letters ‘щ’, ‘ь’, ‘ю’ and ‘я’ are attached to the +‘]’, ‘\’, ‘`’ and ‘[’ keys respectively, Caps Lock does not affect them." nil t t t t nil nil nil nil nil t) ;; Ю 1! 2@ 3№ 4$ 5% 6€ 7§ 8* 9( 0) -– =+ ьѝ diff --git a/lisp/leim/quail/ethiopic.el b/lisp/leim/quail/ethiopic.el index d99f649..7a1cddf 100644 --- a/lisp/leim/quail/ethiopic.el +++ b/lisp/leim/quail/ethiopic.el @@ -49,8 +49,8 @@ C-F9 or `M-x ethio-toggle-space' Toggles space characters for keyboard input. The current mode is indicated in mode-line, whether by `_' (ASCII space) or `፡' (Ethiopic colon-like word separator). Even in the `፡' mode, an - ASCII space is inserted if the point is preceded by `an Ethiopic - punctuation followed by zero or more ASCII spaces'. + ASCII space is inserted if the point is preceded by an Ethiopic + punctuation char that is followed by zero or more ASCII spaces. S-F5 or `M-x ethio-toggle-punctuation' Toggles ASCII punctuation and Ethiopic punctuation for keyboard input. diff --git a/lisp/leim/quail/hebrew.el b/lisp/leim/quail/hebrew.el index fe06b27..5d63e40 100644 --- a/lisp/leim/quail/hebrew.el +++ b/lisp/leim/quail/hebrew.el @@ -113,8 +113,8 @@ Only Hebrew-related characters are considered. Based on latest draft of SI-1452 keyboard layout. Only Hebrew-related characters are considered. - '`' is used to switch levels instead of Alt-Gr. -Geresh is mapped to '`k'. + ‘`’ is used to switch levels instead of Alt-Gr. +Geresh is mapped to ‘`k’. " nil t t t t nil nil nil nil nil t) (quail-define-rules @@ -603,8 +603,8 @@ Not suitable for modern Hebrew input. Based on Society of Biblical Literature's SIL keyboard layout. Phonetic and not suitable for modern Hebrew input. - '`' is used to switch levels instead of Alt-Gr. - Euro Sign (€) is mapped to 'Z'. + ‘`’ is used to switch levels instead of Alt-Gr. + Euro Sign (€) is mapped to ‘Z’. " nil t t t t nil nil nil nil nil t) (quail-define-rules diff --git a/lisp/leim/quail/thai.el b/lisp/leim/quail/thai.el index 3717104..2554686 100644 --- a/lisp/leim/quail/thai.el +++ b/lisp/leim/quail/thai.el @@ -46,9 +46,9 @@ "Thai Kesmanee input method with TIS620 keyboard layout The difference from the ordinal Thai keyboard: - '฿' and '๏' are assigned to '\\' and '|' respectively, - 'ฃ' and 'ฅ' are assigned to '`' and '~' respectively, - Don't know where to assign characters '๚' and '๛'." + ‘฿’ and ‘๏’ are assigned to ‘\\’ and ‘|’ respectively, + ‘ฃ’ and ‘ฅ’ are assigned to ‘`’ and ‘~’ respectively, + Don't know where to assign characters ‘๚’ and ‘๛’." nil t t t t nil nil nil nil nil t) (thai-generate-quail-map diff --git a/lisp/mail/supercite.el b/lisp/mail/supercite.el index cf3aac1..f6b27c2 100644 --- a/lisp/mail/supercite.el +++ b/lisp/mail/supercite.el @@ -886,10 +886,10 @@ Action can be one of: View, Modify, Add, or Delete." (defun sc-attribs-%@-addresses (from &optional delim) "Extract the author's email terminus from email address FROM. -Match addresses of the style ``name%[stuff].'' when called with DELIM -of \"%\" and addresses of the style ``[stuff]name@[stuff]'' when +Match addresses of the style “name%[stuff].” when called with DELIM +of \"%\" and addresses of the style “[stuff]name@[stuff]” when called with DELIM \"@\". If DELIM is nil or not provided, matches -addresses of the style ``name''." +addresses of the style “name”." (and (string-match (concat "[-[:alnum:]_.]+" delim) from 0) (substring from (match-beginning 0) @@ -897,7 +897,7 @@ addresses of the style ``name''." (defun sc-attribs-!-addresses (from) "Extract the author's email terminus from email address FROM. -Match addresses of the style ``[stuff]![stuff]...!name[stuff].''" +Match addresses of the style “[stuff]![stuff]...!name[stuff].”" (let ((eos (length from)) (mstart (string-match "![-[:alnum:]_.]+\\([^-![:alnum:]_.]\\|$\\)" from 0)) @@ -907,7 +907,7 @@ Match addresses of the style ``[stuff]![stuff]...!name[stuff].''" (defun sc-attribs-<>-addresses (from) "Extract the author's email terminus from email address FROM. -Match addresses of the style ``.''" +Match addresses of the style “.”" (and (string-match "<\\(.*\\)>" from) (match-string 1 from))) diff --git a/lisp/net/rlogin.el b/lisp/net/rlogin.el index d075820..e71179b 100644 --- a/lisp/net/rlogin.el +++ b/lisp/net/rlogin.el @@ -235,14 +235,14 @@ variable." "Do remote or local directory tracking, or disable entirely. If called with no prefix argument or a unspecified prefix argument (just -``\\[universal-argument]'' with no number) do remote directory tracking via +`\\[universal-argument]' with no number) do remote directory tracking via ange-ftp. If called as a function, give it no argument. If called with a negative prefix argument, disable directory tracking entirely. If called with a positive, numeric prefix argument, e.g. -``\\[universal-argument] 1 M-x rlogin-directory-tracking-mode\'', +`\\[universal-argument] 1 M-x rlogin-directory-tracking-mode', then do directory tracking but assume the remote filesystem is the same as the local system. This only works in general if the remote machine and the local one share the same directories (e.g. through NFS)." diff --git a/lisp/net/soap-client.el b/lisp/net/soap-client.el index b19a432..7740574 100644 --- a/lisp/net/soap-client.el +++ b/lisp/net/soap-client.el @@ -490,7 +490,7 @@ elements named \"foo\" exist in the WSDL you could use: (soap-wsdl-get \"foo\" WSDL 'soap-message-p) -If USE-LOCAL-ALIAS-TABLE is not nil, `soap-local-xmlns` will be +If USE-LOCAL-ALIAS-TABLE is not nil, `soap-local-xmlns' will be used to resolve the namespace alias." (let ((alias-table (soap-wsdl-alias-table wsdl)) namespace element-name element) diff --git a/lisp/net/telnet.el b/lisp/net/telnet.el index f844f83..6d9f408 100644 --- a/lisp/net/telnet.el +++ b/lisp/net/telnet.el @@ -237,7 +237,7 @@ Normally input is edited in Emacs and sent a line at a time." (define-derived-mode telnet-mode comint-mode "Telnet" "This mode is for using telnet (or rsh) from a buffer to another host. It has most of the same commands as comint-mode. -There is a variable ``telnet-interrupt-string'' which is the character +There is a variable `telnet-interrupt-string' which is the character sent to try to stop execution of a job on the remote host. Data is sent to the remote host when RET is typed." (set (make-local-variable 'window-point-insertion-type) t) diff --git a/lisp/net/tramp-cmds.el b/lisp/net/tramp-cmds.el index d45c0aa..89baaa4 100644 --- a/lisp/net/tramp-cmds.el +++ b/lisp/net/tramp-cmds.el @@ -157,7 +157,7 @@ This includes password cache, file cache, connection cache, buffers." (interactive "P") (if arg (insert tramp-version) (message tramp-version))) -;; Make the `reporter` functionality available for making bug reports about +;; Make the "reporter" functionality available for making bug reports about ;; the package. A most useful piece of code. (autoload 'reporter-submit-bug-report "reporter") diff --git a/lisp/net/tramp.el b/lisp/net/tramp.el index 10bb769..c71cf5e 100644 --- a/lisp/net/tramp.el +++ b/lisp/net/tramp.el @@ -300,8 +300,8 @@ are fit for gateways must have `tramp-default-port' at least. Notes: -When using `su' or `sudo' the phrase `open connection to a remote -host' sounds strange, but it is used nevertheless, for consistency. +When using `su' or `sudo' the phrase “open connection to a remote +host” sounds strange, but it is used nevertheless, for consistency. No connection is opened to a remote host, but `su' or `sudo' is started on the local host. You should specify a remote host `localhost' or the name of the local host. Another host name is diff --git a/lisp/org/org-bbdb.el b/lisp/org/org-bbdb.el index a0711cc..c489385 100644 --- a/lisp/org/org-bbdb.el +++ b/lisp/org/org-bbdb.el @@ -37,7 +37,7 @@ ;; the diary using bbdb-anniv.el. ;; ;; Put the following in /somewhere/at/home/diary.org and make sure -;; that this file is in `org-agenda-files` +;; that this file is in `org-agenda-files'. ;; ;; %%(org-bbdb-anniversaries) ;; diff --git a/lisp/org/org-compat.el b/lisp/org/org-compat.el index 9c92903..d3c477e 100644 --- a/lisp/org/org-compat.el +++ b/lisp/org/org-compat.el @@ -241,7 +241,7 @@ ignored in this case." (or window (selected-window))) (defun org-number-sequence (from &optional to inc) - "Call `number-sequence or emulate it." + "Call `number-sequence' or emulate it." (if (fboundp 'number-sequence) (number-sequence from to inc) (if (or (not to) (= from to)) diff --git a/lisp/org/org.el b/lisp/org/org.el index 54924a9..ea5d56e 100644 --- a/lisp/org/org.el +++ b/lisp/org/org.el @@ -1452,7 +1452,7 @@ changed by an edit command." (defcustom org-remove-highlights-with-change t "Non-nil means any change to the buffer will remove temporary highlights. Such highlights are created by `org-occur' and `org-clock-display'. -When nil, `C-c C-c needs to be used to get rid of the highlights. +When nil, `C-c C-c' needs to be used to get rid of the highlights. The highlights created by `org-preview-latex-fragment' always need `C-c C-c' to be removed." :group 'org-sparse-trees @@ -12077,7 +12077,7 @@ This is a list of abbreviation keys and values. The value gets inserted if you type `<' followed by the key and then press the completion key, usually `M-TAB'. %file will be replaced by a file name after prompting for the file using completion. The cursor will be placed at the position -of the `?` in the template. +of the `?' in the template. There are two templates for each key, the first uses the original Org syntax, the second uses Emacs Muse-like syntax tags. These Muse-like tags become the default when the /org-mtags.el/ module has been loaded. See also the diff --git a/lisp/org/ox-html.el b/lisp/org/ox-html.el index 36984b5..144b58b 100644 --- a/lisp/org/ox-html.el +++ b/lisp/org/ox-html.el @@ -711,7 +711,7 @@ t Synonym for `mathjax'." When `org-mode' is exporting an `org-mode' file to HTML, links to non-html files are directly put into a href tag in HTML. However, links to other Org-mode files (recognized by the -extension `.org.) should become links to the corresponding html +extension `.org') should become links to the corresponding html file, assuming that the linked `org-mode' file will also be converted to HTML. When nil, the links still point to the plain `.org' file." diff --git a/lisp/play/handwrite.el b/lisp/play/handwrite.el index 32ea663..62a8fe4 100644 --- a/lisp/play/handwrite.el +++ b/lisp/play/handwrite.el @@ -279,7 +279,7 @@ Variables: `handwrite-linespace' (default 12) (handwrite-set-pagenumber-on))) (defun handwrite-10pt () - "Specify 10-point output for `handwrite. + "Specify 10-point output for `handwrite'. This sets `handwrite-fontsize' to 10 and finds correct values for `handwrite-linespace' and `handwrite-numlines'." (interactive) @@ -290,7 +290,7 @@ values for `handwrite-linespace' and `handwrite-numlines'." (defun handwrite-11pt () - "Specify 11-point output for `handwrite. + "Specify 11-point output for `handwrite'. This sets `handwrite-fontsize' to 11 and finds correct values for `handwrite-linespace' and `handwrite-numlines'." (interactive) @@ -300,7 +300,7 @@ values for `handwrite-linespace' and `handwrite-numlines'." (message "Handwrite output size set to 11 points")) (defun handwrite-12pt () - "Specify 12-point output for `handwrite. + "Specify 12-point output for `handwrite'. This sets `handwrite-fontsize' to 12 and finds correct values for `handwrite-linespace' and `handwrite-numlines'." (interactive) @@ -310,7 +310,7 @@ values for `handwrite-linespace' and `handwrite-numlines'." (message "Handwrite output size set to 12 points")) (defun handwrite-13pt () - "Specify 13-point output for `handwrite. + "Specify 13-point output for `handwrite'. This sets `handwrite-fontsize' to 13 and finds correct values for `handwrite-linespace' and `handwrite-numlines'." (interactive) diff --git a/lisp/progmodes/cc-defs.el b/lisp/progmodes/cc-defs.el index d0beab1..d8854f4 100644 --- a/lisp/progmodes/cc-defs.el +++ b/lisp/progmodes/cc-defs.el @@ -1983,7 +1983,7 @@ system." (defvar c-lang-const-expansion nil) -;; Ugly hack to pull in the definition of `cc-bytecomp-compiling-or-loading` +;; Ugly hack to pull in the definition of `cc-bytecomp-compiling-or-loading' ;; from cc-bytecomp to make it available at loadtime. This is the same ;; mechanism used in cc-mode.el for `c-populate-syntax-table'. (defalias 'cc-bytecomp-compiling-or-loading diff --git a/lisp/progmodes/f90.el b/lisp/progmodes/f90.el index 6264d3b..74e3234 100644 --- a/lisp/progmodes/f90.el +++ b/lisp/progmodes/f90.el @@ -1113,7 +1113,7 @@ For fixed format code, use `fortran-mode'. indented line. \\[f90-indent-subprogram] indents the current subprogram. -Type `? or `\\[help-command] to display a list of built-in\ +Type `?' or `\\[help-command]' to display a list of built-in\ abbrevs for F90 keywords. Key definitions: @@ -2267,7 +2267,7 @@ Leave point at the end of line." ;; Abbrevs and keywords. (defun f90-abbrev-start () - "Typing `\\[help-command] or `? lists all the F90 abbrevs. + "Typing `\\[help-command]' or `?' lists all the F90 abbrevs. Any other key combination is executed normally." (interactive "*") (self-insert-command 1) diff --git a/lisp/progmodes/gdb-mi.el b/lisp/progmodes/gdb-mi.el index 486d672..4af8ac6 100644 --- a/lisp/progmodes/gdb-mi.el +++ b/lisp/progmodes/gdb-mi.el @@ -2376,9 +2376,9 @@ Sets `gdb-thread-number' to new id." (let* ((result (gdb-json-string output-field)) (thread-id (bindat-get-field result 'id))) (gdb-setq-thread-number thread-id) - ;; Typing `thread N` in GUD buffer makes GDB emit `^done` followed - ;; by `=thread-selected` notification. `^done` causes `gdb-update` - ;; as usually. Things happen to fast and second call (from + ;; Typing `thread N' in GUD buffer makes GDB emit `^done' followed + ;; by `=thread-selected' notification. `^done' causes `gdb-update' + ;; as usually. Things happen too fast and second call (from ;; gdb-thread-selected handler) gets cut off by our beloved ;; pending triggers. ;; Solution is `gdb-wait-for-pending' macro: it guarantees that its diff --git a/lisp/progmodes/idlw-shell.el b/lisp/progmodes/idlw-shell.el index 02a8ec8..0239702 100644 --- a/lisp/progmodes/idlw-shell.el +++ b/lisp/progmodes/idlw-shell.el @@ -229,7 +229,7 @@ to set this option to nil." (defcustom idlwave-shell-file-name-chars "~/A-Za-z0-9+:_.$#%={}\\- " "The characters allowed in file names, as a string. -Used for file name completion. Must not contain `'', `,' and `\"' +Used for file name completion. Must not contain ‘'’, ‘,’ and ‘\"’ because these are used as separators by IDL." :group 'idlwave-shell-general-setup :type 'string) diff --git a/lisp/progmodes/idlwave.el b/lisp/progmodes/idlwave.el index 7e269cb..45f080c 100644 --- a/lisp/progmodes/idlwave.el +++ b/lisp/progmodes/idlwave.el @@ -1837,7 +1837,7 @@ The main features of this mode are 5. Code Templates and Abbreviations -------------------------------- Many Abbreviations are predefined to expand to code fragments and templates. - The abbreviations start generally with a `\\`. Some examples: + The abbreviations start generally with a `\\'. Some examples: \\pr PROCEDURE template \\fu FUNCTION template @@ -2047,7 +2047,7 @@ If optional argument RESERVED is non-nil then the expansion consists of reserved words, which will be capitalized if `idlwave-reserved-word-upcase' is non-nil. Otherwise, the abbrev will be capitalized if `idlwave-abbrev-change-case' -is non-nil, unless its value is \`down in which case the abbrev will be +is non-nil, unless its value is `down' in which case the abbrev will be made into all lowercase. Returns non-nil if abbrev is left expanded." (if (idlwave-quoted) diff --git a/lisp/progmodes/verilog-mode.el b/lisp/progmodes/verilog-mode.el index a1ad49e..4b0cb0f 100644 --- a/lisp/progmodes/verilog-mode.el +++ b/lisp/progmodes/verilog-mode.el @@ -519,8 +519,8 @@ take you to the next lint error." (defvar verilog-tool 'verilog-linter "Which tool to use for building compiler-command. -Either nil, `verilog-linter, `verilog-compiler, -`verilog-coverage, `verilog-preprocessor, or `verilog-simulator. +Either nil, `verilog-linter', `verilog-compiler', +`verilog-coverage', `verilog-preprocessor', or `verilog-simulator'. Alternatively use the \"Choose Compilation Action\" menu. See `verilog-set-compile-command' for more information.") @@ -1674,7 +1674,7 @@ If third arg START is non-nil, start search at that index in STRING." (defsubst verilog-string-replace-matches (from-string to-string fixedcase literal string) "Replace occurrences of FROM-STRING with TO-STRING. -FIXEDCASE and LITERAL as in `replace-match`. STRING is what to replace. +FIXEDCASE and LITERAL as in `replace-match'. STRING is what to replace. The case (verilog-string-replace-matches \"o\" \"oo\" nil nil \"foobar\") will break, as the o's continuously replace. xa -> x works ok though." ;; Hopefully soon to an Emacs built-in @@ -5201,7 +5201,7 @@ becomes: (defun verilog-preprocess (&optional command filename) "Preprocess the buffer, similar to `compile', but put output in Verilog-Mode. Takes optional COMMAND or defaults to `verilog-preprocessor', and -FILENAME to find directory to run in, or defaults to `buffer-file-name`." +FILENAME to find directory to run in, or defaults to `buffer-file-name'." (interactive (list (let ((default (verilog-expand-command verilog-preprocessor))) @@ -12648,7 +12648,7 @@ driver/monitor using AUTOINST in the testbench." (defun verilog-auto-insert-lisp () "Expand AUTOINSERTLISP statements, as part of \\[verilog-auto]. The Lisp code provided is called before other AUTOS are expanded, -and the Lisp code generally will call `insert` to insert text +and the Lisp code generally will call `insert' to insert text into the current file beginning on the line after the AUTOINSERTLISP. @@ -12713,7 +12713,7 @@ text: (defun verilog-auto-insert-last () "Expand AUTOINSERTLAST statements, as part of \\[verilog-auto]. The Lisp code provided is called after all other AUTOS have been -expanded, and the Lisp code generally will call `insert` to +expanded, and the Lisp code generally will call `insert' to insert text into the current file beginning on the line after the AUTOINSERTLAST. diff --git a/lisp/recentf.el b/lisp/recentf.el index 37937ec..dd5ba86 100644 --- a/lisp/recentf.el +++ b/lisp/recentf.el @@ -294,7 +294,7 @@ They are successively passed a file name to transform it." (function :tag "Other function"))))) (defcustom recentf-show-file-shortcuts-flag t - "Whether to show ``[N]'' for the Nth item up to 10. + "Whether to show “[N]” for the Nth item up to 10. If non-nil, `recentf-open-files' will show labels for keys that can be used as shortcuts to open the Nth file." :group 'recentf diff --git a/lisp/skeleton.el b/lisp/skeleton.el index 84b0e0a..1363422 100644 --- a/lisp/skeleton.el +++ b/lisp/skeleton.el @@ -502,8 +502,9 @@ Pairing is also prohibited if we are right after a quoting character such as backslash. If a match is found in `skeleton-pair-alist', that is inserted, else -the defaults are used. These are (), [], {}, <> and `' for the -symmetrical ones, and the same character twice for the others." +the defaults are used. These are (), [], {}, <> and (grave +accent, apostrophe) for the paired ones, and the same character +twice for the others." (interactive "*P") (if (or arg (not skeleton-pair)) (self-insert-command (prefix-numeric-value arg)) diff --git a/lisp/term/tvi970.el b/lisp/term/tvi970.el index 3571b48..c1f5928 100644 --- a/lisp/term/tvi970.el +++ b/lisp/term/tvi970.el @@ -105,11 +105,11 @@ With a prefix argument ARG, enable the mode if ARG is positive, and disable it otherwise. If called from Lisp, enable the mode if ARG is omitted or nil. -In ``alternate keypad mode'', the keys send distinct escape +In alternate keypad mode, the keys send distinct escape sequences, meaning that they can have their own bindings, independent of the normal number keys. -When disabled, the terminal enters ``numeric keypad mode'', in +When disabled, the terminal enters numeric keypad mode, in which the keypad's keys act as ordinary digits." :variable (terminal-parameter nil 'tvi970-keypad-numeric) (send-string-to-terminal diff --git a/lisp/textmodes/artist.el b/lisp/textmodes/artist.el index 7352160..7c9002b 100644 --- a/lisp/textmodes/artist.el +++ b/lisp/textmodes/artist.el @@ -298,7 +298,7 @@ during the flood-fill." (defcustom artist-ellipse-right-char ?\) "Character to use at the rightmost position when drawing narrow ellipses. -In this figure, it is the right parenthesis (the ``)'' character): +In this figure, it is the right parenthesis (the “)” character): ----- ( ) -----" @@ -309,7 +309,7 @@ In this figure, it is the right parenthesis (the ``)'' character): (defcustom artist-ellipse-left-char ?\( "Character to use at the leftmost position when drawing narrow ellipses. -In this figure, it is the left parenthesis (the ``('' character): +In this figure, it is the left parenthesis (the “(” character): ----- ( ) -----" @@ -331,7 +331,7 @@ Accept this many characters cutting off a line and still treat it as one line. Example: If `artist-vaporize-fuzziness' is 2, then those will be recognized as - lines from A to B (provided you start vaporizing them at the ``*''): + lines from A to B (provided you start vaporizing them at the “*”): / A----*------/-----------B \\/ @@ -342,7 +342,7 @@ Example: \\/ / A----*----/\\/----------B / /\\ - (in fact, only the left part [between the A and the leftmost ``/'' + (in fact, only the left part [between the A and the leftmost “/” crossing the line] will be vaporized)." :group 'artist :type 'integer) @@ -397,8 +397,8 @@ Example: ;; This is a defvar, not a defcustom, since the custom ;; package shows lists of characters as a lists of integers, ;; which is confusing - "Characters (``color'') to use when spraying. -They should be ordered from the ``lightest'' to the ``heaviest'' + "Characters (“color”) to use when spraying. +They should be ordered from the “lightest” to the “heaviest” since spraying replaces a light character with the next heavier one.") @@ -1275,7 +1275,7 @@ Drawing with the mouse: * Cut copies, then clears the rectangle/square. * When drawing lines or poly-lines, you can set arrows. - See below under ``Arrows'' for more info. + See below under “Arrows” for more info. * The mode line shows the currently selected drawing operation. In addition, if it has an asterisk (*) at the end, you @@ -1383,8 +1383,8 @@ Variables artist-vaporize-fuzziness Tolerance when recognizing lines artist-spray-interval Seconds between repeated sprayings artist-spray-radius Size of the spray-area - artist-spray-chars The spray-``color'' - artist-spray-new-chars Initial spray-``color'' + artist-spray-chars The spray-“color” + artist-spray-new-chars Initial spray-“color” Hooks @@ -2020,7 +2020,7 @@ The replacement is used to convert tabs and new-lines to spaces." (defsubst artist-replace-string (string &optional see-thru) "Replace contents at point with STRING. With optional argument SEE-THRU set to non-nil, text in the buffer -``shines thru'' blanks in the STRING." +“shines thru” blanks in the STRING." (let ((char-list (append string nil)) ; convert the string to a list (overwrite-mode 'overwrite-mode-textual) (fill-column 32765) ; Large :-) @@ -2385,7 +2385,7 @@ in the coord." ;; Pretend we are plotting a pixel. Instead we just list it ;; (defmacro artist-put-pixel (point-list x y) - "In POINT-LIST, store a ``pixel'' at coord X,Y." + "In POINT-LIST, store a “pixel” at coord X,Y." `(setq ,point-list (append ,point-list (list (artist-new-coord ,x ,y))))) @@ -2928,7 +2928,7 @@ This is done by calling the function specified by `artist-text-renderer-function', which must return a list of strings, to be inserted in the buffer. -Text already in the buffer ``shines thru'' blanks in the rendered text." +Text already in the buffer “shines thru” blanks in the rendered text." (let* ((input-text (read-string "Type text to render: ")) (rendered-text (artist-funcall artist-text-renderer-function input-text))) (artist-text-insert-see-thru x y rendered-text))) diff --git a/lisp/textmodes/makeinfo.el b/lisp/textmodes/makeinfo.el index d62929b..b9b72ea 100644 --- a/lisp/textmodes/makeinfo.el +++ b/lisp/textmodes/makeinfo.el @@ -66,7 +66,7 @@ The name of the file is appended to this string, separated by a space." "String containing options for running `makeinfo'. Do not include `--footnote-style' or `--paragraph-indent'; the proper way to specify those is with the Texinfo commands -`@footnotestyle` and `@paragraphindent'." +`@footnotestyle' and `@paragraphindent'." :type 'string :group 'makeinfo) diff --git a/lisp/textmodes/rst.el b/lisp/textmodes/rst.el index cda9703..bc437b7 100644 --- a/lisp/textmodes/rst.el +++ b/lisp/textmodes/rst.el @@ -528,7 +528,7 @@ argument list for `rst-re'.") (defvar rst-re-alist) ; Forward declare to use it in `rst-re'. -;; FIXME: Use `sregex` or `rx` instead of re-inventing the wheel. +;; FIXME: Use `sregex' or `rx' instead of re-inventing the wheel. (rst-testcover-add-compose 'rst-re) ;; testcover: ok. (defun rst-re (&rest args) @@ -1512,8 +1512,8 @@ PFXARG (alternate behavior). This function is a bit of a swiss knife. It is meant to adjust the adornments of a section title in reStructuredText. It tries -to deal with all the possible cases gracefully and to do `the -right thing' in all cases. +to deal with all the possible cases gracefully and to do “the +right thing” in all cases. See the documentations of `rst-adjust-adornment-work' and `rst-promote-region' for full details. @@ -3571,8 +3571,8 @@ of your own." ;; properties on comments and literal blocks so they are *not* ;; inline fontified. See (elisp)Search-based Fontification. - ;; FIXME: And / or use `syntax-propertize` functions as in `octave-mod.el` - ;; and other V24 modes. May make `font-lock-extend-region` + ;; FIXME: And / or use `syntax-propertize' functions as in `octave-mod.el' + ;; and other V24 modes. May make `font-lock-extend-region' ;; superfluous. ;; `Comments`_ @@ -3952,11 +3952,11 @@ string)) to be used for converting the document." :package-version "1.2.0") (rst-testcover-defcustom) -;; FIXME: Must be `defcustom`. +;; FIXME: Must be defcustom. (defvar rst-compile-primary-toolset 'html "The default tool-set for `rst-compile'.") -;; FIXME: Must be `defcustom`. +;; FIXME: Must be defcustom. (defvar rst-compile-secondary-toolset 'latex "The default tool-set for `rst-compile' with a prefix argument.") @@ -4035,7 +4035,7 @@ buffer, if the region is not selected." (cadr (assq 'pseudoxml rst-compile-toolsets)) standard-output))) -;; FIXME: Should be `defcustom`. +;; FIXME: Should be defcustom. (defvar rst-pdf-program "xpdf" "Program used to preview PDF files.") @@ -4052,7 +4052,7 @@ buffer, if the region is not selected." ;; output. )) -;; FIXME: Should be `defcustom` or use something like `browse-url`. +;; FIXME: Should be defcustom or use something like `browse-url'. (defvar rst-slides-program "firefox" "Program used to preview S5 slides.") diff --git a/lisp/vc/ediff-util.el b/lisp/vc/ediff-util.el index 260366e..4ebffec 100644 --- a/lisp/vc/ediff-util.el +++ b/lisp/vc/ediff-util.el @@ -3988,7 +3988,7 @@ and mail it to the address above. Please read this first: ---------------------- -Some ``bugs'' may actually be no bugs at all. For instance, if you are +Some “bugs” may actually be no bugs at all. For instance, if you are reporting that certain difference regions are not matched as you think they should, this is most likely due to the way Unix diff program decides what constitutes a difference region. Ediff is an Emacs interface to diff, and diff --git a/lisp/vc/log-edit.el b/lisp/vc/log-edit.el index 08ae998..452977a 100644 --- a/lisp/vc/log-edit.el +++ b/lisp/vc/log-edit.el @@ -167,7 +167,7 @@ can be obtained from `log-edit-files'." (defvar log-edit-changelog-full-paragraphs t "If non-nil, include full ChangeLog paragraphs in the log. -This may be set in the ``local variables'' section of a ChangeLog, to +This may be set in the “local variables” section of a ChangeLog, to indicate the policy for that ChangeLog. A ChangeLog paragraph is a bunch of log text containing no blank lines; diff --git a/lisp/vc/vc-bzr.el b/lisp/vc/vc-bzr.el index c950825..5f8dd0b 100644 --- a/lisp/vc/vc-bzr.el +++ b/lisp/vc/vc-bzr.el @@ -34,7 +34,7 @@ ;; ========== ;; When editing a symlink and *both* the symlink and its target -;; are bzr-versioned, `vc-bzr` presently runs `bzr status` on the +;; are bzr-versioned, `vc-bzr' presently runs `bzr status' on the ;; symlink, thereby not detecting whether the actual contents ;; (that is, the target contents) are changed. diff --git a/lisp/windmove.el b/lisp/windmove.el index c461a00..1df74a2 100644 --- a/lisp/windmove.el +++ b/lisp/windmove.el @@ -488,8 +488,8 @@ If no window is at direction DIR, an error is signaled." ;;; end-user functions -;; these are all simple interactive wrappers to `windmove-do- -;; window-select', meant to be bound to keys. +;; these are all simple interactive wrappers to +;; `windmove-do-window-select', meant to be bound to keys. ;;;###autoload (defun windmove-left (&optional arg) diff --git a/lisp/xt-mouse.el b/lisp/xt-mouse.el index f8ae73c..5a258a7 100644 --- a/lisp/xt-mouse.el +++ b/lisp/xt-mouse.el @@ -321,21 +321,21 @@ Enables basic mouse tracking, mouse motion events and finally extended tracking on terminals that support it. The following escape sequences are understood by modern xterms: -\"\\e[?1000h\" `Basic mouse mode´: Enables reports for mouse +\"\\e[?1000h\" “Basic mouse mode”: Enables reports for mouse clicks. There is a limit to the maximum row/column position (<= 223), which can be reported in this basic mode. -\"\\e[?1002h\" `Mouse motion mode´: Enables reports for mouse +\"\\e[?1002h\" “Mouse motion mode”: Enables reports for mouse motion events during dragging operations. -\"\\e[?1005h\" `UTF-8 coordinate extension`: Enables an extension +\"\\e[?1005h\" “UTF-8 coordinate extension”: Enables an extension to the basic mouse mode, which uses UTF-8 characters to overcome the 223 row/column limit. This extension may conflict with non UTF-8 applications or non UTF-8 locales. -\"\\e[?1006h\" `SGR coordinate extension´: Enables a newer +\"\\e[?1006h\" “SGR coordinate extension”: Enables a newer alternative extension to the basic mouse mode, which overcomes the 223 row/column limit without the drawbacks of the UTF-8 coordinate extension. diff --git a/src/font.c b/src/font.c index b2b43c7..355353a 100644 --- a/src/font.c +++ b/src/font.c @@ -3822,17 +3822,17 @@ They are the same as face attributes of the same name. See `:foundry' -VALUE must be a string or a symbol specifying the font foundry, e.g. ``misc''. +VALUE must be a string or a symbol specifying the font foundry, e.g. `misc'. `:adstyle' VALUE must be a string or a symbol specifying the additional -typographic style information of a font, e.g. ``sans''. +typographic style information of a font, e.g. `sans'. `:registry' VALUE must be a string or a symbol specifying the charset registry and -encoding of a font, e.g. ``iso8859-1''. +encoding of a font, e.g. `iso8859-1'. `:size' commit a0823e4374ed260ed90c7eaccfbab186b8a4a949 Author: Stefan Monnier Date: Tue May 19 15:37:14 2015 -0400 * emacs-lisp/generator.el (cps--gensym, cps--transform-1): Silence compiler diff --git a/lisp/emacs-lisp/generator.el b/lisp/emacs-lisp/generator.el index 8251682..c8e61f3 100644 --- a/lisp/emacs-lisp/generator.el +++ b/lisp/emacs-lisp/generator.el @@ -90,7 +90,7 @@ ;; Change this function to use `cl-gensym' if you want the generated ;; code to be easier to read and debug. ;; (cl-gensym (apply #'format fmt args)) - `(make-symbol ,fmt)) + `(progn (ignore ,@args) (make-symbol ,fmt))) (defvar cps--dynamic-wrappers '(identity) "List of transformer functions to apply to atomic forms we @@ -308,14 +308,14 @@ don't yield.") collect (if (symbolp binding) (list binding nil) binding))) - (temps (cl-loop for (var value-form) in bindings + (temps (cl-loop for (var _value-form) in bindings collect (cps--add-binding var)))) (cps--transform-1 `(let* ,(append - (cl-loop for (var value-form) in bindings + (cl-loop for (_var value-form) in bindings for temp in temps collect (list temp value-form)) - (cl-loop for (var binding) in bindings + (cl-loop for (var _binding) in bindings for temp in temps collect (list var temp))) ,@body) commit c7acb6dd92d3611918b5c5792e0df71101857916 Author: Paul Eggert Date: Tue May 19 10:38:47 2015 -0700 Try to port new etags tests to MS-Windows * test/etags/CTAGS.good, test/etags/ETAGS.good_1: * test/etags/ETAGS.good_2, test/etags/ETAGS.good_3: * test/etags/ETAGS.good_4, test/etags/ETAGS.good_5: Adjust to test-case changes below. * test/etags/Makefile (CSRC): Remove dostorture.c. Whatever it was trying to test, wasn't working portably. (LC_ALL): Remove. Apparently there wasn't an encoding problem, just a line-ending problem. * test/etags/c-src/dostorture.c: Remove. * test/etags/cp-src/c.C: Remove stray CR. * test/etags/html-src/algrthms.html: Remove trailing CRs. State UTF-8 as the encoding. The file is ASCII so it doesn't matter, but if someone edits it later it should stay UTF-8-compatible. diff --git a/test/etags/CTAGS.good b/test/etags/CTAGS.good index 5a518f1..d747265 100644 --- a/test/etags/CTAGS.good +++ b/test/etags/CTAGS.good @@ -3580,9 +3580,7 @@ not_bol c-src/emacs/src/regex.h 391 not_eol c-src/emacs/src/regex.h 394 not_single_kboard_state c-src/emacs/src/keyboard.c /^not_single_kboard_state (KBOARD *kboard)$/ notag2 c-src/torture.c 26 -notag2 c-src/dostorture.c 26 notag4 c-src/torture.c 45 -notag4 c-src/dostorture.c 45 notinname c-src/etags.c /^#define notinname(c) (_nin[CHAR (c)]) \/* c is not / npending c-src/emacs/src/keyboard.c 7244 ntool_bar_items c-src/emacs/src/keyboard.c 7974 @@ -3737,11 +3735,8 @@ post pyt-src/server.py /^ def post(self):$/ post pyt-src/server.py /^ def post(self):$/ pot_etags_version c-src/etags.c 81 pp1 c-src/torture.c /^int pp1($/ -pp1 c-src/dostorture.c /^int pp1($/ pp2 c-src/torture.c /^pp2$/ -pp2 c-src/dostorture.c /^pp2$/ pp3 c-src/torture.c /^pp3(int bar)$/ -pp3 c-src/dostorture.c /^pp3(int bar)$/ pp_bas_cat prol-src/natded.prolog /^pp_bas_cat(Cat):-$/ pp_cat prol-src/natded.prolog /^pp_cat(Syn:Sem):-$/ pp_exp prol-src/natded.prolog /^pp_exp('NIL'):-$/ @@ -4118,18 +4113,12 @@ tag-re-match-p el-src/emacs/lisp/progmodes/etags.el /^(defun tag-re-match-p (re) tag-symbol-match-p el-src/emacs/lisp/progmodes/etags.el /^(defun tag-symbol-match-p (tag)$/ tag-word-match-p el-src/emacs/lisp/progmodes/etags.el /^(defun tag-word-match-p (tag)$/ tag1 c-src/torture.c /^(*tag1 (sig, handler)) ()$/ -tag1 c-src/dostorture.c /^(*tag1 (sig, handler)) ()$/ tag1 c-src/h.h 110 tag2 c-src/torture.c /^(*tag2 (sig, handler)) ()$/ -tag2 c-src/dostorture.c /^(*tag2 (sig, handler)) ()$/ tag3 c-src/torture.c /^(*tag3 (int sig, void (*handler) (int))) (int)$/ -tag3 c-src/dostorture.c /^(*tag3 (int sig, void (*handler) (int))) (int)$/ tag4 c-src/torture.c /^(*tag4 (int sig, void (*handler) (int))) (int)$/ -tag4 c-src/dostorture.c /^(*tag4 (int sig, void (*handler) (int))) (int)$/ tag5 c-src/torture.c /^tag5 (handler, arg)$/ -tag5 c-src/dostorture.c /^tag5 (handler, arg)$/ tag6 c-src/torture.c /^tag6 (void (*handler) (void *), void *arg)$/ -tag6 c-src/dostorture.c /^tag6 (void (*handler) (void *), void *arg)$/ tag_or_ch c-src/emacs/src/lisp.h 3026 taggedfname c-src/etags.c 207 tags-add-tables el-src/emacs/lisp/progmodes/etags.el /^(defcustom tags-add-tables 'ask-user$/ diff --git a/test/etags/ETAGS.good_1 b/test/etags/ETAGS.good_1 index 7ccc5a0..370d057 100644 --- a/test/etags/ETAGS.good_1 +++ b/test/etags/ETAGS.good_1 @@ -579,19 +579,6 @@ char **tab_fill(tab_fill70,1129 int tab_delete_first(91,1638 int tab_count_words(103,1820 -c-src/dostorture.c,198 -(*tag1 tag118,468 -#define notag2 26,577 -(*tag2 tag229,657 -(*tag3 tag339,809 -#define notag4 45,904 -(*tag4 tag448,1001 -tag5 57,1136 -tag6 66,1272 -int pp1(74,1389 -pp287,1504 -pp3(100,1616 - c-src/emacs/src/gmalloc.c,3539 #define USE_PTHREAD25,1002 #undef get_current_dir_name33,1126 @@ -1909,46 +1896,46 @@ template class AT 52,1668 class AU 53,1716 class B<B54,1735 class B { void f(B::f54,1735 -const A::B::T& abt 55,1766 -class A 56,1792 -class A { class B A::B56,1792 -class A 57,1827 - A operator+(A::operator+59,1861 -is_muldiv_operation(61,1888 -domain foo 68,1956 - void f(foo::f69,1969 -void A::A(72,1990 -struct A 73,2005 -struct B 74,2023 -void B::B(75,2042 -void BE_Node::BE_Node(76,2057 -class BE_Node 77,2084 -struct foo 79,2103 -class test 86,2157 - int f(test::f87,2170 - int ff(test::ff89,2232 - int g(test::g90,2255 -class AST_Root 92,2279 -AST_ConcreteType::AST_ConcreteType(99,2394 -AST_Array::AST_Array(107,2533 - void f(::f115,2734 -struct A 117,2754 -A::~A(120,2778 -struct B 122,2790 - ~B(B::~B123,2801 -enum {dog,::dog126,2818 -enum {dog, cat}::cat126,2818 -enum {dog, cat} animals;126,2818 -struct {int teats;} cow;127,2843 -class Boo 129,2869 - enum {dog,Boo::dog130,2881 - enum {dog, cat}Boo::cat130,2881 - foo(Boo::foo133,2955 - Boo(Boo::Boo137,2996 -Boo::Boo(141,3071 -typedef int should_see_this_one_enclosed_in_extern_C;149,3156 -typedef int (*should_see_this_function_pointer)should_see_this_function_pointer153,3229 -typedef int should_see_this_array_type[should_see_this_array_type156,3311 +const A::B::T& abt 55,1765 +class A 56,1791 +class A { class B A::B56,1791 +class A 57,1826 + A operator+(A::operator+59,1860 +is_muldiv_operation(61,1887 +domain foo 68,1955 + void f(foo::f69,1968 +void A::A(72,1989 +struct A 73,2004 +struct B 74,2022 +void B::B(75,2041 +void BE_Node::BE_Node(76,2056 +class BE_Node 77,2083 +struct foo 79,2102 +class test 86,2156 + int f(test::f87,2169 + int ff(test::ff89,2231 + int g(test::g90,2254 +class AST_Root 92,2278 +AST_ConcreteType::AST_ConcreteType(99,2393 +AST_Array::AST_Array(107,2532 + void f(::f115,2733 +struct A 117,2753 +A::~A(120,2777 +struct B 122,2789 + ~B(B::~B123,2800 +enum {dog,::dog126,2817 +enum {dog, cat}::cat126,2817 +enum {dog, cat} animals;126,2817 +struct {int teats;} cow;127,2842 +class Boo 129,2868 + enum {dog,Boo::dog130,2880 + enum {dog, cat}Boo::cat130,2880 + foo(Boo::foo133,2954 + Boo(Boo::Boo137,2995 +Boo::Boo(141,3070 +typedef int should_see_this_one_enclosed_in_extern_C;149,3155 +typedef int (*should_see_this_function_pointer)should_see_this_function_pointer153,3228 +typedef int should_see_this_array_type[should_see_this_array_type156,3310 cp-src/burton.cpp,103 ::dummy::dummy test::dummy1(1,0 @@ -2291,15 +2278,15 @@ Comunicati e iniziative32,976 Ultime notizie dall'associazione63,2030 html-src/algrthms.html,467 -Tutorial on Convolutional Coding with Viterbi Decoding--Description of the Data Generation, Convolutional Encoding, Channel Mapping and AWGN, and Quantizing Algorithms7,282 -Descriptionalgorithms10,486 -Generating the Datagenalgorithm48,2000 -Convolutionallyconalgorithm55,2517 -Nextstatetable262,11592 -Outputoutputtable350,13920 -Mapping the Channel Symbolsmapping433,16218 -Adding Noise to theaddnoise439,16612 -Quantizing the Receivedquantizing469,19105 +Tutorial on Convolutional Coding with Viterbi Decoding--Description of the Data Generation, Convolutional Encoding, Channel Mapping and AWGN, and Quantizing Algorithms7,271 +Descriptionalgorithms10,472 +Generating the Datagenalgorithm48,1948 +Convolutionallyconalgorithm55,2458 +Nextstatetable262,11326 +Outputoutputtable350,13566 +Mapping the Channel Symbolsmapping433,15781 +Adding Noise to theaddnoise439,16169 +Quantizing the Receivedquantizing469,18632 html-src/software.html,439 Francesco Potortì Software Page9,280 diff --git a/test/etags/ETAGS.good_2 b/test/etags/ETAGS.good_2 index bd20d14..b09e61e 100644 --- a/test/etags/ETAGS.good_2 +++ b/test/etags/ETAGS.good_2 @@ -646,19 +646,6 @@ char **tab_fill(tab_fill70,1129 int tab_delete_first(91,1638 int tab_count_words(103,1820 -c-src/dostorture.c,198 -(*tag1 tag118,468 -#define notag2 26,577 -(*tag2 tag229,657 -(*tag3 tag339,809 -#define notag4 45,904 -(*tag4 tag448,1001 -tag5 57,1136 -tag6 66,1272 -int pp1(74,1389 -pp287,1504 -pp3(100,1616 - c-src/emacs/src/gmalloc.c,6643 #define USE_PTHREAD25,1002 #undef get_current_dir_name33,1126 @@ -2415,53 +2402,53 @@ template class AT 52,1668 class AU 53,1716 class B<B54,1735 class B { void f(B::f54,1735 -const A::B::T& abt 55,1766 -class A 56,1792 -class A { class B A::B56,1792 -class A { class B { int f(A::B::f56,1792 -class A 57,1827 - int get_data(A::get_data58,1837 - A operator+(A::operator+59,1861 -is_muldiv_operation(61,1888 -domain foo 68,1956 - void f(foo::f69,1969 -void A::A(72,1990 -struct A 73,2005 -struct A { A(A::A73,2005 -struct B 74,2023 -struct B { B(B::B74,2023 -void B::B(75,2042 -void BE_Node::BE_Node(76,2057 -class BE_Node 77,2084 -struct foo 79,2103 -class test 86,2157 - int f(test::f87,2170 - int ff(test::ff89,2232 - int g(test::g90,2255 -class AST_Root 92,2279 -class AST_Root;96,2328 -AST_ConcreteType::AST_ConcreteType(99,2394 -AST_Array::AST_Array(107,2533 - void f(::f115,2734 -struct A 117,2754 - ~A(A::~A118,2765 -A::~A(120,2778 -struct B 122,2790 - ~B(B::~B123,2801 -enum {dog,::dog126,2818 -enum {dog, cat}::cat126,2818 -enum {dog, cat} animals;126,2818 -struct {int teats;} cow;127,2843 -class Boo 129,2869 - enum {dog,Boo::dog130,2881 - enum {dog, cat}Boo::cat130,2881 - foo(Boo::foo133,2955 - Boo(Boo::Boo137,2996 - Boo(Boo::Boo138,3053 -Boo::Boo(141,3071 -typedef int should_see_this_one_enclosed_in_extern_C;149,3156 -typedef int (*should_see_this_function_pointer)should_see_this_function_pointer153,3229 -typedef int should_see_this_array_type[should_see_this_array_type156,3311 +const A::B::T& abt 55,1765 +class A 56,1791 +class A { class B A::B56,1791 +class A { class B { int f(A::B::f56,1791 +class A 57,1826 + int get_data(A::get_data58,1836 + A operator+(A::operator+59,1860 +is_muldiv_operation(61,1887 +domain foo 68,1955 + void f(foo::f69,1968 +void A::A(72,1989 +struct A 73,2004 +struct A { A(A::A73,2004 +struct B 74,2022 +struct B { B(B::B74,2022 +void B::B(75,2041 +void BE_Node::BE_Node(76,2056 +class BE_Node 77,2083 +struct foo 79,2102 +class test 86,2156 + int f(test::f87,2169 + int ff(test::ff89,2231 + int g(test::g90,2254 +class AST_Root 92,2278 +class AST_Root;96,2327 +AST_ConcreteType::AST_ConcreteType(99,2393 +AST_Array::AST_Array(107,2532 + void f(::f115,2733 +struct A 117,2753 + ~A(A::~A118,2764 +A::~A(120,2777 +struct B 122,2789 + ~B(B::~B123,2800 +enum {dog,::dog126,2817 +enum {dog, cat}::cat126,2817 +enum {dog, cat} animals;126,2817 +struct {int teats;} cow;127,2842 +class Boo 129,2868 + enum {dog,Boo::dog130,2880 + enum {dog, cat}Boo::cat130,2880 + foo(Boo::foo133,2954 + Boo(Boo::Boo137,2995 + Boo(Boo::Boo138,3052 +Boo::Boo(141,3070 +typedef int should_see_this_one_enclosed_in_extern_C;149,3155 +typedef int (*should_see_this_function_pointer)should_see_this_function_pointer153,3228 +typedef int should_see_this_array_type[should_see_this_array_type156,3310 cp-src/burton.cpp,103 ::dummy::dummy test::dummy1(1,0 @@ -2858,15 +2845,15 @@ Comunicati e iniziative32,976 Ultime notizie dall'associazione63,2030 html-src/algrthms.html,467 -Tutorial on Convolutional Coding with Viterbi Decoding--Description of the Data Generation, Convolutional Encoding, Channel Mapping and AWGN, and Quantizing Algorithms7,282 -Descriptionalgorithms10,486 -Generating the Datagenalgorithm48,2000 -Convolutionallyconalgorithm55,2517 -Nextstatetable262,11592 -Outputoutputtable350,13920 -Mapping the Channel Symbolsmapping433,16218 -Adding Noise to theaddnoise439,16612 -Quantizing the Receivedquantizing469,19105 +Tutorial on Convolutional Coding with Viterbi Decoding--Description of the Data Generation, Convolutional Encoding, Channel Mapping and AWGN, and Quantizing Algorithms7,271 +Descriptionalgorithms10,472 +Generating the Datagenalgorithm48,1948 +Convolutionallyconalgorithm55,2458 +Nextstatetable262,11326 +Outputoutputtable350,13566 +Mapping the Channel Symbolsmapping433,15781 +Adding Noise to theaddnoise439,16169 +Quantizing the Receivedquantizing469,18632 html-src/software.html,439 Francesco Potortì Software Page9,280 diff --git a/test/etags/ETAGS.good_3 b/test/etags/ETAGS.good_3 index b3abf5f..5a9a2bf 100644 --- a/test/etags/ETAGS.good_3 +++ b/test/etags/ETAGS.good_3 @@ -648,19 +648,6 @@ char **tab_fill(tab_fill70,1129 int tab_delete_first(91,1638 int tab_count_words(103,1820 -c-src/dostorture.c,198 -(*tag1 tag118,468 -#define notag2 26,577 -(*tag2 tag229,657 -(*tag3 tag339,809 -#define notag4 45,904 -(*tag4 tag448,1001 -tag5 57,1136 -tag6 66,1272 -int pp1(74,1389 -pp287,1504 -pp3(100,1616 - c-src/emacs/src/gmalloc.c,4207 #define USE_PTHREAD25,1002 #undef get_current_dir_name33,1126 @@ -2199,54 +2186,54 @@ class AU 53,1716 class AU { T x;AU::x53,1716 class B<B54,1735 class B { void f(B::f54,1735 -const A::B::T& abt 55,1766 -class A 56,1792 -class A { class B A::B56,1792 -class A 57,1827 - A operator+(A::operator+59,1861 -is_muldiv_operation(61,1888 -domain foo 68,1956 - void f(foo::f69,1969 -void A::A(72,1990 -struct A 73,2005 -struct B 74,2023 -void B::B(75,2042 -void BE_Node::BE_Node(76,2057 -class BE_Node 77,2084 -struct foo 79,2103 - int x;foo::x80,2116 -class test 86,2157 - int f(test::f87,2170 - int ff(test::ff89,2232 - int g(test::g90,2255 -class AST_Root 92,2279 -AST_ConcreteType::AST_ConcreteType(99,2394 -AST_Array::AST_Array(107,2533 - void f(::f115,2734 -struct A 117,2754 -A::~A(120,2778 -struct B 122,2790 - ~B(B::~B123,2801 -enum {dog,::dog126,2818 -enum {dog, cat}::cat126,2818 -enum {dog, cat} animals;126,2818 -struct {int teats;::teats127,2843 -struct {int teats;} cow;127,2843 -class Boo 129,2869 - enum {dog,Boo::dog130,2881 - enum {dog, cat}Boo::cat130,2881 - enum {dog, cat} animals;Boo::animals130,2881 - struct {int treats;Boo::treats131,2910 - struct {int treats;} cow;Boo::cow131,2910 - int i,Boo::i132,2940 - int i,a,Boo::a132,2940 - int i,a,b;Boo::b132,2940 - foo(Boo::foo133,2955 - Boo(Boo::Boo137,2996 -Boo::Boo(141,3071 -typedef int should_see_this_one_enclosed_in_extern_C;149,3156 -typedef int (*should_see_this_function_pointer)should_see_this_function_pointer153,3229 -typedef int should_see_this_array_type[should_see_this_array_type156,3311 +const A::B::T& abt 55,1765 +class A 56,1791 +class A { class B A::B56,1791 +class A 57,1826 + A operator+(A::operator+59,1860 +is_muldiv_operation(61,1887 +domain foo 68,1955 + void f(foo::f69,1968 +void A::A(72,1989 +struct A 73,2004 +struct B 74,2022 +void B::B(75,2041 +void BE_Node::BE_Node(76,2056 +class BE_Node 77,2083 +struct foo 79,2102 + int x;foo::x80,2115 +class test 86,2156 + int f(test::f87,2169 + int ff(test::ff89,2231 + int g(test::g90,2254 +class AST_Root 92,2278 +AST_ConcreteType::AST_ConcreteType(99,2393 +AST_Array::AST_Array(107,2532 + void f(::f115,2733 +struct A 117,2753 +A::~A(120,2777 +struct B 122,2789 + ~B(B::~B123,2800 +enum {dog,::dog126,2817 +enum {dog, cat}::cat126,2817 +enum {dog, cat} animals;126,2817 +struct {int teats;::teats127,2842 +struct {int teats;} cow;127,2842 +class Boo 129,2868 + enum {dog,Boo::dog130,2880 + enum {dog, cat}Boo::cat130,2880 + enum {dog, cat} animals;Boo::animals130,2880 + struct {int treats;Boo::treats131,2909 + struct {int treats;} cow;Boo::cow131,2909 + int i,Boo::i132,2939 + int i,a,Boo::a132,2939 + int i,a,b;Boo::b132,2939 + foo(Boo::foo133,2954 + Boo(Boo::Boo137,2995 +Boo::Boo(141,3070 +typedef int should_see_this_one_enclosed_in_extern_C;149,3155 +typedef int (*should_see_this_function_pointer)should_see_this_function_pointer153,3228 +typedef int should_see_this_array_type[should_see_this_array_type156,3310 cp-src/burton.cpp,103 ::dummy::dummy test::dummy1(1,0 @@ -2608,15 +2595,15 @@ Comunicati e iniziative32,976 Ultime notizie dall'associazione63,2030 html-src/algrthms.html,467 -Tutorial on Convolutional Coding with Viterbi Decoding--Description of the Data Generation, Convolutional Encoding, Channel Mapping and AWGN, and Quantizing Algorithms7,282 -Descriptionalgorithms10,486 -Generating the Datagenalgorithm48,2000 -Convolutionallyconalgorithm55,2517 -Nextstatetable262,11592 -Outputoutputtable350,13920 -Mapping the Channel Symbolsmapping433,16218 -Adding Noise to theaddnoise439,16612 -Quantizing the Receivedquantizing469,19105 +Tutorial on Convolutional Coding with Viterbi Decoding--Description of the Data Generation, Convolutional Encoding, Channel Mapping and AWGN, and Quantizing Algorithms7,271 +Descriptionalgorithms10,472 +Generating the Datagenalgorithm48,1948 +Convolutionallyconalgorithm55,2458 +Nextstatetable262,11326 +Outputoutputtable350,13566 +Mapping the Channel Symbolsmapping433,15781 +Adding Noise to theaddnoise439,16169 +Quantizing the Receivedquantizing469,18632 html-src/software.html,439 Francesco Potortì Software Page9,280 diff --git a/test/etags/ETAGS.good_4 b/test/etags/ETAGS.good_4 index 438e8b5..f6023ea 100644 --- a/test/etags/ETAGS.good_4 +++ b/test/etags/ETAGS.good_4 @@ -603,19 +603,6 @@ char **tab_fill(tab_fill70,1129 int tab_delete_first(91,1638 int tab_count_words(103,1820 -c-src/dostorture.c,198 -(*tag1 tag118,468 -#define notag2 26,577 -(*tag2 tag229,657 -(*tag3 tag339,809 -#define notag4 45,904 -(*tag4 tag448,1001 -tag5 57,1136 -tag6 66,1272 -int pp1(74,1389 -pp287,1504 -pp3(100,1616 - c-src/emacs/src/gmalloc.c,3539 #define USE_PTHREAD25,1002 #undef get_current_dir_name33,1126 @@ -2073,46 +2060,46 @@ template class AT 52,1668 class AU 53,1716 class B<B54,1735 class B { void f(B::f54,1735 -const A::B::T& abt 55,1766 -class A 56,1792 -class A { class B A::B56,1792 -class A 57,1827 - A operator+(A::operator+59,1861 -is_muldiv_operation(61,1888 -domain foo 68,1956 - void f(foo::f69,1969 -void A::A(72,1990 -struct A 73,2005 -struct B 74,2023 -void B::B(75,2042 -void BE_Node::BE_Node(76,2057 -class BE_Node 77,2084 -struct foo 79,2103 -class test 86,2157 - int f(test::f87,2170 - int ff(test::ff89,2232 - int g(test::g90,2255 -class AST_Root 92,2279 -AST_ConcreteType::AST_ConcreteType(99,2394 -AST_Array::AST_Array(107,2533 - void f(::f115,2734 -struct A 117,2754 -A::~A(120,2778 -struct B 122,2790 - ~B(B::~B123,2801 -enum {dog,::dog126,2818 -enum {dog, cat}::cat126,2818 -enum {dog, cat} animals;126,2818 -struct {int teats;} cow;127,2843 -class Boo 129,2869 - enum {dog,Boo::dog130,2881 - enum {dog, cat}Boo::cat130,2881 - foo(Boo::foo133,2955 - Boo(Boo::Boo137,2996 -Boo::Boo(141,3071 -typedef int should_see_this_one_enclosed_in_extern_C;149,3156 -typedef int (*should_see_this_function_pointer)should_see_this_function_pointer153,3229 -typedef int should_see_this_array_type[should_see_this_array_type156,3311 +const A::B::T& abt 55,1765 +class A 56,1791 +class A { class B A::B56,1791 +class A 57,1826 + A operator+(A::operator+59,1860 +is_muldiv_operation(61,1887 +domain foo 68,1955 + void f(foo::f69,1968 +void A::A(72,1989 +struct A 73,2004 +struct B 74,2022 +void B::B(75,2041 +void BE_Node::BE_Node(76,2056 +class BE_Node 77,2083 +struct foo 79,2102 +class test 86,2156 + int f(test::f87,2169 + int ff(test::ff89,2231 + int g(test::g90,2254 +class AST_Root 92,2278 +AST_ConcreteType::AST_ConcreteType(99,2393 +AST_Array::AST_Array(107,2532 + void f(::f115,2733 +struct A 117,2753 +A::~A(120,2777 +struct B 122,2789 + ~B(B::~B123,2800 +enum {dog,::dog126,2817 +enum {dog, cat}::cat126,2817 +enum {dog, cat} animals;126,2817 +struct {int teats;} cow;127,2842 +class Boo 129,2868 + enum {dog,Boo::dog130,2880 + enum {dog, cat}Boo::cat130,2880 + foo(Boo::foo133,2954 + Boo(Boo::Boo137,2995 +Boo::Boo(141,3070 +typedef int should_see_this_one_enclosed_in_extern_C;149,3155 +typedef int (*should_see_this_function_pointer)should_see_this_function_pointer153,3228 +typedef int should_see_this_array_type[should_see_this_array_type156,3310 cp-src/burton.cpp,103 ::dummy::dummy test::dummy1(1,0 @@ -2455,15 +2442,15 @@ Comunicati e iniziative32,976 Ultime notizie dall'associazione63,2030 html-src/algrthms.html,467 -Tutorial on Convolutional Coding with Viterbi Decoding--Description of the Data Generation, Convolutional Encoding, Channel Mapping and AWGN, and Quantizing Algorithms7,282 -Descriptionalgorithms10,486 -Generating the Datagenalgorithm48,2000 -Convolutionallyconalgorithm55,2517 -Nextstatetable262,11592 -Outputoutputtable350,13920 -Mapping the Channel Symbolsmapping433,16218 -Adding Noise to theaddnoise439,16612 -Quantizing the Receivedquantizing469,19105 +Tutorial on Convolutional Coding with Viterbi Decoding--Description of the Data Generation, Convolutional Encoding, Channel Mapping and AWGN, and Quantizing Algorithms7,271 +Descriptionalgorithms10,472 +Generating the Datagenalgorithm48,1948 +Convolutionallyconalgorithm55,2458 +Nextstatetable262,11326 +Outputoutputtable350,13566 +Mapping the Channel Symbolsmapping433,15781 +Adding Noise to theaddnoise439,16169 +Quantizing the Receivedquantizing469,18632 html-src/software.html,439 Francesco Potortì Software Page9,280 diff --git a/test/etags/ETAGS.good_5 b/test/etags/ETAGS.good_5 index b4b2750..b6bb626 100644 --- a/test/etags/ETAGS.good_5 +++ b/test/etags/ETAGS.good_5 @@ -739,19 +739,6 @@ char **tab_fill(tab_fill70,1129 int tab_delete_first(91,1638 int tab_count_words(103,1820 -c-src/dostorture.c,198 -(*tag1 tag118,468 -#define notag2 26,577 -(*tag2 tag229,657 -(*tag3 tag339,809 -#define notag4 45,904 -(*tag4 tag448,1001 -tag5 57,1136 -tag6 66,1272 -int pp1(74,1389 -pp287,1504 -pp3(100,1616 - c-src/emacs/src/gmalloc.c,7311 #define USE_PTHREAD25,1002 #undef get_current_dir_name33,1126 @@ -2869,61 +2856,61 @@ class AU 53,1716 class AU { T x;AU::x53,1716 class B<B54,1735 class B { void f(B::f54,1735 -const A::B::T& abt 55,1766 -class A 56,1792 -class A { class B A::B56,1792 -class A { class B { int f(A::B::f56,1792 -class A 57,1827 - int get_data(A::get_data58,1837 - A operator+(A::operator+59,1861 -is_muldiv_operation(61,1888 -domain foo 68,1956 - void f(foo::f69,1969 -void A::A(72,1990 -struct A 73,2005 -struct A { A(A::A73,2005 -struct B 74,2023 -struct B { B(B::B74,2023 -void B::B(75,2042 -void BE_Node::BE_Node(76,2057 -class BE_Node 77,2084 -struct foo 79,2103 - int x;foo::x80,2116 -class test 86,2157 - int f(test::f87,2170 - int ff(test::ff89,2232 - int g(test::g90,2255 -class AST_Root 92,2279 -class AST_Root;96,2328 -AST_ConcreteType::AST_ConcreteType(99,2394 -AST_Array::AST_Array(107,2533 - void f(::f115,2734 -struct A 117,2754 - ~A(A::~A118,2765 -A::~A(120,2778 -struct B 122,2790 - ~B(B::~B123,2801 -enum {dog,::dog126,2818 -enum {dog, cat}::cat126,2818 -enum {dog, cat} animals;126,2818 -struct {int teats;::teats127,2843 -struct {int teats;} cow;127,2843 -class Boo 129,2869 - enum {dog,Boo::dog130,2881 - enum {dog, cat}Boo::cat130,2881 - enum {dog, cat} animals;Boo::animals130,2881 - struct {int treats;Boo::treats131,2910 - struct {int treats;} cow;Boo::cow131,2910 - int i,Boo::i132,2940 - int i,a,Boo::a132,2940 - int i,a,b;Boo::b132,2940 - foo(Boo::foo133,2955 - Boo(Boo::Boo137,2996 - Boo(Boo::Boo138,3053 -Boo::Boo(141,3071 -typedef int should_see_this_one_enclosed_in_extern_C;149,3156 -typedef int (*should_see_this_function_pointer)should_see_this_function_pointer153,3229 -typedef int should_see_this_array_type[should_see_this_array_type156,3311 +const A::B::T& abt 55,1765 +class A 56,1791 +class A { class B A::B56,1791 +class A { class B { int f(A::B::f56,1791 +class A 57,1826 + int get_data(A::get_data58,1836 + A operator+(A::operator+59,1860 +is_muldiv_operation(61,1887 +domain foo 68,1955 + void f(foo::f69,1968 +void A::A(72,1989 +struct A 73,2004 +struct A { A(A::A73,2004 +struct B 74,2022 +struct B { B(B::B74,2022 +void B::B(75,2041 +void BE_Node::BE_Node(76,2056 +class BE_Node 77,2083 +struct foo 79,2102 + int x;foo::x80,2115 +class test 86,2156 + int f(test::f87,2169 + int ff(test::ff89,2231 + int g(test::g90,2254 +class AST_Root 92,2278 +class AST_Root;96,2327 +AST_ConcreteType::AST_ConcreteType(99,2393 +AST_Array::AST_Array(107,2532 + void f(::f115,2733 +struct A 117,2753 + ~A(A::~A118,2764 +A::~A(120,2777 +struct B 122,2789 + ~B(B::~B123,2800 +enum {dog,::dog126,2817 +enum {dog, cat}::cat126,2817 +enum {dog, cat} animals;126,2817 +struct {int teats;::teats127,2842 +struct {int teats;} cow;127,2842 +class Boo 129,2868 + enum {dog,Boo::dog130,2880 + enum {dog, cat}Boo::cat130,2880 + enum {dog, cat} animals;Boo::animals130,2880 + struct {int treats;Boo::treats131,2909 + struct {int treats;} cow;Boo::cow131,2909 + int i,Boo::i132,2939 + int i,a,Boo::a132,2939 + int i,a,b;Boo::b132,2939 + foo(Boo::foo133,2954 + Boo(Boo::Boo137,2995 + Boo(Boo::Boo138,3052 +Boo::Boo(141,3070 +typedef int should_see_this_one_enclosed_in_extern_C;149,3155 +typedef int (*should_see_this_function_pointer)should_see_this_function_pointer153,3228 +typedef int should_see_this_array_type[should_see_this_array_type156,3310 cp-src/burton.cpp,103 ::dummy::dummy test::dummy1(1,0 @@ -3339,15 +3326,15 @@ Comunicati e iniziative32,976 Ultime notizie dall'associazione63,2030 html-src/algrthms.html,467 -Tutorial on Convolutional Coding with Viterbi Decoding--Description of the Data Generation, Convolutional Encoding, Channel Mapping and AWGN, and Quantizing Algorithms7,282 -Descriptionalgorithms10,486 -Generating the Datagenalgorithm48,2000 -Convolutionallyconalgorithm55,2517 -Nextstatetable262,11592 -Outputoutputtable350,13920 -Mapping the Channel Symbolsmapping433,16218 -Adding Noise to theaddnoise439,16612 -Quantizing the Receivedquantizing469,19105 +Tutorial on Convolutional Coding with Viterbi Decoding--Description of the Data Generation, Convolutional Encoding, Channel Mapping and AWGN, and Quantizing Algorithms7,271 +Descriptionalgorithms10,472 +Generating the Datagenalgorithm48,1948 +Convolutionallyconalgorithm55,2458 +Nextstatetable262,11326 +Outputoutputtable350,13566 +Mapping the Channel Symbolsmapping433,15781 +Adding Noise to theaddnoise439,16169 +Quantizing the Receivedquantizing469,18632 html-src/software.html,439 Francesco Potortì Software Page9,280 diff --git a/test/etags/Makefile b/test/etags/Makefile index 4a01c28..99ad41e 100644 --- a/test/etags/Makefile +++ b/test/etags/Makefile @@ -1,7 +1,7 @@ ADASRC=$(addprefix ./ada-src/,etags-test-for.ada 2ataspri.adb 2ataspri.ads waroquiers.ada) ASRC=$(addprefix ./a-src/,empty.zz empty.zz.gz) CSRC=$(addprefix ./c-src/,abbrev.c .//c.c torture.c getopt.h etags.c\ - exit.c exit.strange_suffix sysdep.h tab.c dostorture.c\ + exit.c exit.strange_suffix sysdep.h tab.c\ emacs/src/gmalloc.c emacs/src/regex.h emacs/src/keyboard.c emacs/src/lisp.h\ machsyscalls.c machsyscalls.h fail.c a/b/b.c) ../etags/c-src/h.h CPSRC=$(addprefix ./cp-src/,c.C burton.cpp burton.cpp\ @@ -44,14 +44,6 @@ ARGS=- < srclist infiles = $(filter-out ${NONSRCS},${SRCS}) srclist regexfile -# Although this test uses UTF-8 data, some platforms lack UTF-8 locales. -# If the current locale isn't known to use UTF-8, fall back on the C locale. -# Although the C locale in theory is not safe for UTF-8 data, in practice -# it should be good enough. -ifneq ($(shell locale -k charmap), charmap="UTF-8") - export LC_ALL = C -endif - .PHONY: check cdiff ETAGS CTAGS # Can't make ediff_1 through ediff_5 .PHONY, as they're implicit. diff --git a/test/etags/c-src/dostorture.c b/test/etags/c-src/dostorture.c deleted file mode 100644 index 5190734..0000000 --- a/test/etags/c-src/dostorture.c +++ /dev/null @@ -1,107 +0,0 @@ -/* Date: Thu, 05 Aug 1993 20:28:03 +0200 - From: "Tom R.Hageman" - Subject: more etags torture;-) [etags 7.3 patch#3] - To: pot@CNUCE.CNR.IT - - Hi, - - This test file illustrates some more problems with etags (7.3): - - - 1. parentheses are confusing, - 2. preprocessor directives can disrupt other state machines. */ - -/* A small torture test for etags. */ - -/* The classic parenthesis nightmare, based on signal(). */ -void -(*tag1 (sig, handler)) () - int sig; - void (*handler) (); -{ - (*handler)(sig); - return handler; -} - -#define notag2 void -/* The classic, with user-defined return type. */ -notag2 -(*tag2 (sig, handler)) () - int sig; - void (*handler) (); -{ - (*handler)(sig); - return handler; -} - -/* The classic, in ANSI C style. */ -void -(*tag3 (int sig, void (*handler) (int))) (int) -{ - (*handler)(sig); - return handler; -} - -#define notag4 void -/* The classic, with user-defined return type, in ANSI C style. */ -notag4 -(*tag4 (int sig, void (*handler) (int))) (int) -{ - (*handler)(sig); - return handler; -} - - -/* A less tortuous example. */ -void -tag5 (handler, arg) -void (*handler)(); -void *arg; -{ - (*handler)(arg); -} - -/* A less tortuous example, in ANSI C style. */ -void -tag6 (void (*handler) (void *), void *arg) -{ - (*handler)(arg); -} - - -/* Interfering preprocessing torture */ - -int pp1( -#if (__STDC__) - int -#endif - bar) -#if (!__STDC__) - int bar; -#endif -{ - return bar; -} - -int -pp2 -#if __STDC__ - (int bar) -#else - (bar) - int bar; -#endif -{ - return bar; -} - -int -#if __STDC__ -pp3(int bar) -#else -pp3(bar) - int bar; -#endif -{ - return bar; -} diff --git a/test/etags/cp-src/c.C b/test/etags/cp-src/c.C index 2c5f7e0..dae933a 100644 --- a/test/etags/cp-src/c.C +++ b/test/etags/cp-src/c.C @@ -51,7 +51,7 @@ int A::f(A* x) {} A > A,int>::f(A* x) {} template class AT { C t[n]; }; class AU { T x; }; -class B { void f() {} }; +class B { void f() {} }; const A::B::T& abt = abc; class A { class B { int f(); }; }; class A { diff --git a/test/etags/html-src/algrthms.html b/test/etags/html-src/algrthms.html index 322dafa..f051505 100644 --- a/test/etags/html-src/algrthms.html +++ b/test/etags/html-src/algrthms.html @@ -1,519 +1,519 @@ - - - - - - - Tutorial on Convolutional Coding with Viterbi Decoding--Description of the Data Generation, Convolutional Encoding, Channel Mapping and AWGN, and Quantizing Algorithms - - -Description -of the Algorithms  (Part 1) -

 The steps involved in simulating a communication channel using -convolutional encoding and Viterbi decoding are as follows: -

    -
  • -Generate the data to be transmitted through -the channel-result is binary data bits
  • - -
  • -Convolutionally encode the data-result is channel -symbols
  • - -
  • -Map the one/zero channel symbols onto an antipodal -baseband signal, producing transmitted channel symbols
  • - -
  • -Add noise to the transmitted channel symbols-result -is received channel symbols
  • - -
  • -Quantize the received channel levels-one bit -quantization is called hard-decision, and two to n bit quantization is -called soft-decision (n is usually three or four)
  • - -
  • -Perform Viterbi decoding on the quantized -received channel symbols-result is again binary data bits
  • - -
  • -Compare the decoded data bits to the transmitted data bits and count the -number of errors.
  • -
-Many of you will notice that I left out the steps of modulating the -channel symbols onto a transmitted carrier, and then demodulating the received -carrier to recover the channel symbols. You're right, but we can accurately -model the effects of AWGN even though we bypass those steps. -

Generating the Data -

Generating the data to be transmitted through the channel can be accomplished -quite simply by using a random number generator. One that produces a uniform -distribution of numbers on the interval 0 to a maximum value is provided -in C: rand (). Using this function, we can say that any value -less than half of the maximum value is a zero; any value greater than or -equal to half of the maximum value is a one. -

Convolutionally -Encoding the Data -

Convolutionally encoding the data is accomplished using a shift register -and associated combinatorial logic that performs modulo-two addition. (A -shift register is merely a chain of flip-flops wherein the output of the -nth flip-flop is tied to the input of the (n+1)th flip-flop. Every time -the active edge of the clock occurs, the input to the flip-flop is clocked -through to the output, and thus the data are shifted over one stage.) The -combinatorial logic is often in the form of cascaded exclusive-or gates. -As a reminder, exclusive-or gates are two-input, one-output gates often -represented by the logic symbol shown below, -

-

exclusive-or gate symbol

- -

that implement the following truth-table: -
  -
  -

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
Input A
-
-
Input B
-
-
Output -

(A xor B)

-
-
0
-
-
0
-
-
0
-
-
0
-
-
1
-
-
1
-
-
1
-
-
0
-
-
1
-
-
1
-
-
1
-
-
0
-
- -

The exclusive-or gate performs modulo-two addition of its inputs. When -you cascade q two-input exclusive-or gates, with the output of the first -one feeding one of the inputs of the second one, the output of the second -one feeding one of the inputs of the third one, etc., the output of the -last one in the chain is the modulo-two sum of the q + 1 inputs. -

Another way to illustrate the modulo-two adder, and the way that is -most commonly used in textbooks, is as a circle with a + symbol inside, -thus: -

-

modulo-two adder symbol

- -

Now that we have the two basic components of the convolutional encoder -(flip-flops comprising the shift register and exclusive-or gates comprising -the associated modulo-two adders) defined, let's look at a picture of a -convolutional encoder for a rate 1/2, K = 3, m = 2 code: -
  -
  -
-

-

rate 1/2 K = 3 (7, 5) convolutional encoder

- -

In this encoder, data bits are provided at a rate of k bits per second. -Channel symbols are output at a rate of n = 2k symbols per second. The -input bit is stable during the encoder cycle. The encoder cycle starts -when an input clock edge occurs. When the input clock edge occurs, the -output of the left-hand flip-flop is clocked into the right-hand flip-flop, -the previous input bit is clocked into the left-hand flip-flop, and a new -input bit becomes available. Then the outputs of the upper and lower modulo-two -adders become stable. The output selector (SEL A/B block) cycles through -two states-in the first state, it selects and outputs the output of the -upper modulo-two adder; in the second state, it selects and outputs the -output of the lower modulo-two adder. -

The encoder shown above encodes the K = 3, (7, 5) convolutional code. -The octal numbers 7 and 5 represent the code generator polynomials, which -when read in binary (1112 and 1012) correspond to -the shift register connections to the upper and lower modulo-two adders, -respectively. This code has been determined to be the "best" code for rate -1/2, K = 3. It is the code I will use for the remaining discussion and -examples, for reasons that will become readily apparent when we get into -the Viterbi decoder algorithm. -

Let's look at an example input data stream, and the corresponding output -data stream: -

Let the input sequence be 0101110010100012. -

Assume that the outputs of both of the flip-flops in the shift register -are initially cleared, i.e. their outputs are zeroes. The first clock cycle -makes the first input bit, a zero, available to the encoder. The flip-flop -outputs are both zeroes. The inputs to the modulo-two adders are all zeroes, -so the output of the encoder is 002. -

The second clock cycle makes the second input bit available to the encoder. -The left-hand flip-flop clocks in the previous bit, which was a zero, and -the right-hand flip-flop clocks in the zero output by the left-hand flip-flop. -The inputs to the top modulo-two adder are 1002, so the output -is a one. The inputs to the bottom modulo-two adder are 102, -so the output is also a one. So the encoder outputs 112 for -the channel symbols. -

The third clock cycle makes the third input bit, a zero, available to -the encoder. The left-hand flip-flop clocks in the previous bit, which -was a one, and the right-hand flip-flop clocks in the zero from two bit-times -ago. The inputs to the top modulo-two adder are 0102, so the -output is a one. The inputs to the bottom modulo-two adder are 002, -so the output is zero. So the encoder outputs 102 for the channel -symbols. -

And so on. The timing diagram shown below illustrates the process: -
  -
  -
-

-

timing diagram for rate 1/2 convolutional encoder

- -


-
-
-

After all of the inputs have been presented to the encoder, the output -sequence will be: -

00 11 10 00 01 10 01 11 11 10 00 10 11 00 112. -

Notice that I have paired the encoder outputs-the first bit in each -pair is the output of the upper modulo-two adder; the second bit in each -pair is the output of the lower modulo-two adder. -

You can see from the structure of the rate 1/2 K = 3 convolutional encoder -and from the example given above that each input bit has an effect on three -successive pairs of output symbols. That is an extremely important point -and that is what gives the convolutional code its error-correcting power. -The reason why will become evident when we get into the Viterbi decoder -algorithm. -

Now if we are only going to send the 15 data bits given above, in order -for the last bit to affect three pairs of output symbols, we need to output -two more pairs of symbols. This is accomplished in our example encoder -by clocking the convolutional encoder flip-flops two ( = m) more times, -while holding the input at zero. This is called "flushing" the encoder, -and results in two more pairs of output symbols. The final binary output -of the encoder is thus 00 11 10 00 01 10 01 11 11 10 00 10 11 00 11 10 -112. If we don't perform the flushing operation, the last m -bits of the message have less error-correction capability than the first -through (m - 1)th bits had. This is a pretty important thing to remember -if you're going to use this FEC technique in a burst-mode environment. -So's the step of clearing the shift register at the beginning of each burst. -The encoder must start in a known state and end in a known state for the -decoder to be able to reconstruct the input data sequence properly. -

Now, let's look at the encoder from another perspective. You can think -of the encoder as a simple state machine. The example encoder has two bits -of memory, so there are four possible states. Let's give the left-hand -flip-flop a binary weight of 21, and the right-hand flip-flop -a binary weight of 20. Initially, the encoder is in the all-zeroes -state. If the first input bit is a zero, the encoder stays in the all zeroes -state at the next clock edge. But if the input bit is a one, the encoder -transitions to the 102 state at the next clock edge. Then, if -the next input bit is zero, the encoder transitions to the 012 -state, otherwise, it transitions to the 112 state. The following -table gives the next state given the current state and the input, with -the states given in binary: -
  -
  -

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  -
Next -State, if 
-
-
Current State
-
-
Input = 0:
-
-
Input = 1:
-
-
00
-
-
00
-
-
10
-
-
01
-
-
00
-
-
10
-
-
10
-
-
01
-
-
11
-
-
11
-
-
01
-
-
11
-
- -
  -

The above table is often called a state transition table. We'll refer -to it as the next state table. Now let us look at a table -that lists the channel output symbols, given the current state and the -input data, which we'll refer to as the output table: -
  -
  -

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
Output -Symbols, if
-
-
Current State
-
-
Input = 0:
-
-
Input = 1:
-
-
00
-
-
00
-
-
11
-
-
01
-
-
11
-
-
00
-
-
10
-
-
10
-
-
01
-
-
11
-
-
01
-
-
10
-
- -
  -

You should now see that with these two tables, you can completely describe -the behavior of the example rate 1/2, K = 3 convolutional encoder. Note -that both of these tables have 2(K - 1) rows, and 2k -columns, where K is the constraint length and k is the number of bits input -to the encoder for each cycle. These two tables will come in handy when -we start discussing the Viterbi decoder algorithm. -

Mapping the Channel Symbols -to Signal Levels -

Mapping the one/zero output of the convolutional encoder onto an antipodal -baseband signaling scheme is simply a matter of translating zeroes to +1s -and ones to -1s. This can be accomplished by performing the operation y -= 1 - 2x on each convolutional encoder output symbol. -

Adding Noise to the -Transmitted Symbols -

Adding noise to the transmitted channel symbols produced by the convolutional -encoder involves generating Gaussian random numbers, scaling the numbers -according to the desired energy per symbol to noise density ratio, Es/N0, -and adding the scaled Gaussian random numbers to the channel symbol values. -

For the uncoded channel, Es/N0 = Eb/N0, -since there is one channel symbol per bit.  However, for the coded -channel, Es/N0 = Eb/N0 + 10log10(k/n).  -For example, for rate 1/2 coding, Es/N0 = Eb/N0 -+ 10log10(1/2) = Eb/N0 - 3.01 dB.  -Similarly, for rate 2/3 coding, Es/N0 = Eb/N0 -+ 10log10(2/3) = Eb/N0 - 1.76 dB. -

The Gaussian random number generator is the only interesting part of -this task. C only provides a uniform random number generator, rand(). -In order to obtain Gaussian random numbers, we take advantage of relationships -between uniform, Rayleigh, and Gaussian distributions: -

Given a uniform random variable U, a Rayleigh random variable R can -be obtained by: -

equation for Rayleigh random deviate given uniform random deviate -

where is -the variance of the Rayleigh random variable, and given R and a second -uniform random variable V, two Gaussian random variables G and H can be -obtained by -

G = R cos U and H = R sin V. -

In the AWGN channel, the signal is corrupted by additive noise, n(t), -which has the power spectrum No/2 watts/Hz. The variance varianceof -this noise is equal to noise density div by two. -If we set the energy per symbol Es equal to 1, then equation relating variance to SNR. -So equation for AWGN st dev given SNR. -

Quantizing the Received -Channel Symbols -

An ideal Viterbi decoder would work with infinite precision, or at least -with floating-point numbers. In practical systems, we quantize the received -channel symbols with one or a few bits of precision in order to reduce -the complexity of the Viterbi decoder, not to mention the circuits that -precede it. If the received channel symbols are quantized to one-bit precision -(< 0V = 1, > 0V = 0), the result is called hard-decision data. -If the received channel symbols are quantized with more than one bit of -precision, the result is called soft-decision data. A Viterbi decoder with -soft decision data inputs quantized to three or four bits of precision -can perform about 2 dB better than one working with hard-decision inputs. -The usual quantization precision is three bits. More bits provide little -additional improvement. -

The selection of the quantizing levels is an important design decision -because it can have a significant effect on the performance of the link. -The following is a very brief explanation of one way to set those levels. -Let's assume our received signal levels in the absence of noise are -1V -= 1, +1V = 0. With noise, our received signal has mean +/- 1 and standard -deviation equation for AWGN st dev given SNR. -Let's use a uniform, three-bit quantizer having the input/output relationship -shown in the figure below, where D is a decision level that we will calculate -shortly: -

-

8-level quantizer function plot

- -

The decision level, D, can be calculated according to the formula equation for quantizer decision level, -where Es/N0 is the energy per symbol to noise density -ratio. (The above figure was redrawn from Figure 2 of Advanced Hardware -Architecture's ANRS07-0795, "Soft Decision Thresholds and Effects on Viterbi -Performance". See the bibliography  -for a link to their web pages.) -

Click here to proceed to the description -of the Viterbi decoding algorithm itself... -

Or click on one of the links below to go to the beginning of that section: -

 Introduction -
 Description of the Algorithms  -(Part 2) -
 Simulation Source Code Examples -
 Example Simulation Results -
 Bibliography -
 About Spectrum Applications... -
  -
  -
-
-

-

- - - + + + + + + + Tutorial on Convolutional Coding with Viterbi Decoding--Description of the Data Generation, Convolutional Encoding, Channel Mapping and AWGN, and Quantizing Algorithms + + +Description +of the Algorithms  (Part 1) +

 The steps involved in simulating a communication channel using +convolutional encoding and Viterbi decoding are as follows: +

    +
  • +Generate the data to be transmitted through +the channel-result is binary data bits
  • + +
  • +Convolutionally encode the data-result is channel +symbols
  • + +
  • +Map the one/zero channel symbols onto an antipodal +baseband signal, producing transmitted channel symbols
  • + +
  • +Add noise to the transmitted channel symbols-result +is received channel symbols
  • + +
  • +Quantize the received channel levels-one bit +quantization is called hard-decision, and two to n bit quantization is +called soft-decision (n is usually three or four)
  • + +
  • +Perform Viterbi decoding on the quantized +received channel symbols-result is again binary data bits
  • + +
  • +Compare the decoded data bits to the transmitted data bits and count the +number of errors.
  • +
+Many of you will notice that I left out the steps of modulating the +channel symbols onto a transmitted carrier, and then demodulating the received +carrier to recover the channel symbols. You're right, but we can accurately +model the effects of AWGN even though we bypass those steps. +

Generating the Data +

Generating the data to be transmitted through the channel can be accomplished +quite simply by using a random number generator. One that produces a uniform +distribution of numbers on the interval 0 to a maximum value is provided +in C: rand (). Using this function, we can say that any value +less than half of the maximum value is a zero; any value greater than or +equal to half of the maximum value is a one. +

Convolutionally +Encoding the Data +

Convolutionally encoding the data is accomplished using a shift register +and associated combinatorial logic that performs modulo-two addition. (A +shift register is merely a chain of flip-flops wherein the output of the +nth flip-flop is tied to the input of the (n+1)th flip-flop. Every time +the active edge of the clock occurs, the input to the flip-flop is clocked +through to the output, and thus the data are shifted over one stage.) The +combinatorial logic is often in the form of cascaded exclusive-or gates. +As a reminder, exclusive-or gates are two-input, one-output gates often +represented by the logic symbol shown below, +

+

exclusive-or gate symbol

+ +

that implement the following truth-table: +
  +
  +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
Input A
+
+
Input B
+
+
Output +

(A xor B)

+
+
0
+
+
0
+
+
0
+
+
0
+
+
1
+
+
1
+
+
1
+
+
0
+
+
1
+
+
1
+
+
1
+
+
0
+
+ +

The exclusive-or gate performs modulo-two addition of its inputs. When +you cascade q two-input exclusive-or gates, with the output of the first +one feeding one of the inputs of the second one, the output of the second +one feeding one of the inputs of the third one, etc., the output of the +last one in the chain is the modulo-two sum of the q + 1 inputs. +

Another way to illustrate the modulo-two adder, and the way that is +most commonly used in textbooks, is as a circle with a + symbol inside, +thus: +

+

modulo-two adder symbol

+ +

Now that we have the two basic components of the convolutional encoder +(flip-flops comprising the shift register and exclusive-or gates comprising +the associated modulo-two adders) defined, let's look at a picture of a +convolutional encoder for a rate 1/2, K = 3, m = 2 code: +
  +
  +
+

+

rate 1/2 K = 3 (7, 5) convolutional encoder

+ +

In this encoder, data bits are provided at a rate of k bits per second. +Channel symbols are output at a rate of n = 2k symbols per second. The +input bit is stable during the encoder cycle. The encoder cycle starts +when an input clock edge occurs. When the input clock edge occurs, the +output of the left-hand flip-flop is clocked into the right-hand flip-flop, +the previous input bit is clocked into the left-hand flip-flop, and a new +input bit becomes available. Then the outputs of the upper and lower modulo-two +adders become stable. The output selector (SEL A/B block) cycles through +two states-in the first state, it selects and outputs the output of the +upper modulo-two adder; in the second state, it selects and outputs the +output of the lower modulo-two adder. +

The encoder shown above encodes the K = 3, (7, 5) convolutional code. +The octal numbers 7 and 5 represent the code generator polynomials, which +when read in binary (1112 and 1012) correspond to +the shift register connections to the upper and lower modulo-two adders, +respectively. This code has been determined to be the "best" code for rate +1/2, K = 3. It is the code I will use for the remaining discussion and +examples, for reasons that will become readily apparent when we get into +the Viterbi decoder algorithm. +

Let's look at an example input data stream, and the corresponding output +data stream: +

Let the input sequence be 0101110010100012. +

Assume that the outputs of both of the flip-flops in the shift register +are initially cleared, i.e. their outputs are zeroes. The first clock cycle +makes the first input bit, a zero, available to the encoder. The flip-flop +outputs are both zeroes. The inputs to the modulo-two adders are all zeroes, +so the output of the encoder is 002. +

The second clock cycle makes the second input bit available to the encoder. +The left-hand flip-flop clocks in the previous bit, which was a zero, and +the right-hand flip-flop clocks in the zero output by the left-hand flip-flop. +The inputs to the top modulo-two adder are 1002, so the output +is a one. The inputs to the bottom modulo-two adder are 102, +so the output is also a one. So the encoder outputs 112 for +the channel symbols. +

The third clock cycle makes the third input bit, a zero, available to +the encoder. The left-hand flip-flop clocks in the previous bit, which +was a one, and the right-hand flip-flop clocks in the zero from two bit-times +ago. The inputs to the top modulo-two adder are 0102, so the +output is a one. The inputs to the bottom modulo-two adder are 002, +so the output is zero. So the encoder outputs 102 for the channel +symbols. +

And so on. The timing diagram shown below illustrates the process: +
  +
  +
+

+

timing diagram for rate 1/2 convolutional encoder

+ +


+
+
+

After all of the inputs have been presented to the encoder, the output +sequence will be: +

00 11 10 00 01 10 01 11 11 10 00 10 11 00 112. +

Notice that I have paired the encoder outputs-the first bit in each +pair is the output of the upper modulo-two adder; the second bit in each +pair is the output of the lower modulo-two adder. +

You can see from the structure of the rate 1/2 K = 3 convolutional encoder +and from the example given above that each input bit has an effect on three +successive pairs of output symbols. That is an extremely important point +and that is what gives the convolutional code its error-correcting power. +The reason why will become evident when we get into the Viterbi decoder +algorithm. +

Now if we are only going to send the 15 data bits given above, in order +for the last bit to affect three pairs of output symbols, we need to output +two more pairs of symbols. This is accomplished in our example encoder +by clocking the convolutional encoder flip-flops two ( = m) more times, +while holding the input at zero. This is called "flushing" the encoder, +and results in two more pairs of output symbols. The final binary output +of the encoder is thus 00 11 10 00 01 10 01 11 11 10 00 10 11 00 11 10 +112. If we don't perform the flushing operation, the last m +bits of the message have less error-correction capability than the first +through (m - 1)th bits had. This is a pretty important thing to remember +if you're going to use this FEC technique in a burst-mode environment. +So's the step of clearing the shift register at the beginning of each burst. +The encoder must start in a known state and end in a known state for the +decoder to be able to reconstruct the input data sequence properly. +

Now, let's look at the encoder from another perspective. You can think +of the encoder as a simple state machine. The example encoder has two bits +of memory, so there are four possible states. Let's give the left-hand +flip-flop a binary weight of 21, and the right-hand flip-flop +a binary weight of 20. Initially, the encoder is in the all-zeroes +state. If the first input bit is a zero, the encoder stays in the all zeroes +state at the next clock edge. But if the input bit is a one, the encoder +transitions to the 102 state at the next clock edge. Then, if +the next input bit is zero, the encoder transitions to the 012 +state, otherwise, it transitions to the 112 state. The following +table gives the next state given the current state and the input, with +the states given in binary: +
  +
  +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
  +
Next +State, if 
+
+
Current State
+
+
Input = 0:
+
+
Input = 1:
+
+
00
+
+
00
+
+
10
+
+
01
+
+
00
+
+
10
+
+
10
+
+
01
+
+
11
+
+
11
+
+
01
+
+
11
+
+ +
  +

The above table is often called a state transition table. We'll refer +to it as the next state table. Now let us look at a table +that lists the channel output symbols, given the current state and the +input data, which we'll refer to as the output table: +
  +
  +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
Output +Symbols, if
+
+
Current State
+
+
Input = 0:
+
+
Input = 1:
+
+
00
+
+
00
+
+
11
+
+
01
+
+
11
+
+
00
+
+
10
+
+
10
+
+
01
+
+
11
+
+
01
+
+
10
+
+ +
  +

You should now see that with these two tables, you can completely describe +the behavior of the example rate 1/2, K = 3 convolutional encoder. Note +that both of these tables have 2(K - 1) rows, and 2k +columns, where K is the constraint length and k is the number of bits input +to the encoder for each cycle. These two tables will come in handy when +we start discussing the Viterbi decoder algorithm. +

Mapping the Channel Symbols +to Signal Levels +

Mapping the one/zero output of the convolutional encoder onto an antipodal +baseband signaling scheme is simply a matter of translating zeroes to +1s +and ones to -1s. This can be accomplished by performing the operation y += 1 - 2x on each convolutional encoder output symbol. +

Adding Noise to the +Transmitted Symbols +

Adding noise to the transmitted channel symbols produced by the convolutional +encoder involves generating Gaussian random numbers, scaling the numbers +according to the desired energy per symbol to noise density ratio, Es/N0, +and adding the scaled Gaussian random numbers to the channel symbol values. +

For the uncoded channel, Es/N0 = Eb/N0, +since there is one channel symbol per bit.  However, for the coded +channel, Es/N0 = Eb/N0 + 10log10(k/n).  +For example, for rate 1/2 coding, Es/N0 = Eb/N0 ++ 10log10(1/2) = Eb/N0 - 3.01 dB.  +Similarly, for rate 2/3 coding, Es/N0 = Eb/N0 ++ 10log10(2/3) = Eb/N0 - 1.76 dB. +

The Gaussian random number generator is the only interesting part of +this task. C only provides a uniform random number generator, rand(). +In order to obtain Gaussian random numbers, we take advantage of relationships +between uniform, Rayleigh, and Gaussian distributions: +

Given a uniform random variable U, a Rayleigh random variable R can +be obtained by: +

equation for Rayleigh random deviate given uniform random deviate +

where is +the variance of the Rayleigh random variable, and given R and a second +uniform random variable V, two Gaussian random variables G and H can be +obtained by +

G = R cos U and H = R sin V. +

In the AWGN channel, the signal is corrupted by additive noise, n(t), +which has the power spectrum No/2 watts/Hz. The variance varianceof +this noise is equal to noise density div by two. +If we set the energy per symbol Es equal to 1, then equation relating variance to SNR. +So equation for AWGN st dev given SNR. +

Quantizing the Received +Channel Symbols +

An ideal Viterbi decoder would work with infinite precision, or at least +with floating-point numbers. In practical systems, we quantize the received +channel symbols with one or a few bits of precision in order to reduce +the complexity of the Viterbi decoder, not to mention the circuits that +precede it. If the received channel symbols are quantized to one-bit precision +(< 0V = 1, > 0V = 0), the result is called hard-decision data. +If the received channel symbols are quantized with more than one bit of +precision, the result is called soft-decision data. A Viterbi decoder with +soft decision data inputs quantized to three or four bits of precision +can perform about 2 dB better than one working with hard-decision inputs. +The usual quantization precision is three bits. More bits provide little +additional improvement. +

The selection of the quantizing levels is an important design decision +because it can have a significant effect on the performance of the link. +The following is a very brief explanation of one way to set those levels. +Let's assume our received signal levels in the absence of noise are -1V += 1, +1V = 0. With noise, our received signal has mean +/- 1 and standard +deviation equation for AWGN st dev given SNR. +Let's use a uniform, three-bit quantizer having the input/output relationship +shown in the figure below, where D is a decision level that we will calculate +shortly: +

+

8-level quantizer function plot

+ +

The decision level, D, can be calculated according to the formula equation for quantizer decision level, +where Es/N0 is the energy per symbol to noise density +ratio. (The above figure was redrawn from Figure 2 of Advanced Hardware +Architecture's ANRS07-0795, "Soft Decision Thresholds and Effects on Viterbi +Performance". See the bibliography  +for a link to their web pages.) +

Click here to proceed to the description +of the Viterbi decoding algorithm itself... +

Or click on one of the links below to go to the beginning of that section: +

 Introduction +
 Description of the Algorithms  +(Part 2) +
 Simulation Source Code Examples +
 Example Simulation Results +
 Bibliography +
 About Spectrum Applications... +
  +
  +
+
+

+

+ + + commit 18338b1dff981b17426048dfa20a4c6e6e12c5aa Author: Eli Zaretskii Date: Tue May 19 18:39:25 2015 +0300 Fix display of overlapping window-specific overlays * src/keyboard.c (adjust_point_for_property): When adjusting point due to display strings, ignore overlays that are specific to windows other than the currently selected one. * src/xdisp.c (handle_single_display_spec): If the display property comes from an overlay, arrange for buffer iteration to resume only after the end of that overlay. (Bug#20607) diff --git a/src/keyboard.c b/src/keyboard.c index 77f7fb9..eb66c44 100644 --- a/src/keyboard.c +++ b/src/keyboard.c @@ -1702,7 +1702,8 @@ adjust_point_for_property (ptrdiff_t last_pt, bool modified) if (check_display && PT > BEGV && PT < ZV && !NILP (val = get_char_property_and_overlay - (make_number (PT), Qdisplay, Qnil, &overlay)) + (make_number (PT), Qdisplay, selected_window, + &overlay)) && display_prop_intangible_p (val, overlay, PT, PT_BYTE) && (!OVERLAYP (overlay) ? get_property_and_range (PT, Qdisplay, &val, &beg, &end, Qnil) diff --git a/src/xdisp.c b/src/xdisp.c index c2f0b74..8123719 100644 --- a/src/xdisp.c +++ b/src/xdisp.c @@ -4899,6 +4899,20 @@ handle_single_display_spec (struct it *it, Lisp_Object spec, Lisp_Object object, { start_pos = *position; *position = display_prop_end (it, object, start_pos); + /* If the display property comes from an overlay, don't consider + any potential stop_charpos values before the end of that + overlay. Since display_prop_end will happily find another + 'display' property coming from some other overlay or text + property on buffer positions before this overlay's end, we + need to ignore them, or else we risk displaying this + overlay's display string/image twice. */ + if (!NILP (overlay)) + { + ptrdiff_t ovendpos = OVERLAY_POSITION (OVERLAY_END (overlay)); + + if (ovendpos > CHARPOS (*position)) + SET_TEXT_POS (*position, ovendpos, CHAR_TO_BYTE (ovendpos)); + } } value = Qnil; commit 08033db08bc2bc75221b0dde97257c987d4efa00 Author: Dmitry Gutov Date: Tue May 19 15:52:27 2015 +0300 New command icomplete-force-complete-and-exit * lisp/icomplete.el (icomplete-force-complete-and-exit): New command (http://lists.gnu.org/archive/html/emacs-devel/2015-05/msg00461.html) (http://lists.gnu.org/archive/html/emacs-devel/2015-05/msg00516.html). (icomplete-minibuffer-map): Bind C-j to it. (icomplete-forward-completions, icomplete-backward-completions): Mention the new command in the docstring. * lisp/minibuffer.el (minibuffer-force-complete-and-exit): Revert the previous fix for bug#17545. diff --git a/lisp/icomplete.el b/lisp/icomplete.el index ee28112..b1894ca 100644 --- a/lisp/icomplete.el +++ b/lisp/icomplete.el @@ -149,16 +149,26 @@ icompletion is occurring." (defvar icomplete-minibuffer-map (let ((map (make-sparse-keymap))) (define-key map [?\M-\t] 'minibuffer-force-complete) - (define-key map [?\C-j] 'minibuffer-force-complete-and-exit) + (define-key map [?\C-j] 'icomplete-force-complete-and-exit) (define-key map [?\C-.] 'icomplete-forward-completions) (define-key map [?\C-,] 'icomplete-backward-completions) map) "Keymap used by `icomplete-mode' in the minibuffer.") +(defun icomplete-force-complete-and-exit () + "Complete the minibuffer and exit. +Use the first of the matches if there are any displayed, and use +the default otherwise." + (interactive) + (if (or icomplete-show-matches-on-no-input + (> (icomplete--field-end) (icomplete--field-beg))) + (minibuffer-force-complete-and-exit) + (minibuffer-complete-and-exit))) + (defun icomplete-forward-completions () "Step forward completions by one entry. Second entry becomes the first and can be selected with -`minibuffer-force-complete-and-exit'." +`icomplete-force-complete-and-exit'." (interactive) (let* ((beg (icomplete--field-beg)) (end (icomplete--field-end)) @@ -171,7 +181,7 @@ Second entry becomes the first and can be selected with (defun icomplete-backward-completions () "Step backward completions by one entry. Last entry becomes the first and can be selected with -`minibuffer-force-complete-and-exit'." +`icomplete-force-complete-and-exit'." (interactive) (let* ((beg (icomplete--field-beg)) (end (icomplete--field-end)) diff --git a/lisp/minibuffer.el b/lisp/minibuffer.el index 538bd97..60b89b6 100644 --- a/lisp/minibuffer.el +++ b/lisp/minibuffer.el @@ -1241,16 +1241,12 @@ scroll the window of possible completions." (defun minibuffer-force-complete-and-exit () "Complete the minibuffer with first of the matches and exit." (interactive) - (if (and (eq (minibuffer-prompt-end) (point-max)) - minibuffer-default) - ;; Use the provided default if there's one (bug#17545). - (minibuffer-complete-and-exit) - (minibuffer-force-complete) - (completion--complete-and-exit - (minibuffer-prompt-end) (point-max) #'exit-minibuffer - ;; If the previous completion completed to an element which fails - ;; test-completion, then we shouldn't exit, but that should be rare. - (lambda () (minibuffer-message "Incomplete"))))) + (minibuffer-force-complete) + (completion--complete-and-exit + (minibuffer-prompt-end) (point-max) #'exit-minibuffer + ;; If the previous completion completed to an element which fails + ;; test-completion, then we shouldn't exit, but that should be rare. + (lambda () (minibuffer-message "Incomplete")))) (defun minibuffer-force-complete (&optional start end) "Complete the minibuffer to an exact match. commit e0fec8d3cad6efbcc39c5c9d1d53cef40f27a250 Author: Martin Rudalics Date: Tue May 19 12:19:10 2015 +0200 Fix last commit diff --git a/doc/lispref/frames.texi b/doc/lispref/frames.texi index 8cadf79..ddf81f3 100644 --- a/doc/lispref/frames.texi +++ b/doc/lispref/frames.texi @@ -664,7 +664,7 @@ edge, combining position notation and @code{user-position} as in @example (modify-frame-parameters - '((user-position . t) (left . (+ -4)))) + nil '((user-position . t) (left . (+ -4)))) @end example may help to override that. commit 90456460dfa8e9dca55e5cfad6db9da1ad7292af Author: Martin Rudalics Date: Tue May 19 11:35:17 2015 +0200 In Elisp manual explain how to override window manager positioning (Bug#20552) * doc/lispref/frames.texi (Position Parameters): Give example of how to override a window manager positioning decision. diff --git a/doc/lispref/frames.texi b/doc/lispref/frames.texi index c0d17f0..8cadf79 100644 --- a/doc/lispref/frames.texi +++ b/doc/lispref/frames.texi @@ -659,6 +659,16 @@ Some window managers ignore program-specified positions. If you want to be sure the position you specify is not ignored, specify a non-@code{nil} value for the @code{user-position} parameter as well. +If the window manager refuses to align a frame at the left or top screen +edge, combining position notation and @code{user-position} as in + +@example +(modify-frame-parameters + '((user-position . t) (left . (+ -4)))) +@end example + +may help to override that. + @vindex top, a frame parameter @item top The screen position of the top (or bottom) edge, in pixels, with respect commit 9a07af01d046d072520593a729ea18230761e205 Author: Martin Rudalics Date: Tue May 19 11:08:21 2015 +0200 Clarify concept of "surrogate minibuffer frames" (Bug#20538) * src/frame.c (Fdelete_frame): In doc-string mention that frame can't be deleted if it has a surrogate minibuffer. * doc/lispref/frames.texi (Minibuffers and Frames) (Deleting Frames): Explain "surrogate minibuffer frames". diff --git a/doc/lispref/frames.texi b/doc/lispref/frames.texi index e19472e..c0d17f0 100644 --- a/doc/lispref/frames.texi +++ b/doc/lispref/frames.texi @@ -1624,7 +1624,8 @@ tooltip, it first runs the hook @code{delete-frame-functions} (each function gets one argument, @var{frame}). By default, @var{frame} is the selected frame. -A frame cannot be deleted if its minibuffer is used by other frames. +A frame cannot be deleted as long as its minibuffer serves as surrogate +minibuffer for another frame (@pxref{Minibuffers and Frames}). Normally, you cannot delete a frame if all other frames are invisible, but if @var{force} is non-@code{nil}, then you are allowed to do so. @end deffn @@ -1700,12 +1701,18 @@ you can get it with @code{minibuffer-window} (@pxref{Definition of minibuffer-window}). @cindex frame without a minibuffer -However, you can also create a frame with no minibuffer. Such a frame -must use the minibuffer window of some other frame. When you create the -frame, you can explicitly specify the minibuffer window to use (in some -other frame). If you don't, then the minibuffer is found in the frame -which is the value of the variable @code{default-minibuffer-frame}. Its -value should be a frame that does have a minibuffer. +@cindex surrogate minibuffer frame +However, you can also create a frame without a minibuffer. Such a frame +must use the minibuffer window of some other frame. That other frame +will serve as @dfn{surrogate minibuffer frame} for this frame and cannot +be deleted via @code{delete-frame} (@pxref{Deleting Frames}) as long as +this frame is live. + +When you create the frame, you can explicitly specify the minibuffer +window to use (in some other frame). If you don't, then the minibuffer +is found in the frame which is the value of the variable +@code{default-minibuffer-frame}. Its value should be a frame that does +have a minibuffer. If you use a minibuffer-only frame, you might want that frame to raise when you enter the minibuffer. If so, set the variable diff --git a/src/frame.c b/src/frame.c index 2208655..edf6566 100644 --- a/src/frame.c +++ b/src/frame.c @@ -1823,9 +1823,10 @@ DEFUN ("delete-frame", Fdelete_frame, Sdelete_frame, 0, 2, "", doc: /* Delete FRAME, permanently eliminating it from use. FRAME defaults to the selected frame. -A frame may not be deleted if its minibuffer is used by other frames. -Normally, you may not delete a frame if all other frames are invisible, -but if the second optional argument FORCE is non-nil, you may do so. +A frame may not be deleted if its minibuffer serves as surrogate +minibuffer for another frame. Normally, you may not delete a frame if +all other frames are invisible, but if the second optional argument +FORCE is non-nil, you may do so. This function runs `delete-frame-functions' before actually deleting the frame, unless the frame is a tooltip.