Subject: bug#14225: [PATCH] Winner mode fails to run mark activation and deactivation hooks

From: Kelly Dean <[email-masked]>
Date: Wed, 17 Apr 2013 20:17:33 -0700 (PDT)

Using Emacs 24.3
emacs -Q
(winner-mode 1)
(add-hook 'deactivate-mark-hook (lambda () (setq cursor-type t)))
(add-hook 'activate-mark-hook (lambda () (setq cursor-type 'bar)))
C-x 2
C-c left

Notice that the cursor type is now a bar, not a block. It should be a block.
The attached winnerbug.patch fixes it.

BTW, by default in Emacs, when the region is active but empty, there's no visual indication of this status. Neither is there indication of the active region if point is one less than mark and blink-cursor-mode is off. Also, if point is greater than mark, the active region is highlighted, but the block cursor does an inverse-video highlight of the character following the region, which (speaking from experience) an Emacs newbie finds distracting, since it seems to indicate that that character is also part of the region. Setting the cursor type to bar when the region is active solves all those problems, and I recommend it as the default for Emacs.
--- emacs-24.3/lisp/winner.el
+++ emacs-24.3/lisp/winner.el
@@ -309,7 +309,9 @@
                  for entry = (cadr (assq buf winner-point-alist))
                  do (progn (set-buffer buf)
                            (set-mark (car entry))
-                           (setf (winner-active-region) (cdr entry)))))
+                           (setf (winner-active-region) (cdr entry))
+			   (if (cdr entry) (run-hooks 'activate-mark-hook)
+			     (run-hooks 'deactivate-mark-hook)))))
       ;; Delete windows, whose buffers are dead or boring.
       ;; Return t if this is still a possible configuration.
       (or (null xwins)