I think we should add to the documentation that buffer local values for `switch-to-buffer-obey-display-actions' and `switch-to-buffer-preserve-window-point' won't work as user would expect. The problem with their buffer local values is that they are used for buffer logic *before* buffer is set as current, see `switch-to-buffer'. We should either use `(buffer-local-value NAME buffer)' to get their values in `switch-to-buffer', or add to the documentation that they should not have buffer local values. Here is code snippet to trigger unexpected behaviour: ;; Switch to scratch and eval (progn (setq switch-to-buffer-preserve-window-point t) (with-current-buffer (get-buffer-create "pwp") (setq-local switch-to-buffer-preserve-window-point nil) (insert "asnoteh asoensnaot heusnatoeh usanotehu aeosntuhaoe") (point)) (switch-to-buffer "pwp") (switch-to-other-buffer 1) (with-current-buffer "pwp" (goto-char 10) (point)) (switch-to-buffer "pwp") ;; Expecting point to be at 10 position, but it remains at the end ;; of the line ) What do you think? Thanks -- lg