2 small fixes; release-point was misnamed in the let and indentation was wrong in the latter part of the code.Use this version. -- Bob(setq mouse-drag-and-drop-region 'shift)(defun mouse-drag-and-drop-region (event)"Move text in the region to point where mouse is dragged to.The transportation of text is also referred as `drag and drop'.When text is dragged over to a different buffer, or if amodifier key was pressed when dropping, and the value of thevariable `mouse-drag-and-drop-region' is that modifier, the textis copied instead of being cut."(interactive "e")(require 'tooltip)(let ((start (region-beginning))(end (region-end))(point (point))(buffer (current-buffer))(source-window (selected-window))event-handlerrelease-pointvalue-selection)(track-mouse;; When event was click instead of drag, skip loop(while (or (mouse-movement-p (setq event (read-event)))(setq event-handler (and (consp event)(intern-soft (concat "handle-"(symbol-name(event-basic-type event)))))))(if (fboundp event-handler)(progn (funcall event-handler event) (setq event-handler nil))(setq event-handler nil))(unless value-selection ; initialization(delete-overlay mouse-secondary-overlay)(setq value-selection (buffer-substring start end))(move-overlay mouse-secondary-overlay start end)) ; (deactivate-mark)(ignore-errors (deactivate-mark) ; deactivate any existing region in other window(mouse-set-point event)(tooltip-show value-selection)))(tooltip-hide));; Do not modify buffer under mouse when "event was click",;; "drag negligible", or;; "drag to read-only".(if (or (equal (mouse-posn-property (event-end event) 'face) 'region) ; "event was click"(and (setq release-point (posn-point (event-end event)))(member 'secondary-selection ; "drag negligible"(mapcar (lambda (xxx) (overlay-get xxx 'face))(overlays-at release-point))))buffer-read-only);; Do not modify buffer under mouse.(cond;; "drag negligible" or "drag to read-only", restore region.(value-selection(select-window source-window) ; In case miss drag to other window(goto-char point)(setq deactivate-mark nil)(activate-mark));; "event was click"(t(deactivate-mark)(mouse-set-point event)));; Modify buffer under mouse by inserting text.(push-mark)(insert value-selection)(when (not (equal (mark) (point))) ; on successful insert(setq deactivate-mark nil)(activate-mark)) ; have region on destination(let ((dest-window (selected-window))) ; when beyond buffer;; Take care of initial region on source.(if (equal (current-buffer) buffer) ; when same buffer(let (deactivate-mark) ; remove text(unless (member mouse-drag-and-drop-region (event-modifiers event))(kill-region (overlay-start mouse-secondary-overlay)(overlay-end mouse-secondary-overlay))))(select-window source-window)(goto-char point) ; restore point in source-window(activate-mark)) ; restore region;; Ensure change focus to any new frame; typically edits;; would continue in its selected window where the text was;; dropped.(select-frame (window-frame dest-window))(select-window dest-window)))(delete-overlay mouse-secondary-overlay)))