       (mouse-set-region click))
   (acme-mouse-1 click))
 
+(global-set-key [(double-mouse-1)] 'acme-double-mouse-1)
+(defun acme-double-mouse-1 (click)
+  (interactive "e")
+  (setq acme-mouse-state 'none)
+  (setq deactivate-mark nil)
+  ;; if we were just selecting, and not chording, pass to the regular click handler
+  (if (eq acme-last-command 'none)
+      (progn (mouse-set-point click)
+             (acme-select-region)))
+  (setq transient-mark-mode (cons 'only t))
+  (setq acme-last-command 'none))
+
+(defun acme-select-region ()
+  (let ((range (mouse-start-end (mark) (point) mouse-selection-click-count)))
+    (setq acme-start (car range))
+    (setq acme-end (nth 1 range))
+    (set-mark acme-start)
+    (goto-char acme-end)))
+
 (defun acme-down-mouse-2 (click)
   (interactive "e")
   (if (eq acme-mouse-state 'left)

        (setq acme-mouse-state 'left-right)
        (case acme-last-command
          ('none (mouse-set-point click)
                 (let ((range (mouse-start-end (mark) (point) mouse-selection-click-count)))
                   (setq acme-start (car range))
                   (setq acme-end (nth 1 range))
                   (set-mark acme-start)
                   (goto-char acme-end)
                   (delete-region (mark) (point))
                   (yank arg)))
          ('cut (undo)
                (set-mark acme-start)
                (goto-char acme-end)))

             (if (eq acme-last-command 'paste)
                 (undo)
               (mouse-set-point click)
               (acme-select-region)
               (kill-region (mark) (point)))
             (setq acme-last-command 'cut))))

(defun acme-mouse-2 ()
