commit 6e6c08815347a78008211613c9ddfa0acd7f0ef8 (HEAD, refs/remotes/origin/master) Author: Mark Oteiza Date: Wed Oct 5 22:52:20 2016 -0400 * lisp/url-url-parse.el (url-generic-parse-url): Unquote macro URL argument. diff --git a/lisp/url/url-parse.el b/lisp/url/url-parse.el index 6e51b35..2800caf 100644 --- a/lisp/url/url-parse.el +++ b/lisp/url/url-parse.el @@ -224,7 +224,7 @@ parses to fragment nil full)))))) (defmacro url-bit-for-url (method lookfor url) - `(let* ((urlobj (url-generic-parse-url url)) + `(let* ((urlobj (url-generic-parse-url ,url)) (bit (funcall ,method urlobj)) (methods (list 'url-recreate-url 'url-host)) commit b9a6314914aced02ab1d47662e4e9e375aa604d5 Author: Mark Oteiza Date: Wed Oct 5 22:49:14 2016 -0400 Autoload entry point testcover-start * lisp/emacs-lisp/testcover.el: Add autoload cookie for testcover-start. diff --git a/lisp/emacs-lisp/testcover.el b/lisp/emacs-lisp/testcover.el index a0c0d85..c6a5e3b 100644 --- a/lisp/emacs-lisp/testcover.el +++ b/lisp/emacs-lisp/testcover.el @@ -184,6 +184,7 @@ call to one of the `testcover-1value-functions'." ;;; Add instrumentation to your module ;;;========================================================================= +;;;###autoload (defun testcover-start (filename &optional byte-compile) "Uses edebug to instrument all macros and functions in FILENAME, then changes the instrumentation from edebug to testcover--much faster, no commit 1add5ec3a270cba99549dc7e78c529c3dd190784 Author: Thomas Fitzsimmons Date: Sun Oct 2 00:01:43 2016 -0400 Bump version of ntlm.el to 2.1.0 * lisp/net/ntlm.el: Bump version to 2.1.0. diff --git a/lisp/net/ntlm.el b/lisp/net/ntlm.el index 7d285c5..e272002 100644 --- a/lisp/net/ntlm.el +++ b/lisp/net/ntlm.el @@ -5,7 +5,7 @@ ;; Author: Taro Kawagishi ;; Maintainer: Thomas Fitzsimmons ;; Keywords: NTLM, SASL, comm -;; Version: 2.0.0 +;; Version: 2.1.0 ;; Created: February 2001 ;; This file is part of GNU Emacs. commit 33c607aab51636a19dcd67abb9bee0c0be077b46 Author: Thomas Fitzsimmons Date: Sat Oct 1 23:57:20 2016 -0400 lisp/net/ntlm.el: Fix comment and docstring formatting diff --git a/lisp/net/ntlm.el b/lisp/net/ntlm.el index 89f09b0..7d285c5 100644 --- a/lisp/net/ntlm.el +++ b/lisp/net/ntlm.el @@ -49,10 +49,12 @@ ;; ;; 1. Open a network connection to the Exchange server at the IMAP port (143) ;; 2. Receive an opening message such as: -;; "* OK Microsoft Exchange IMAP4rev1 server version 5.5.2653.7 (XXXX) ready" +;; "* OK Microsoft Exchange IMAP4rev1 server +;; version 5.5.2653.7 (XXXX) ready" ;; 3. Ask for IMAP server capability by sending "NNN capability" ;; 4. Receive a capability message such as: -;; "* CAPABILITY IMAP4 IMAP4rev1 IDLE LITERAL+ LOGIN-REFERRALS MAILBOX-REFERRALS NAMESPACE AUTH=NTLM" +;; "* CAPABILITY IMAP4 IMAP4rev1 IDLE LITERAL+ +;; LOGIN-REFERRALS MAILBOX-REFERRALS NAMESPACE AUTH=NTLM" ;; 5. Ask for NTLM authentication by sending a string ;; "NNN authenticate ntlm" ;; 6. Receive continuation acknowledgment "+" @@ -118,17 +120,17 @@ is not given." (setq off-u 32) ;offset to the string 'user (setq off-d (+ 32 lu)) ;offset to the string 'domain ;; pack the request struct in a string - (concat request-ident ;8 bytes - request-msgType ;4 bytes - request-flags ;4 bytes - (md4-pack-int16 lu) ;user field, count field - (md4-pack-int16 lu) ;user field, max count field - (md4-pack-int32 (cons 0 off-u)) ;user field, offset field - (md4-pack-int16 ld) ;domain field, count field - (md4-pack-int16 ld) ;domain field, max count field - (md4-pack-int32 (cons 0 off-d)) ;domain field, offset field - user ;buffer field - domain ;buffer field + (concat request-ident ;8 bytes + request-msgType ;4 bytes + request-flags ;4 bytes + (md4-pack-int16 lu) ;user field, count field + (md4-pack-int16 lu) ;user field, max count field + (md4-pack-int32 (cons 0 off-u)) ;user field, offset field + (md4-pack-int16 ld) ;domain field, count field + (md4-pack-int16 ld) ;domain field, max count field + (md4-pack-int32 (cons 0 off-d)) ;domain field, offset field + user ;buffer field + domain ;buffer field ))) (eval-when-compile @@ -239,12 +241,12 @@ by PASSWORD-HASHES. PASSWORD-HASHES should be a return value of (cadr password-hashes))) (nonce (ntlm-generate-nonce)) (blob (concat (make-string 2 1) - (make-string 2 0) ; blob signature - (make-string 4 0) ; reserved value - (ntlm-compute-timestamp) ; timestamp - nonce ; client nonce - (make-string 4 0) ; unknown - targetInfo)) ; target info + (make-string 2 0) ;blob signature + (make-string 4 0) ;reserved value + (ntlm-compute-timestamp) ;timestamp + nonce ;client nonce + (make-string 4 0) ;unknown + targetInfo)) ;target info ;; for reference: LMv2 interim calculation (lm-interim (hmac-md5 (concat challengeData nonce) ntlmv2-hash)) @@ -288,58 +290,58 @@ by PASSWORD-HASHES. PASSWORD-HASHES should be a return value of (setq off-lm (+ off-w (* 2 lw))) ;offset to string 'lmResponse (setq off-nt (+ off-lm ll)) ;offset to string 'ntResponse ;; pack the response struct in a string - (concat "NTLMSSP\0" ;response ident field, 8 bytes - (md4-pack-int32 '(0 . 3)) ;response msgType field, 4 bytes + (concat "NTLMSSP\0" ;response ident field, 8 bytes + (md4-pack-int32 '(0 . 3)) ;response msgType field, 4 bytes ;; lmResponse field, 8 bytes ;;AddBytes(response,lmResponse,lmRespData,24); - (md4-pack-int16 ll) ;len field - (md4-pack-int16 ll) ;maxlen field - (md4-pack-int32 (cons 0 off-lm)) ;field offset + (md4-pack-int16 ll) ;len field + (md4-pack-int16 ll) ;maxlen field + (md4-pack-int32 (cons 0 off-lm)) ;field offset ;; ntResponse field, 8 bytes ;;AddBytes(response,ntResponse,ntRespData,ln); - (md4-pack-int16 ln) ;len field - (md4-pack-int16 ln) ;maxlen field - (md4-pack-int32 (cons 0 off-nt)) ;field offset + (md4-pack-int16 ln) ;len field + (md4-pack-int16 ln) ;maxlen field + (md4-pack-int32 (cons 0 off-nt)) ;field offset ;; uDomain field, 8 bytes ;;AddUnicodeString(response,uDomain,domain); ;;AddBytes(response, uDomain, udomain, 2*ld); - (md4-pack-int16 (* 2 ld)) ;len field - (md4-pack-int16 (* 2 ld)) ;maxlen field + (md4-pack-int16 (* 2 ld)) ;len field + (md4-pack-int16 (* 2 ld)) ;maxlen field ;; match Mozilla behavior, which is to hard-code the ;; domain offset to 64 - (md4-pack-int32 (cons 0 64)) ;field offset + (md4-pack-int32 (cons 0 64)) ;field offset ;; uUser field, 8 bytes ;;AddUnicodeString(response,uUser,u); ;;AddBytes(response, uUser, uuser, 2*lu); - (md4-pack-int16 (* 2 lu)) ;len field - (md4-pack-int16 (* 2 lu)) ;maxlen field - (md4-pack-int32 (cons 0 off-u)) ;field offset + (md4-pack-int16 (* 2 lu)) ;len field + (md4-pack-int16 (* 2 lu)) ;maxlen field + (md4-pack-int32 (cons 0 off-u)) ;field offset ;; uWks field, 8 bytes ;;AddUnicodeString(response,uWks,u); - (md4-pack-int16 (* 2 lw)) ;len field - (md4-pack-int16 (* 2 lw)) ;maxlen field - (md4-pack-int32 (cons 0 off-w)) ;field offset + (md4-pack-int16 (* 2 lw)) ;len field + (md4-pack-int16 (* 2 lw)) ;maxlen field + (md4-pack-int32 (cons 0 off-w)) ;field offset ;; sessionKey field, blank, 8 bytes ;;AddString(response,sessionKey,NULL); - (md4-pack-int16 0) ;len field - (md4-pack-int16 0) ;maxlen field - (md4-pack-int32 (cons 0 0)) ;field offset + (md4-pack-int16 0) ;len field + (md4-pack-int16 0) ;maxlen field + (md4-pack-int32 (cons 0 0)) ;field offset ;; flags field, 4 bytes - flags ; + flags ;; buffer field (ntlm-ascii2unicode user lu) ;Unicode user, 2*lu bytes (ntlm-ascii2unicode domain ld) ;Unicode domain, 2*ld bytes (ntlm-ascii2unicode workstation lw) ;Unicode workstation, 2*lw bytes - lmRespData ;lmResponse, 24 bytes - ntRespData ;ntResponse, ln bytes + lmRespData ;lmResponse, 24 bytes + ntRespData ;ntResponse, ln bytes ))) (defun ntlm-get-password-hashes (password) @@ -558,7 +560,7 @@ length of STR is LEN." (concat (substring str c len) (substring str 0 c)))) (defsubst ntlm-string-xor (in1 in2 n) - "Return exclusive-or of sequences in1 and in2" + "Return exclusive-or of sequences in1 and in2." (let ((w (make-string n 0)) (i 0)) (while (< i n) (aset w i (logxor (aref in1 i) (aref in2 i))) commit 680e3986adaf1742a6a69ef2eb43a874ca6d5984 Author: Thomas Fitzsimmons Date: Sat Oct 1 23:30:07 2016 -0400 lisp/net/ntlm.el: Match Mozilla Type 1 and 3 message behavior * lisp/net/ntlm.el (ntlm-build-auth-request): Only set "negotiate domain supplied" bit when a domain is supplied. Do not set "negotiate workstation supplied" bit. (ntlm-build-auth-response): Set domain to empty string by default. Set workstation name to "WORKSTATION". Set flags to logical and of Type 1 and Type 2 message flags. Remove four trailing 0 bytes. Always set LM response. Hard-code domain offset. Reorder buffer fields. diff --git a/lisp/net/ntlm.el b/lisp/net/ntlm.el index d96f3b1..89f09b0 100644 --- a/lisp/net/ntlm.el +++ b/lisp/net/ntlm.el @@ -101,14 +101,17 @@ is not given." (let ((request-ident (concat "NTLMSSP" (make-string 1 0))) (request-msgType (concat (make-string 1 1) (make-string 3 0))) ;0x01 0x00 0x00 0x00 - (request-flags (concat (make-string 1 7) (make-string 1 178) + (request-flags (concat (make-string 1 7) (make-string 1 130) (make-string 1 8) (make-string 1 0))) - ;0x07 0xb2 0x08 0x00 + ;0x07 0x82 0x08 0x00 lu ld off-d off-u) - (when (string-match "@" user) + (when (and user (string-match "@" user)) (unless domain (setq domain (substring user (1+ (match-beginning 0))))) (setq user (substring user 0 (match-beginning 0)))) + (when (and (stringp domain) (> (length domain) 0)) + ;; set "negotiate domain supplied" bit + (aset request-flags 1 (logior (aref request-flags 1) ?\x10))) ;; set fields offsets within the request struct (setq lu (length user)) (setq ld (length domain)) @@ -178,6 +181,10 @@ by PASSWORD-HASHES. PASSWORD-HASHES should be a return value of ;;(ident (substring rchallenge 0 8)) ;ident, 8 bytes ;;(msgType (substring rchallenge 8 12)) ;msgType, 4 bytes (uDomain (substring rchallenge 12 20)) ;uDomain, 8 bytes + ;; match default setting in `ntlm-build-auth-request' + (request-flags (concat (make-string 1 7) (make-string 1 130) + (make-string 1 8) (make-string 1 0))) + ;0x07 0x82 0x08 0x00 (flags (substring rchallenge 20 24)) ;flags, 4 bytes (challengeData (substring rchallenge 24 32)) ;challengeData, 8 bytes uDomain-len uDomain-offs @@ -185,19 +192,28 @@ by PASSWORD-HASHES. PASSWORD-HASHES should be a return value of lmRespData ;lmRespData, 24 bytes ntRespData ;ntRespData, variable length domain ;ascii domain string - lu ld ln off-lm off-nt off-d off-u off-w off-s) + workstation ;ascii workstation string + ll ln lu ld lw off-lm off-nt off-u off-d off-w) ;; extract domain string from challenge string (setq uDomain-len (md4-unpack-int16 (substring uDomain 0 2))) (setq uDomain-offs (md4-unpack-int32 (substring uDomain 4 8))) - (setq domain - (ntlm-unicode2ascii (substring challenge - (cdr uDomain-offs) - (+ (cdr uDomain-offs) uDomain-len)) - (/ uDomain-len 2))) + ;; match Mozilla behavior, which is to send an empty domain string + (setq domain "") + ;; match Mozilla behavior, which is to send "WORKSTATION" + (setq workstation "WORKSTATION") ;; overwrite domain in case user is given in @ format (when (string-match "@" user) (setq domain (substring user (1+ (match-beginning 0)))) (setq user (substring user 0 (match-beginning 0)))) + (when (and (stringp domain) (> (length domain) 0)) + ;; set "negotiate domain supplied" bit, since presumably domain + ;; was also set in `ntlm-build-auth-request' + (aset request-flags 1 (logior (aref request-flags 1) ?\x10))) + ;; match Mozilla behavior, which is to send the logical and of the + ;; type 1 and type 2 flags + (dotimes (index 4) + (aset flags index (logand (aref flags index) + (aref request-flags index)))) (unless (and (integerp ntlm-compatibility-level) (>= ntlm-compatibility-level 0) @@ -228,17 +244,15 @@ by PASSWORD-HASHES. PASSWORD-HASHES should be a return value of (ntlm-compute-timestamp) ; timestamp nonce ; client nonce (make-string 4 0) ; unknown - targetInfo ; target info - (make-string 4 0))) ; unknown + targetInfo)) ; target info ;; for reference: LMv2 interim calculation - ;; (lm-interim (hmac-md5 (concat challengeData nonce) - ;; ntlmv2-hash)) + (lm-interim (hmac-md5 (concat challengeData nonce) + ntlmv2-hash)) (nt-interim (hmac-md5 (concat challengeData blob) ntlmv2-hash))) ;; for reference: LMv2 field, but match other clients that ;; send all zeros - ;; (setq lmRespData (concat lm-interim nonce)) - (setq lmRespData (make-string 24 0)) + (setq lmRespData (concat lm-interim nonce)) (setq ntRespData (concat nt-interim blob)))) ;; compatibility level is 2, 1 or 0 ;; level 2 should be treated specially but it's not clear how, @@ -263,23 +277,24 @@ by PASSWORD-HASHES. PASSWORD-HASHES should be a return value of (ntlm-smb-owf-encrypt (cadr password-hashes) challengeData)))) ;; get offsets to fields to pack the response struct in a string + (setq ll (length lmRespData)) + (setq ln (length ntRespData)) (setq lu (length user)) (setq ld (length domain)) - (setq ln (length ntRespData)) - (setq off-lm 64) ;offset to string 'lmResponse - (setq off-nt (+ 64 24)) ;offset to string 'ntResponse - (setq off-d (+ 64 24 ln)) ;offset to string 'uDomain - (setq off-u (+ 64 24 ln (* 2 ld))) ;offset to string 'uUser - (setq off-w (+ 64 24 ln (* 2 (+ ld lu)))) ;offset to string 'uWks - (setq off-s (+ 64 24 ln (* 2 (+ ld lu lu)))) ;offset to string 'sessionKey + (setq lw (length workstation)) + (setq off-u 64) ;offset to string 'uUser + (setq off-d (+ off-u (* 2 lu))) ;offset to string 'uDomain + (setq off-w (+ off-d (* 2 ld))) ;offset to string 'uWks + (setq off-lm (+ off-w (* 2 lw))) ;offset to string 'lmResponse + (setq off-nt (+ off-lm ll)) ;offset to string 'ntResponse ;; pack the response struct in a string (concat "NTLMSSP\0" ;response ident field, 8 bytes (md4-pack-int32 '(0 . 3)) ;response msgType field, 4 bytes ;; lmResponse field, 8 bytes ;;AddBytes(response,lmResponse,lmRespData,24); - (md4-pack-int16 24) ;len field - (md4-pack-int16 24) ;maxlen field + (md4-pack-int16 ll) ;len field + (md4-pack-int16 ll) ;maxlen field (md4-pack-int32 (cons 0 off-lm)) ;field offset ;; ntResponse field, 8 bytes @@ -293,7 +308,9 @@ by PASSWORD-HASHES. PASSWORD-HASHES should be a return value of ;;AddBytes(response, uDomain, udomain, 2*ld); (md4-pack-int16 (* 2 ld)) ;len field (md4-pack-int16 (* 2 ld)) ;maxlen field - (md4-pack-int32 (cons 0 off-d)) ;field offset + ;; match Mozilla behavior, which is to hard-code the + ;; domain offset to 64 + (md4-pack-int32 (cons 0 64)) ;field offset ;; uUser field, 8 bytes ;;AddUnicodeString(response,uUser,u); @@ -304,28 +321,25 @@ by PASSWORD-HASHES. PASSWORD-HASHES should be a return value of ;; uWks field, 8 bytes ;;AddUnicodeString(response,uWks,u); - (md4-pack-int16 (* 2 lu)) ;len field - (md4-pack-int16 (* 2 lu)) ;maxlen field + (md4-pack-int16 (* 2 lw)) ;len field + (md4-pack-int16 (* 2 lw)) ;maxlen field (md4-pack-int32 (cons 0 off-w)) ;field offset - ;; sessionKey field, 8 bytes + ;; sessionKey field, blank, 8 bytes ;;AddString(response,sessionKey,NULL); (md4-pack-int16 0) ;len field (md4-pack-int16 0) ;maxlen field - (md4-pack-int32 (cons 0 (- off-s off-lm))) ;field offset + (md4-pack-int32 (cons 0 0)) ;field offset ;; flags field, 4 bytes flags ; ;; buffer field + (ntlm-ascii2unicode user lu) ;Unicode user, 2*lu bytes + (ntlm-ascii2unicode domain ld) ;Unicode domain, 2*ld bytes + (ntlm-ascii2unicode workstation lw) ;Unicode workstation, 2*lw bytes lmRespData ;lmResponse, 24 bytes - ntRespData ;ntResponse, 24 bytes - (ntlm-ascii2unicode domain ;Unicode domain string, 2*ld bytes - (length domain)) ; - (ntlm-ascii2unicode user ;Unicode user string, 2*lu bytes - (length user)) ; - (ntlm-ascii2unicode user ;Unicode user string, 2*lu bytes - (length user)) ; + ntRespData ;ntResponse, ln bytes ))) (defun ntlm-get-password-hashes (password) commit 9adfb021df482c6aa94a043f07acf1e8eb695bf2 Author: Martin Rudalics Date: Wed Oct 5 16:12:19 2016 +0200 Document return value of `display-buffer-in-side-window' * doc/lispref/windows.texi (Displaying Buffers in Side Windows): * lisp/window.el (display-buffer-in-side-window): Describe return value of `display-buffer-in-side-window'. diff --git a/doc/lispref/windows.texi b/doc/lispref/windows.texi index 1c940dc..2d340e3 100644 --- a/doc/lispref/windows.texi +++ b/doc/lispref/windows.texi @@ -3117,7 +3117,10 @@ specified buffer. @defun display-buffer-in-side-window buffer alist This function displays @var{buffer} in a side window of the selected -frame. @var{alist} is an association list of symbols and values as for +frame. It returns the window used for displaying @var{buffer}, +@code{nil} if no such window can be found or created. + +@var{alist} is an association list of symbols and values as for @code{display-buffer}. The following symbols in @var{alist} are special for this function: diff --git a/lisp/window.el b/lisp/window.el index 4511267..dea0b25 100644 --- a/lisp/window.el +++ b/lisp/window.el @@ -979,8 +979,8 @@ be reused and have its `window-slot' parameter value accordingly modified. Unless `display-buffer-mark-dedicated' is non-nil, softly -dedicate the side window used to BUFFER. Return nil if no -suitable window is found. +dedicate the side window used to BUFFER. Return the window used +for displaying BUFFER, nil if no suitable window can be found. This function installs the `window-side' and `window-slot' parameters and makes them persistent. It neither modifies ALIST commit 0709b900f583ae2e51c0a0de507b8900d6923c1b Author: Eli Zaretskii Date: Wed Oct 5 16:01:19 2016 +0300 Improve wording in side windows documentation * doc/lispref/windows.texi (Displaying Buffers in Side Windows) (Side Window Options and Functions) (Frame Layouts with Side Windows): Minor wording improvements. diff --git a/doc/lispref/windows.texi b/doc/lispref/windows.texi index 3ab8c95..1c940dc 100644 --- a/doc/lispref/windows.texi +++ b/doc/lispref/windows.texi @@ -3160,7 +3160,7 @@ its frame (@pxref{Deleting Windows}). @code{switch-to-prev-buffer} and @code{switch-to-next-buffer} (@pxref{Window History}). In particular, these commands will refrain from showing, in a side window, buffers that have not been displayed in -that window before. And, they will refrain from having a normal, +that window before. They will also refrain from having a normal, non-side window show a buffer that has been already displayed in a side window. A notable exception to the latter rule occurs when an application, after displaying a buffer, resets that buffer's local @@ -3174,24 +3174,22 @@ The following options provide additional control over the placement of side windows. @defopt window-sides-vertical -If non-@code{nil}, this means that the side windows on the left and -right of a frame occupy the frame's full height. Otherwise, the side -windows on the top and bottom of the frame occupy the frame's full -width. +If non-@code{nil}, the side windows on the left and right of a frame +occupy the frame's full height. Otherwise, the side windows on the top +and bottom of the frame occupy the frame's full width. @end defopt @defopt window-sides-slots This option specifies the maximum number of side windows on each side of a frame. The value is a list of four elements specifying the number of side window slots on (in this order) the left, top, right and bottom of -each frame. If an element is a number, this means to display at most -that many windows on the corresponding side. If an element is -@code{nil}, this means there's no bound on the number of slots on that -side. +each frame. If an element is a number, it means to display at most that +many windows on the corresponding side. If an element is @code{nil}, it +means there's no bound on the number of slots on that side. If any of the specified values is zero, no window can be created on the corresponding side. @code{display-buffer-in-side-window} will not -signal an error in that case but return @code{nil}. If a specified +signal an error in that case, but will return @code{nil}. If a specified value just forbids the creation of an additional side window, the most suitable window on that side is reused and may have its @code{window-slot} parameter changed accordingly. @@ -3206,11 +3204,12 @@ side windows on the top and bottom of a frame are drawn from right to left with increasing slot values. When this is @code{bidi}, the drawing order is reversed if and only if -the value of @code{bidi-paragraph-direction} is @code{right-to-left} in -the buffer displayed in the window most recently selected within the -main window area of this frame. Sometimes that window may be hard to -find, so heuristics are used to avoid that the drawing order changes -inadvertently when another window gets selected. +the value of @code{bidi-paragraph-direction} (@pxref{Bidirectional +Display}) is @code{right-to-left} in the buffer displayed in the window +most recently selected within the main window area of this frame. +Sometimes that window may be hard to find, so heuristics are used to +avoid that the drawing order changes inadvertently when another window +gets selected. The layout of side windows on the left or right of a frame is not affected by the value of this variable. @@ -3244,12 +3243,12 @@ state of @var{frame}'s root window in the @var{frame}'s @code{window-state} frame parameter and deletes all side windows on @var{frame} afterwards. -If @var{frame} has no side window but a @code{window-state} parameter, -it uses that parameter's value to restore the side windows on -@var{frame} leaving @var{frame}'s main window alone. +If @var{frame} has no side windows, but does have a @code{window-state} +parameter, this command uses that parameter's value to restore the side +windows on @var{frame} leaving @var{frame}'s main window alone. -An error is signaled if @var{frame} has no side window and no saved -state is found. +An error is signaled if @var{frame} has no side windows and no saved +state is found for it. @end deffn @@ -3293,7 +3292,7 @@ or buffers, help information, search or grep results or shell output. The following example illustrates how window parameters (@pxref{Window Parameters}) can be used with @code{display-buffer-in-side-window} (@pxref{Displaying Buffers in Side Windows}) to set up code for -producing the frame sketched above. +producing the frame layout sketched above. @example @group @@ -3329,19 +3328,18 @@ in a window on the bottom right side of the frame. Note that the option @code{fit-window-to-buffer-horizontally} must have a non-@code{nil} value in order to allow horizontal adjustment of -windows. We also added entries that ask for preserving the height of +windows. Entries are also added that ask for preserving the height of side windows at the top and bottom of the frame and the width of side windows at the left or right of the frame. To assure that side windows -retain their respective sizes when maximizing the associated frame, we -have also set the variable @code{window-resize-pixelwise}. +retain their respective sizes when maximizing the frame, the variable +@code{window-resize-pixelwise} is set to a non-@code{nil} value. @xref{Resizing Windows}. - The last form also makes sure that none of the side windows it -creates are accessible via @kbd{C-x o} by installing a -@code{no-other-window} parameter for each of these windows. In addition -it also makes sure that side windows are not deleted via @kbd{C-x 1} by -installing a @code{no-delete-other-window} parameter on each of these -windows. + The last form also makes sure that none of the created side windows +are accessible via @kbd{C-x o} by installing the @code{no-other-window} +parameter for each of these windows. In addition, it makes sure that +side windows are not deleted via @kbd{C-x 1} by installing the +@code{no-delete-other-window} parameter for each of these windows. Since @code{dired} buffers have no fixed names, we use a special function @code{dired-default-directory-on-left} in order to display a @@ -3361,10 +3359,10 @@ lean directory buffer on the left side of the frame. @end group @end example -Evaluating the preceding forms and typing, in any order, @kbd{M-x -list-buffers}, @kbd{C-h f}, @kbd{M-x shell}, @kbd{M-x list-tags} and -@kbd{M-x dired-default-directory-on-left} should now reproduce the frame -layout sketched above. +Evaluating the preceding forms and typing, in any order, @w{@kbd{M-x +list-buffers}}, @kbd{C-h f}, @kbd{M-x shell}, @w{@kbd{M-x list-tags}}, +and @kbd{M-x dired-default-directory-on-left} should now reproduce the +frame layout sketched above. @node Window Point