[Date Prev][Date Next][Thread Prev][][Date Index][Thread Index]

Re: `insert' deactivates active region

> (let ((buffer (get-buffer-create "*testing*")))
>   (pop-to-buffer buffer)
>   (erase-buffer)
>   (insert "Hello World\n")
>   (goto-char (point-min))
>   (set (make-local-variable 'transient-mark-mode) t)
>   (add-hook 'post-command-hook
> 	    (lambda nil
> 	      (with-temp-buffer
> 		(insert "foo")
> 		))
> 	    nil t))

The way Emacs detects when to deactivate the mark is by making all
buffer-modifying functions set the deactivate-mark variable.  This variable
is not buffer-local so a modification in one buffer can (incorrectly)
deactivate the mark in another, as in your example.

Until this is fixed, the typical workaround is to wrap your buffer
modification in (let (deactivate-mark) ...).