
(provide (quote motion))

(require (quote zone))

(require (quote mouse))

(defvar horizontal-drag-inc 5 "\
Number of columns to scroll when the pointer is to the left or right of the window")

(defvar vertical-drag-inc 2 "\
Number of lines to scroll when the pointer is above or below the edge of the window")

(defvar mouse::downp nil "\
State variable for mouse dragging internals")

(defvar mouse::last-point -1 "\
Last location of a motion event")

(setq epoch::zones-modify-buffer nil)

(defvar motion::style nil "\
style used by drag zones")

(defvar drag-zone nil "\
Epoch zone to be used for hilighting selected text region.")

(setq-default drag-zone nil)

(setq-default mouse-down-marker nil)

(epoch-add-setup-hook (quote motion::init))

(defun motion::init nil (byte-code "?	   \" \" \"\"!\")B" [motion::style t s nil epoch::screen-properties make-style set-style-foreground foreground set-style-background background set-style-underline push-event motion motion::handler mapcar (lambda (s) (byte-code "	\"" [t s epoch::set-motion-hints] 3)) screen-list (motion-hints t)] 12))

(defun set-mouse-marker (&optional location) (byte-code "?	  	 `\"" [mouse-down-marker location make-marker set-marker] 4))

(defun end-mouse-drag (arg) (byte-code "ǉ	? Y ! !# !?- ˉ?6 ˉ!X `XO \"d^bX \"d^b*" [mouse::last-point mouse::downp nil drag-zone s e t -1 mouse::copy-zone zone-start zone-end 1 zonep push-mark] 8))

(defun start-mouse-drag (arg) (byte-code "?	 ) ŉ!  `) ! " [arg nil mouse::downp mouse::last-point drag-zone start mouse::set-point abort-isearch set-mouse-marker delete-zone redisplay-screen] 6))

(defun extend-mouse-drag (arg) (byte-code "ʉ
 
!
 
!@d^	?! ͉?* ͉
?3 ?I `#
\"  	X] 
#! Yq 
	#	! X 
	#	! 
#! `	+" [mouse::downp m1 drag-zone m2 spot arg mouse-down-marker motion::style t mouse::last-point extend zone-start zone-end 0 add-zone set-zone-transient set-mouse-marker move-zone epoch::redisplay-screen] 16))

(defun motion::handler (type value scr) (byte-code "?  ! 	  " [mouse-down-marker mouse::downp set-mouse-marker boundp mouse-sweep-update] 4))

(defun mouse-sweep-update nil (byte-code " 	!@\"\"#\"#?V `#\"n  n \"\"\"@Z\"ZX X X X?䏈^]^]\\\\\"@
\"? ʂ 
V 
! !
	# 
W ." [drag-m1 drag-m2 pnt pos x y w out-of-bounds t epoch::event-handler-abort nil w-edges left top right bottom drag-zone mouse-down-marker motion::style mouse-any-mask mouse::last-point selected-window window-pixedges elt 1 - 2 4 add-zone set-zone-transient query-pointer /= 0 logand errno (byte-code "W	 	!
V 	!" [y vertical-drag-inc bottom 0 scroll-down scroll-up] 3) ((error (byte-code "" [nil] 1))) epoch::coords-to-point marker-position move-zone redisplay-screen] 23))

(defvar mouse::line-zone nil "\
Zone for selected line")

(defun mouse-select-line-start (arg) (byte-code "!` ` 
`#))\"" [arg mouse::last-point bol mouse::line-zone motion::style mouse::set-point nil beginning-of-line end-of-line add-zone push-event motion mouse-select-line-update] 7))

(defun mouse-select-line-end (arg) (byte-code "É	?  	!!" [mouse::last-point mouse::line-zone nil -1 delete-zone pop-event motion] 3))

(defun mouse-select-line-update (type value scr) (byte-code " !\"\"#	
<  < 	\"\"\" 	\"ZXS 	X?	!!Z

Vv mv iU 
Z
)ޏ	^]! ` `\"? Ƃ 
`# `& .	" [y pos bol out-of-bounds t epoch::event-handler-abort nil w-edges top bottom max-vscroll mouse-any-mask vertical-drag-inc mouse::last-point mouse::line-zone window-pixedges selected-window elt 1 - 4 query-pointer /= 0 logand 2 move-to-window-line forward-line errno (byte-code "W	 	!
V 	^!" [y vertical-drag-inc bottom max-vscroll 0 scroll-down scroll-up] 4) ((error (byte-code "" [nil] 1))) beginning-of-line end-of-line move-zone epoch::redisplay-screen] 21))

(defun mouse::buffer-line (marg) "\
Show the line number and buffer of the mouse EVENT" (byte-code "!qd@^e	\"
!!#!*)" [marg end n cadr count-lines message format "Line %d in %s" buffer-name] 9))

(defun abort-isearch nil "\
Abort any isearch in progress." (byte-code "" [err (byte-code "\"" [t throw search-done] 3) ((no-catch (byte-code "" [nil] 1)))] 3))

(global-set-mouse mouse-left mouse-down (quote start-mouse-drag))

(global-set-mouse mouse-left mouse-shift (quote mouse::buffer-line))

(global-set-mouse mouse-left mouse-up (quote end-mouse-drag))

(global-set-mouse mouse-right mouse-down (quote extend-mouse-drag))

(global-set-mouse mouse-right mouse-up (quote end-mouse-drag))

(global-set-mouse mouse-middle mouse-down (quote mouse::paste-cut-buffer))

(defun mouse-set-spot (arg) "\
Set point at mouse.  With double-click, set mark there as well.
Blinks matching paren if sitting after one.  Intended to be bound
to a window down button." (byte-code "!p`!
`\" 	p\"- U%  `=?*  0 ʉh!=;  * " [arg buf p mouse::clicks start-mouse-drag mouse::set-point equal 1 mark push-mark 0 char-syntax 41 blink-matching-open abort-isearch] 10))
