From mboxrd@z Thu Jan 1 00:00:00 1970 From: Tassilo Horn Subject: Re: RFI -- Which completion system? Date: Fri, 22 Oct 2010 09:48:42 +0200 Message-ID: <87zku67jmt.fsf@thinkpad.tsdh.de> References: <80d3r3457g.fsf@mundaneum.com> Mime-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit Return-path: Received: from [140.186.70.92] (port=44912 helo=eggs.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1P9CMy-000526-HD for emacs-orgmode@gnu.org; Fri, 22 Oct 2010 03:48:58 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1P9CMv-0003w1-9r for emacs-orgmode@gnu.org; Fri, 22 Oct 2010 03:48:54 -0400 Received: from lo.gmane.org ([80.91.229.12]:34796) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1P9CMu-0003vr-WD for emacs-orgmode@gnu.org; Fri, 22 Oct 2010 03:48:53 -0400 Received: from list by lo.gmane.org with local (Exim 4.69) (envelope-from ) id 1P9CMs-0000uC-Dp for emacs-orgmode@gnu.org; Fri, 22 Oct 2010 09:48:50 +0200 Received: from tsdh.uni-koblenz.de ([141.26.67.142]) by main.gmane.org with esmtp (Gmexim 0.1 (Debian)) id 1AlnuQ-0007hv-00 for ; Fri, 22 Oct 2010 09:48:50 +0200 Received: from tassilo by tsdh.uni-koblenz.de with local (Gmexim 0.1 (Debian)) id 1AlnuQ-0007hv-00 for ; Fri, 22 Oct 2010 09:48:50 +0200 List-Id: "General discussions about Org-mode." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: emacs-orgmode-bounces+geo-emacs-orgmode=m.gmane.org@gnu.org Errors-To: emacs-orgmode-bounces+geo-emacs-orgmode=m.gmane.org@gnu.org To: emacs-orgmode@gnu.org Sébastien Vauban writes: Hi Seb, > Before spending a lot of time trying to choose for the "best" > completion mechanism inside Emacs (and sticking to it), setting it up > all the way through, I wanted to know if you had had: > > - particularly good or bad experiences with one of the "standard" ones? > > - things to notice regarding the integration with Org? > > From the many that do exist -- and which conflict in my =.emacs= file! --, > I've spotted the following ones of being of real interest: > > - dabbrev > - hippie-expand I use the former through the latter and bound M-/ to `hippie-expand' instead of the normal `dabbrev-expand'. In addition to the dabbrev expand facility, I've teached my hippie-expand to also complete elisp symbols, buffers, file names, and solve mathematical formulas: 3 + 5 * 7 = 3 + 5 * 7 = 38 Cool! ;-) Here's my config (the math stuff is stolen from someone): --8<---------------cut here---------------start------------->8--- (global-set-key (kbd "M-/") 'hippie-expand) (defun my-try-complete-with-calc-result (arg) "complete `3 + 4 = ' to `3 + 4 = 7'. Great stuff by Michele Bini. http://www.emacswiki.org/cgi-bin/emacs-en/MicheleBini" (and (not arg) (eolp) (save-excursion (beginning-of-line) (when (and (boundp 'comment-start) comment-start) (when (looking-at (concat "[ \n\t]*" (regexp-quote comment-start))) (goto-char (match-end 0)) (when (looking-at "[^\n\t ]+") (goto-char (match-end 0))))) (looking-at ".* \\(\\([;=]\\) +$\\)")) (save-match-data (require 'calc-ext nil t)) ;;(require 'calc-aent) (let ((start (match-beginning 0)) (op (match-string-no-properties 2))) (save-excursion (goto-char (match-beginning 1)) (if (re-search-backward (concat "[\n" op "]") start t) (goto-char (match-end 0)) (goto-char start)) (looking-at (concat " *\\(.*[^ ]\\) +" op "\\( +\\)$")) (goto-char (match-end 2)) (let* ((b (match-beginning 2)) (e (match-end 2)) (a (match-string-no-properties 1)) (r (calc-do-calc-eval a nil nil))) (when (string-equal a r) (let ((b (save-excursion (and (search-backward "\n\n" nil t) (match-end 0)))) (p (current-buffer)) (pos start) (s nil)) (setq r (calc-do-calc-eval (with-temp-buffer (insert a) (goto-char (point-min)) (while (re-search-forward "[^0-9():!^ \t-][^():!^ \t]*" nil t) (setq s (match-string-no-properties 0)) (let ((r (save-match-data (save-excursion (set-buffer p) (goto-char pos) (and ;; TODO: support for line indentation (re-search-backward (concat "^" (regexp-quote s) " =") b t) (progn (end-of-line) (search-backward "=" nil t) (and (looking-at "=\\(.*\\)$") (match-string-no-properties 1)))))))) (if r (replace-match (concat "(" r ")") t t)))) (buffer-substring (point-min) (point-max))) nil nil)))) (and r (progn (he-init-string b e) (he-substitute-string (concat " " r)) t))))))) (setq hippie-expand-try-functions-list '(try-complete-file-name my-try-complete-with-calc-result try-expand-dabbrev try-complete-lisp-symbol try-expand-dabbrev-all-buffers)) --8<---------------cut here---------------end--------------->8--- > - pabbrev > - company I've not tried those, but I also have auto-complete enabled globally, which shows nice, unobstrusive overlay completion popups. Basically it's great and I've also written an intelligent completion function for a language we're developing here at my University which was pretty easy to do. But auto-complete has some bugs and glitches which I've reported at its bugtracker. Sadly, it seems to me that its author has no time to fix those, at least he didn't respond to my reports since 5 months... Bye, Tassilo