From: Lars Ingebrigtsen Date: Thu, 1 Oct 2020 16:49:45 +0000 (+0200) Subject: Fix restoring data in visual-line-mode X-Git-Tag: emacs-28.0.90~5783 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=2017bf0dd1ddd9b18cb95c42e3ef4098bff69fa9;p=emacs.git 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. --- diff --git a/lisp/emulation/cua-base.el b/lisp/emulation/cua-base.el index c4dcb76446e..926305e6077 100644 --- a/lisp/emulation/cua-base.el +++ b/lisp/emulation/cua-base.el @@ -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) diff --git a/lisp/simple.el b/lisp/simple.el index fef22c2fa6f..05a74d90d62 100644 --- a/lisp/simple.el +++ b/lisp/simple.el @@ -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 ()