all messages for Emacs-related lists mirrored at yhetil.org
 help / color / mirror / code / Atom feed
From: benrwhite@gmail.com (Benjamin R. White)
To: emacs-devel@gnu.org
Subject: Contributing & lisp/image-mode.el patch
Date: Sun, 10 Oct 2010 21:45:08 +0100	[thread overview]
Message-ID: <87k4lphj57.fsf@asuka.nibjib.dyndns.info> (raw)

[-- Attachment #1: Type: text/plain, Size: 1055 bytes --]

Hello,

I've been an Emacs user for a reasonable portion of my life and recently
decided I'd like to start contributing to GNU/Emacs development. With
the aim of starting off by scratching itches, I've thought before that
in image mode there should be a way of navigating around an image within
an *image-mode* buffer using the mouse. To this effect I've made the
following (albeit, trivial) patch that allows you to use the mouse-2
button to drag around an image that is larger than the window displaying
it.

I'm a relative newcomer to Lisp so you may judge my code to not be
worthwhile, however I'm always willing to receive constructive criticism
where it is due, and suggestions on how I can improve my coding style.

I read within etc/CONTRIBUTE that I needed to contact this list to
obtain forms so that the GNU/Emacs project may benefit by my
contributions, so to this effect I've been subscribed to the digest
version of the list for about a week. It's a bit scary for a newbie to
see all the arguments that go on around here.

Cheers,
Benjamin


[-- Attachment #2: ChangeLog entry --]
[-- Type: text/plain, Size: 131 bytes --]

2010-10-10  Benjamin R. White  <benrwhite@gmail.com>

	* image-mode.el: Function and mapping for image-dragging
	within a window.


[-- Attachment #3: image-mode-drag patch --]
[-- Type: text/plain, Size: 8210 bytes --]

# Bazaar merge directive format 2 (Bazaar 0.90)
# revision_id: benrwhite@gmail.com-20101010140926-r6g5g6d7o9s85cgo
# target_branch: http://bzr.savannah.gnu.org/r/emacs/trunk
# testament_sha1: be306a8c74d88c7c60c045fb1442688c981f4cdc
# timestamp: 2010-10-10 21:06:34 +0100
# base_revision_id: dann@ics.uci.edu-20101010134422-ib3bgfpbqus51h0e
# 
# Begin patch
=== modified file 'lisp/image-mode.el'
--- lisp/image-mode.el	2010-09-24 03:06:33 +0000
+++ lisp/image-mode.el	2010-10-07 19:31:46 +0000
@@ -290,6 +290,48 @@
     (set-frame-width  (selected-frame) (car size))
     (set-frame-height (selected-frame) (cdr size))))
 
+(defun image-mouse-scroll-position (start-event)
+  "When bound to a down-mouse-X input START-EVENT, will smoothly
+drag the viewpoint on the image buffer that the window displays."
+  (interactive "e")
+  (let* ((echo-keystrokes 0)
+	 (start-posn (event-start start-event))
+	 (x-offset (window-hscroll (car start-posn)))
+	 (y-offset (window-vscroll (car start-posn) t))
+	 (imframe-cwidth (frame-char-width 
+			  (window-frame (car start-posn))))
+	 (startpos (nth 8 start-posn))
+	 event now-posn nowpos x-diff y-diff )
+    (select-window (posn-window start-posn))
+    (track-mouse 
+      (while (progn 
+	       ;; as used in mouse.el:mouse-drag-track
+	       (setq event (read-event))
+	       (or (mouse-movement-p event)
+		   (memq (car-safe event) '(switch-frame select-window))))
+	(setq now-posn (event-start event))
+	;; check if drag is within image on frame
+	(if (and (eq (nth 7 start-posn) (nth 7 now-posn))
+		 (eq (nth 1 start-posn) (nth 1 now-posn)))
+	    (progn 
+	      (setq nowpos (nth 8 now-posn))
+	      (setq x-diff (- (car startpos) (car nowpos)))
+	      (setq y-diff (- (cdr startpos) (cdr nowpos)))
+
+	      (set-window-vscroll (nth 0 start-posn) 
+				  (+ y-offset y-diff) t)
+	      (if (< (/ imframe-cwidth 2)
+		     (abs x-diff))
+		  (set-window-hscroll 
+		   (car start-posn) 
+		   (+ x-offset 
+		      (/ (if (> x-diff 0) 
+			     (+ x-diff (/ imframe-cwidth 2))
+			   (- x-diff (/ imframe-cwidth 2))) 
+			 imframe-cwidth))))
+	      (setq x-offset (window-hscroll (car now-posn)))
+	      (setq y-offset (window-vscroll (car now-posn) t))))))))
+
 ;;; Image Mode setup
 
 (defvar image-type nil
@@ -321,6 +363,7 @@
     (define-key map [remap move-end-of-line] 'image-eol)
     (define-key map [remap beginning-of-buffer] 'image-bob)
     (define-key map [remap end-of-buffer] 'image-eob)
+    (define-key map [down-mouse-2] 'image-mouse-scroll-position)
     map)
   "Major mode keymap for viewing images in Image mode.")
 

# Begin bundle
IyBCYXphYXIgcmV2aXNpb24gYnVuZGxlIHY0CiMKQlpoOTFBWSZTWV+IaxoADvPfgHwwUP///3sn
ncq////wYBQc7c3Wxxphe3x9j4cgdaOvodPT0aAOp167ZbfZnJ7d2JZnQ9ADVaAGINsCUQTRNNoE
xGhqbJTZNKDagyAA9R6mm1AJJAAIQTJE9MVPCNQyA0AAAACSnqNCmUZGmU8U8oZAA0AAaNAAAJNR
RogKR+kanpqZM01MyIDQaaAAAAIqp5RkNQGjTT0aQGygADQAAAAFSUCaNBMJpiJgmmUwKntKemhG
QxDQPKbgxA1kpAGpCayAoojCKqCxkVRkBUBBhV8zQiirKaVEtxPRKUktJKclzw0ThnsnafNLrasv
Dt27m8lkEoujf2MygsAPO3+ixi2nwG+grrjzGSjBnO3mQBWDNx7JPCHI6Qd4N4/060ogL+FW1LDo
MRhrUMOyh7CgTHCTMrsBeELyIiF/32xk064Hs1YYtlRC4EYSjSda3Mk2t6VAOC94axlRJGUWn6M4
Zt/cn0JVEkbvEniohTQgKKQaG1LZYlJBXz4zRBPDn7NF9RSOUYGybzCsTYX7x+IGRLL9s5xR4CLv
Jj/OC12b4qOP+a7wSNYBzxDjd6+aD/CNj0BqkiICqqyKyuRwmht/kIY3agaloxhUGMNeS9XV1hsr
QnjdiLHryvr11q+vSYblVHMKDYDuJlnqmx6ssSk0yrDNU0S3btoa8mer55EmmViNFak05OqMtuAW
OhstQLckDw8Dk8ep0+prTWZulyH/A4zZ8oap4MEOx8koDdSxpY9R1pHqN6CRmNnoUN+NdLaKGT9E
BbbXpnvVhkrx8jnBM51EGwwghrxJeZMphxjq5fboak4Bv8wNCB5URIGqsqtsYe8U3nJ11iWHieQ9
GjkO6KMGmZ1xx8VxYrmIMC5IqoquQJANefG1unkVL8stnxxpoc2f7UkNnHdlvy4cdIenvlBFJImr
5fVXqbbSfMnqQmbAzYTLX12BhM2AaOEaoyrK7YojFh687uE7ScD2qPbHgICktA8zbhrt9GeBcyjP
UKOiMMibC6t2N3SmASq3NjdAMFFVFIHkN7TQ5LU2wD0cwCJ6iEBDagaAM4JWdxRK22wBIMgQAK8E
CVU5wmrlTjYfPAYH+npFQWMSpD1kO3l2vP0bSHnIXJXSdBgNcy/Cg+N8smgYyJrGwZ+TTZVJVKil
FTan5Z2AudfLNJ55r9VDqRUuvXf3h4tmrHLspb19SQZ6hNsfxPtvddB3YSqms1LjA5EGOu7bryct
5GOut7sbbbbbbbenp6dmovI4yTwoc7MCBaTxtMJknfoDS4UEzhGmtKCE8zITSQjRu6QMTUyxIViS
QKUgESQLbwVIG7HWb9bjB2GzaZZVW+yGGqRTopCtavukIfUKIWEjTrZX5KTCmnJCKzg/6v028p13
U0kQ4+EWHE5vMUenYcKoSEMkLQ0BZK8sDokQCwyCiAbd/4S9Ce0ve0NyR0ecEHVXxVgMgd9RvQ7D
BMw20BBGA5IVVFwqrJR1YZi+9GbM6xxvJmpIJuqQ2LYmW/RajxDd5jSmtGNRJozMZE4ffm25DAEy
SsEqHTcDx6mM4KQptttxyzszq3nIB54m9xgJH73AZgkKCxFBXCgIywt0C2kTBuoiSB1DmI9QOoHB
oqTnsQ6eYHK0dGC9uXGR09tUXSARGWK16X9obzlNSpQt7CQ+3lgfLukKSsIZhDNdmEGiu24sgHZB
g5G7DYedydZVqY4PCa3JGIEvuL274uOsrfER5iOayiLt+WSG+FHWGqUrWUWirFYWCa3JC8VRDSAV
8A04ZaJCqn7HWdiqSMDAmJrW1qc6rdMqFC8PPzx29TStRuWbix0l+xHTC437Jwz36jQtYJZT9SOp
ym1BmnI58vaT4JCkwn5LMqD3Ycg+iQhd9zTHJxhm+15k9ELcfPiw+sCJ4RNzuI53Ph/5WCfS3Wzq
Dovwyc0zTuSDPSk43JuoIvaRuSm9GE2NoG5ygX1c+40hw2VDE1kJyo3uqVp1QOeHRgvyA2mQpJxd
btGu7TSPLaQmPUDp4i5HxQPrCNTCejwEMqiF94tRMk8gC2FJDYP2yEhskG+Svxv6TV4QPOM/lHt1
OMHie5CkvrERRVMjhurtV8DAdGCfUYGehU7KrlWThHDTjJ6ST55pC6QvZJ4pwXCjgt0pSgwhsjWx
z8saJuSFVZq/J2NNA2biz57IKFG1QZ9nXstnxPmsJ+Kzu7jagcI1UVRVFUVUrNmJizNdoaIygp1M
bm03Gu7RJkc9htnOfHlrXTBglT3CNxDq1M8HQY4dERG/GuU+JujxmARIHMNysC3VYcQyUg712uhc
ccFlbfDPgFbiN1u4p00CNEWtWRo4pm9XXkvnwEQTxu8rEq4cB4EyvemDJgVynZ5SpEwWvc8tQ96Q
oHBRC++KnqkKOG5EHp+hyy3JpINhSjADcdDpsM+hmwbECchIUkOJk13XgbzF2aeVJQMv6DxqOs+T
W2gOJlcTOuVk0V9hkZU7dsv31Qp0IttGR5hzFt7QL5TICd+RypEbmJQJ9hePjDrY25eBPfY9RaQR
EeaE4myjrvSxDcZoD4MpKEjKTSwNsJIoUgayTm8xPGjg2WidDEZoo++ZPoQOGUNe0Jz9gw+tIxaE
ewHZAoCzwTy9zh/CjfcvCN6k5TfQidTe6EFRHzQcBoUUK63zNr6Z2oZ4V5wIm9XzIwhAcSJAwWsX
LviiLim0AIGxyObQ3k1Bi1F6CkONxaGU9eWJP+W++uTeShajg3AYSTuwGiI1G0uOnQkZ2KaZ3ZzY
G6te9Y0MFWVPEIwR10ZT67ugtCM0SE/TiEiQMIq+NyvXrYCqEHM31fA2JDt9bDCGzFKQymVJS05B
WXDDpZjZulaGK6uRdzPV5UZ7hbMhVYhfFPY7xx1HlOwBsXIcLPtEc9vCC3l4outz6cGOauzJrNna
jWcUbIeXinTgxX2iwlgskztNnLthJkRAe4gDSAcA0gJgcCotmioL0kwF8JQzjFZmg0ImGgUMyfyf
n+P2c59IKTV6iuBSopUV8e+mmDYVCWKqqr2dYfXBBDaWB4CSTNBSU9YtYndPJNH3zbEqUqKFEVQv
nVoBSgqP9ez3KVK9BpBWoHmv9+71ngo9A1C5WMocoWJYidftchhH4T1c/J5LsyCvc8z5697aLPPK
FiB8SmCJeHy+VIGTYm0zorzmfmE0d/y7uhkaGsa6mqHP51712XrMMLoNvowQi+R6lY0Ux3aw1JFo
sQWClCRnR9e7XPtH5/mmMS+H4w8RaOeplBvNSOY30i7sRGeSTMSOFQDentPo04m6cxci8TDe8dVp
tR3Ptq1c6hpJng58SOV6EZFwQEfXgn+JrG+HnKGDMKc9sHf7DmNzRSxVn9ZjnyWcJyjgQaUbtL1R
7pjpGKMHsylTO41HgQG7ft3rxMXJC1hIxwxKCUs5+ISMh272Po8iB2tEyPqU2HkBFSjzZZ2QrlH4
fkdUh9Kk+1yJffj4CDBkfDdnPeeb41Mehko6J7y4fVbqYtyfD2Hmnf6Rtjxt5861F0Ml1Yww5iR1
jmjxDDA7sWuVV1uiGN18Uc8HZodzteFAEkHvIF5xZw4ykpi6wTijcGlO226MCW0QIFqAkRGbN48C
glnjEQTwqKHhBlfcl3VJvdtqJsGJocIpItW+TTa4c+KzPNiPdIfCDweqK6JH62OSU92aR1obTdUi
cfZ5/D2uutHRwths33V7PRerYY8riG6YINAYNbqAMabJLzIeTrOHshRulhm+yTHgnR5p0YR6iFY1
3fRzgjYklqaRtsxs9913lD9HGbmvARv2Nn9x5PEak+h6CPrQfQg5pBRbsoWKKKqqpYaI4wpE0vDp
4WTW7W7d7YaDHDX3tZC81ph4BWiCRG5O71+5eal6IJC2tgE1PGTurvpJQGgdpl3M3dy1AZS1gmCF
VXCqnTNWAR23muvG6AF8GZwlhD9QJACxKzDaIcjqwDTQw9qBxSGA8hhYshQlQmLn04u/0tHxlf+6
FbcRrwF4d68KedhYlB8551StbZA9/VqIiCazWA4QcgqKu3gxDZzdmaZQZoSSO5Gi4nipUexd9HL6
fhieSBM/WhRKXmZkXIUqCWRGRx7yH2ToSKmDg4qYl6CODViiba6egJpCdd504SGK/atg+jvDRKh9
4fOGdHHusWVDiK7sontLfF498LW4Ou9GcaL3npMKpsikh1AX0k4k8NmThkCh3pFuCQl1dgsRQ8ZT
jtfVGZ/ckjSp5Jn6I0o4yF0PKXmuHWi70QVHgiv+kqRijlZ+qvhcWwskLFrGTdXwieKPWeJJgZod
444z7EG4gt8YsH05GA/ZE+Vg2owmQ+hSlNwEKQ1lRMmhRtlqUZwOMIPlzBELAab0/rThDKWMuiJp
SLNfTudbTn26Ho1vaPkOAyHyhoj0FVCV/p+nznhNXdA8+H61DvdHPiSVNa0a//rYZupylUpUUes0
/5XX+cM6PfPoi/PXQg70fU/KdifKHWivJSlarLB5JnR9UXTpS+/Y9J8UT5Tfm4JKqcSUqLJ4SRHB
LQY84GAtkFzCOaNjFFKVUlSoXrPhZj95v8vjDR+W9JlKeoxGgmwbUX++yuVsEdyNpZD3P89KSWSR
HU2JTnyQ9ZckcerB+AzwlRfD4I0o0RMwpfN85LS3PotWVnF0Gb7I1xwpnZaiUwEremVxkggdkqs0
CuaBUDpBAxxgcBnKlLQn7UvhfYll8Fmo+zulOpKWGoJQ1BKGoJQ1BKGg98nIDfO5A4Z9BlNMRa6p
EwkLKVSJW+R8UWiYS6xBzizFF3ol1rFE7CcTMUdNoGxVThVI0WpiM4aofSPJGZ6NqWQdVNIkfdQx
OXpVhD9Bh1Coc+LqRK/iKQ12iVEjnPVij3yuyJ4EolQub/h2VaqFYDJJZ9t3vFQqEul8F5dpHnre
6JsTJ5rqbaqlRRrJN/Uz5Wtg47nV5Mg+t0ia8PojfO1GqJ1cOxpsVtFqkUsWM1iNye9GktmxWYxR
KR2RMRbvwnZMkRwHcOMGYZFyvpwlyFTlopXANbfmvGkTOKkz47EcZC0T5qMKy9+P5Vrvzss61Hsz
lp7oV0nqlRs7egyno90qUpS5uGZGdyssdtvPmFhCiaDFERVF6IHdgBzFQO5PAwWKKCixY7JlITMk
5uwOIBtN2iyRVWTcQne+GsvJpDwCQ6ebge7n2NVmYh/3DCMRKluOZdCklOpcWpRmF0Peh2yQyRfU
haLOziMMkNQ38VxSVFLlikzyuLSK1DVvDLNslVNKP35I7f01T2RkiXiaZNwbey4vzYWwmobb/RG8
qC97Rr60W3/gckeUXi2V/ipza+WrKJ++aYwRt9WKOwmoJYcGJwKN6vfEmAZiCAUVCULgbzZZFSSe
jkQwwnh5SBfsQN5SJkiQSjvfnRnmUiZLIX3d0idiLCY0qlZ/CPkiuGzjMEckakTrm4WWZSX0rKrF
4dv7onmnXh4o5MvNG+W7UfVF44I//F3JFOFCQX4hrGg=

             reply	other threads:[~2010-10-10 20:45 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-10-10 20:45 Benjamin R. White [this message]
2010-10-11  5:00 ` Contributing & lisp/image-mode.el patch Chong Yidong
2010-10-11  6:09 ` David Kastrup

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=87k4lphj57.fsf@asuka.nibjib.dyndns.info \
    --to=benrwhite@gmail.com \
    --cc=emacs-devel@gnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this external index

	https://git.savannah.gnu.org/cgit/emacs.git
	https://git.savannah.gnu.org/cgit/emacs/org-mode.git

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.