Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- (defvar foo-mode-map (make-sparse-keymap))
- (define-minor-mode foo-mode
- "Scales numbers when they are right-click dragged over."
- :keymap foo-mode-map
- :lighter " foo")
- (define-key foo-mode-map (kbd "<down-mouse-3>") 'foo-mouse-scale)
- (defun* foo-find-number (&optional (point (point)))
- "Return the region for the number around POINT."
- (save-excursion
- (goto-char point)
- (let ((num "[^-0-9.]"))
- (re-search-backward num)
- (forward-char 1)
- (let ((start (point)))
- (re-search-forward num)
- (list start (1- (point)))))))
- (defun foo-mouse-scale (event)
- (interactive "e")
- (flet ((x (event) (car (posn-x-y (second event)))))
- (save-excursion
- (destructuring-bind (start end)
- (foo-find-number (posn-point (second event)))
- (let* ((start-x (x event))
- (base (string-to-number (buffer-substring start end))))
- (track-mouse
- (loop for movement = (read-event)
- while (mouse-movement-p movement)
- for value = (+ base (- (x movement) start-x))
- for value-str = (number-to-string value)
- do (progn
- (delete-region start end)
- (setf end (+ start (length value-str)))
- (goto-char start)
- (insert value-str))))))))))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement