Sender: ted@CLARENCE
Newsgroups: gnu.emacs.sources
Subject: some eshell advice: let's go clicky-clicky on previous commands!
From: ted@oconnor.cx
Message-ID: <uk7ncl22b.fsf@CLARENCE.i-did-not-set--mail-host-address--so-shoot-me>
Date: Wed, 31 Jul 2002 08:41:58 GMT
Organization: RoadRunner - West

Hi there!

Here's some advice I just coded up to let you mouse-2 on previous
Eshell commands a la IELM. This could probably be done in a much
less hackish fashion.

Share and Enjoy!


-- 
Edward O'Connor
ted@oconnor.cx



(defun ted-eshell-middle-clicky-clicky (event)
  "Insert the clicked-on command after the Eshell prompt as new input."
  (interactive "e")
  (save-excursion
    (let ((ovs (overlays-at (cadr (event-start event))))
	  (cmd nil))
      (mapc (lambda (ov)
	      (when (overlay-get ov 'ted-thingy)
		(setq cmd (buffer-substring-no-properties (overlay-start ov)
							  (overlay-end ov)))))
	    ovs)
      (when cmd
	(goto-char (point-max))
	(insert cmd)))))

(defvar ted-eshell-clicky-clicky-map (make-sparse-keymap))

(define-key ted-eshell-clicky-clicky-map (kbd "<mouse-2>")
  'ted-eshell-middle-clicky-clicky)

(defadvice eshell-parse-command (before ted-add-clicky-clicky
                                 (command &optional args top-level))
  (when (consp command)
    (let* ((ov (make-overlay (car command)
			     (cdr command)
			     (current-buffer)
			     nil
			     nil)))
      (overlay-put ov 'ted-thingy t)
      (overlay-put ov 'help-echo "mouse-2: insert after prompt as new input")
      (overlay-put ov 'mouse-face 'highlight)
      (overlay-put ov 'face 'comint-highlight-input)
      (overlay-put ov 'keymap ted-eshell-clicky-clicky-map)
      (overlay-put ov 'evaporate t))))

(ad-activate 'eshell-parse-command)
