
(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 `XƒO ÍÆ\"ˆd^b‚X ÍÆ\"ˆ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ƒ] Ñ
#‰ˆÐ!‚‘ Yƒq Ñ
	#‰ˆÐ	!‚‘ 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‰ˆ×X…S 	X?‰ˆŠÚ	!ˆÛ!Z‰
ˆ
×V…v m…v ×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 "ŠÃ!qˆd@^Ä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))
