Fix restoring data in visual-line-mode

* lisp/simple.el (visual-line-mode): Only save values once, even
if the mode is switched on twice (bug#43730).  This makes both
previously set local values for variables like truncate-lines, as
well as default values for truncate-lines restorable.

* lisp/emulation/cua-base.el (cua-mode): Ditto.
This commit is contained in:
Lars Ingebrigtsen 2020-10-01 18:49:45 +02:00
parent af72f6d510
commit 2017bf0dd1
2 changed files with 16 additions and 13 deletions

View file

@ -1379,9 +1379,10 @@ the prefix fallback behavior."
(cond
(cua-mode
(setq cua--saved-state
(list
(and (boundp 'delete-selection-mode) delete-selection-mode)))
(unless cua--saved-state
(setq cua--saved-state
(list
(and (boundp 'delete-selection-mode) delete-selection-mode))))
(if cua-delete-selection
(delete-selection-mode 1)
(if (and (boundp 'delete-selection-mode) delete-selection-mode)

View file

@ -7275,15 +7275,16 @@ Mode' for details."
:lighter " Wrap"
(if visual-line-mode
(progn
(set (make-local-variable 'visual-line--saved-state) nil)
;; Save the local values of some variables, to be restored if
;; visual-line-mode is turned off.
(dolist (var '(line-move-visual truncate-lines
truncate-partial-width-windows
word-wrap fringe-indicator-alist))
(if (local-variable-p var)
(push (cons var (symbol-value var))
visual-line--saved-state)))
(unless visual-line--saved-state
(setq-local visual-line--saved-state (list nil))
;; Save the local values of some variables, to be restored if
;; visual-line-mode is turned off.
(dolist (var '(line-move-visual truncate-lines
truncate-partial-width-windows
word-wrap fringe-indicator-alist))
(if (local-variable-p var)
(push (cons var (symbol-value var))
visual-line--saved-state))))
(set (make-local-variable 'line-move-visual) t)
(set (make-local-variable 'truncate-partial-width-windows) nil)
(setq truncate-lines nil
@ -7297,7 +7298,8 @@ Mode' for details."
(kill-local-variable 'truncate-partial-width-windows)
(kill-local-variable 'fringe-indicator-alist)
(dolist (saved visual-line--saved-state)
(set (make-local-variable (car saved)) (cdr saved)))
(when (car saved)
(set (make-local-variable (car saved)) (cdr saved))))
(kill-local-variable 'visual-line--saved-state)))
(defun turn-on-visual-line-mode ()