anchor.diff:  
   (defmethod dispatch-event :around ((pane text-selection-mixin)
                                      (event pointer-button-release-event))
  -  (if (shift-rl-click-event-p event)
  -      (eos/shift-release pane event)
  -      (call-next-method)))
  +  (with-slots (dragging-p) pane
  +    (if (and (shift-rl-click-event-p event)
  +             dragging-p)
  +        (eos/shift-release pane event)
  +        (call-next-method))))
   
   (defmethod dispatch-event :around ((pane text-selection-mixin)
                                      (event pointer-motion-event))
  -  (with-slots (point-1-x dragging-p) pane
  -    (if (eql (event-modifier-state event) +shift-key+)
  -        (when dragging-p
  -          (eos/shift-drag pane event))
  +  (with-slots (dragging-p) pane
  +    (if (and (eql (event-modifier-state event) +shift-key+)
  +             dragging-p)
  +        (eos/shift-drag pane event)
           (call-next-method))))
  -
   
   (defun pane-clear-markings (pane &optional time)
     (declare (ignore time))
  
positive.code:       (repaint-markings pane old-markings (slot-value pane 'markings)))))
  
  (defun shift-rl-click-event-p (event)
    (let ((b (pointer-event-button event)))
      (and (eql (event-modifier-state event) +shift-key+)
           (or (eql b +pointer-left-button+)
               (eql b +pointer-right-button+)))))
  
  (defmethod dispatch-event :around ((pane text-selection-mixin)
                                     (event pointer-button-press-event))
  
negative.code:                             :initial-value +nowhere+)))
      (handle-repaint pane (region-exclusive-or old-region new-region))))
  
  (defun map-over-text (record function)
    (cond ((typep record 'standard-text-displayed-output-record)
           (with-slots (strings baseline max-height start-y wrapped x1 y1) record
             (loop for substring in strings do
  