Rev 4259 | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed
;;; This is a proof-of-concept alternative user completion command;;; (adapted from ess-complete-object-name) for use with ESS, making;;; use of the rcompgen package rather than ESS's built-in completion;;; mechanism. Including this in your .emacs file should be;;; sufficient (see usage note below). The R package 'rcompgen' must;;; be installed.(require 'ess-site);;; There are two ways to proceed.;;; (1) You can completely replace 'ess-complete-object-name', in;;; which case you should keep the following function definition, but;;; change the name 'alt-ess-complete-object-name' to;;; 'ess-complete-object-name'. The advantage to this approach is;;; that you retain all the other ESS goodies like filename;;; completion, C-c C-TAB completion in code buffers, etc. The;;; downside is that you won't be able to use the original;;; 'ess-complete-object-name' any more.;;; (2) Define the new function with a different name, and use;;; whichever one you want (this is what will happen if you use this;;; file as-is):(defun alt-ess-complete-object-name ()(interactive)(ess-make-buffer-current)(let* ((comint-completion-addsuffix nil)(beg-of-line (save-excursion (comint-bol) (point)))(end-of-line (point-at-eol))(line-buffer (buffer-substring beg-of-line end-of-line))(token-string ;; setup, including computation of the token(progn(ess-command (format "rcompgen:::.assignLinebuffer('%s')\n" line-buffer))(ess-command (format "rcompgen:::.assignEnd(%d)\n" (- (point) beg-of-line)))(car (ess-get-words-from-vector "rcompgen:::.guessTokenFromLine()\n"))))(possible-completions ;; compute and retrieve possible completions(progn(ess-command "rcompgen:::.completeToken()\n")(ess-get-words-from-vector "rcompgen:::.retrieveCompletions()\n"))))(or (comint-dynamic-simple-complete token-string possible-completions) 'none)));;; This completion function can now be invoked as;;; M-x alt-ess-complete-object-name;;; If you want to associate completion with the TAB key, that can be;;; done as follows:;; (define-key inferior-ess-mode-map "\t" 'alt-ess-complete-object-name)