emacs-orgmode@gnu.org archives
 help / color / mirror / code / Atom feed
From: Tassilo Horn <tassilo@member.fsf.org>
To: emacs-orgmode@gnu.org
Subject: Re: RFI -- Which completion system?
Date: Fri, 22 Oct 2010 09:48:42 +0200	[thread overview]
Message-ID: <87zku67jmt.fsf@thinkpad.tsdh.de> (raw)
In-Reply-To: 80d3r3457g.fsf@mundaneum.com

Sébastien Vauban <wxhgmqzgwmuf@spammotel.com>
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 = <M-/>
  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 = <TAB>' 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

  reply	other threads:[~2010-10-22  7:48 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-10-21 21:16 RFI -- Which completion system? Sébastien Vauban
2010-10-22  7:48 ` Tassilo Horn [this message]
2010-10-22 10:24 ` Eric S Fraga

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: https://www.orgmode.org/

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=87zku67jmt.fsf@thinkpad.tsdh.de \
    --to=tassilo@member.fsf.org \
    --cc=emacs-orgmode@gnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/emacs/org-mode.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).