aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--lisp/ChangeLog6
-rw-r--r--lisp/textmodes/picture.el32
2 files changed, 29 insertions, 9 deletions
diff --git a/lisp/ChangeLog b/lisp/ChangeLog
index cb4dfb4651d..8be8e44d9a6 100644
--- a/lisp/ChangeLog
+++ b/lisp/ChangeLog
@@ -1,3 +1,9 @@
12010-11-13 Chong Yidong <cyd@stupidchicken.com>
2
3 * textmodes/picture.el (picture-mouse-set-point): Don't use
4 posn-col-row; explicitly compute the motion based on the posn at
5 the window-start (Bug#7390).
6
12010-11-13 Michael Albinus <michael.albinus@gmx.de> 72010-11-13 Michael Albinus <michael.albinus@gmx.de>
2 8
3 * net/tramp.el (tramp-remote-coding-commands): Add an alternative 9 * net/tramp.el (tramp-remote-coding-commands): Add an alternative
diff --git a/lisp/textmodes/picture.el b/lisp/textmodes/picture.el
index 2673ee15457..f1bb9957125 100644
--- a/lisp/textmodes/picture.el
+++ b/lisp/textmodes/picture.el
@@ -226,16 +226,30 @@ Do \\[command-apropos] picture-movement to see commands which control motion."
226 (picture-motion (- arg))) 226 (picture-motion (- arg)))
227 227
228(defun picture-mouse-set-point (event) 228(defun picture-mouse-set-point (event)
229 "Move point to the position clicked on, making whitespace if necessary." 229 "Move point to the position of EVENT, making whitespace if necessary."
230 (interactive "e") 230 (interactive "e")
231 (let* ((pos (posn-col-row (event-start event))) 231 (let ((position (event-start event)))
232 (x (car pos)) 232 (unless (posn-area position) ; Ignore EVENT unless in text area
233 (y (cdr pos)) 233 (let* ((window (posn-window position))
234 (current-row (count-lines (window-start) (line-beginning-position)))) 234 (frame (if (framep window) window (window-frame window)))
235 (unless (equal x (current-column)) 235 (pair (posn-x-y position))
236 (picture-forward-column (- x (current-column)))) 236 (start-pos (window-start window))
237 (unless (equal y current-row) 237 (start-pair (posn-x-y (posn-at-point start-pos)))
238 (picture-move-down (- y current-row))))) 238 (dx (- (car pair) (car start-pair)))
239 (dy (- (cdr pair) (cdr start-pair)))
240 (char-ht (frame-char-height frame))
241 (spacing (when (display-graphic-p frame)
242 (or (with-current-buffer (window-buffer window)
243 line-spacing)
244 (frame-parameter frame 'line-spacing))))
245 rows cols)
246 (cond ((floatp spacing)
247 (setq spacing (truncate (* spacing char-ht))))
248 ((null spacing)
249 (setq spacing 0)))
250 (goto-char start-pos)
251 (picture-move-down (/ dy (+ char-ht spacing)))
252 (picture-forward-column (/ dx (frame-char-width frame)))))))
239 253
240 254
241;; Picture insertion and deletion. 255;; Picture insertion and deletion.