emacs-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Contributing & lisp/image-mode.el patch


From: Benjamin R. White
Subject: Contributing & lisp/image-mode.el patch
Date: Sun, 10 Oct 2010 21:45:08 +0100
User-agent: Gnus/5.13 (Gnus v5.13) Emacs/24.0.50 (gnu/linux)

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

2010-10-10  Benjamin R. White  <address@hidden>

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

# Bazaar merge directive format 2 (Bazaar 0.90)
# revision_id: address@hidden
# target_branch: http://bzr.savannah.gnu.org/r/emacs/trunk
# testament_sha1: be306a8c74d88c7c60c045fb1442688c981f4cdc
# timestamp: 2010-10-10 21:06:34 +0100
# base_revision_id: address@hidden
# 
# 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
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

reply via email to

[Prev in Thread] Current Thread [Next in Thread]