public
Last active

ess-R-object-popup.el

  • Download Gist
ess-R-object-popup.el
Emacs Lisp
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63
;; ess-R-object-popup.el
;;
;; I have defined a function, ess-R-object-popup, that when
;; invoked, will return a popup with some information about
;; the object at point. The information returned is
;; determined by which R function is called. This is controlled
;; by an alist, called ess-R-object-popup-alist. The default is
;; given below. The keys are the classes of R object that will
;; use the associated function. For example, when the function
;; is called while point is on a factor object, a table of that
;; factor will be shown in the popup. The objects must of course
;; exist in the associated inferior R process for this to work.
;; The special key "other" in the alist defines which function
;; to call when the class is not mached in the alist. By default,
;; the str function is called, which is actually a fairly useful
;; default for data.frame and function objects.
;;
;; The last line of this file shows my default keybinding.
;; I simply save this file in a directory in my load-path
;; and then place (require 'ess-R-object-popup) in my .emacs
 
;; the alist
(setq ess-R-object-popup-alist
'((numeric . "summary")
(factor . "table")
(integer . "summary")
(lm . "summary")
(other . "str")))
 
(defun ess-R-object-popup ()
"Get info for object at point, and display it in a popup."
(interactive)
(let ((objname (current-word))
(curbuf (current-buffer))
(tmpbuf (get-buffer-create "**ess-R-object-popup**")))
(if objname
(progn
(ess-command (concat "class(" objname ")\n") tmpbuf )
(set-buffer tmpbuf)
(let ((bs (buffer-string)))
(if (not(string-match "\(object .* not found\)\|unexpected" bs))
(let* ((objcls (buffer-substring
(+ 2 (string-match "\".*\"" bs))
(- (point-max) 2)))
(myfun (cdr(assoc-string objcls
ess-R-object-popup-alist))))
(progn
(if (eq myfun nil)
(setq myfun
(cdr(assoc-string "other"
ess-R-object-popup-alist))))
(if (string= myfun "str")
(ess-command (concat myfun "(" objname ")\n") tmpbuf)
(ess-command (concat myfun "(" objname ");" "str(" objname ")\n" ) tmpbuf))
(let ((bs (buffer-string)))
(progn
(set-buffer curbuf)
(popup-tip bs)))))))))
(kill-buffer tmpbuf)))
 
;; my default key map
(define-key ess-mode-map "\C-c\C-g" 'ess-R-object-popup)
(provide 'ess-R-object-popup)

Please sign in to comment on this gist.

Something went wrong with that request. Please try again.