From mboxrd@z Thu Jan 1 00:00:00 1970 From: Eric Schulte Subject: Re: layout org-babel menu WAS: About org-babel menu Date: Fri, 06 Apr 2012 17:51:24 -0400 Message-ID: <87bon4pm03.fsf@gmx.com> References: <87d388lo8f.fsf@gmail.com> <87pqc8acwy.fsf@gmx.com> <4F67458D.5090904@gmail.com> <87mx71mymu.fsf@gnu.org> <4F7D6125.40309@gmail.com> <87pqbm8i0t.fsf@gmx.com> Mime-Version: 1.0 Content-Type: text/plain Return-path: Received: from eggs.gnu.org ([208.118.235.92]:45603) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1SGIwM-000050-54 for emacs-orgmode@gnu.org; Fri, 06 Apr 2012 19:51:39 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1SGIwK-0004cx-6z for emacs-orgmode@gnu.org; Fri, 06 Apr 2012 19:51:37 -0400 Received: from mailout-us.gmx.com ([74.208.5.67]:40645) by eggs.gnu.org with smtp (Exim 4.71) (envelope-from ) id 1SGIwK-0004cr-0Q for emacs-orgmode@gnu.org; Fri, 06 Apr 2012 19:51:36 -0400 In-Reply-To: (Torsten Wagner's message of "Fri, 6 Apr 2012 10:51:56 +0900") List-Id: "General discussions about Org-mode." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: emacs-orgmode-bounces+geo-emacs-orgmode=m.gmane.org@gnu.org Sender: emacs-orgmode-bounces+geo-emacs-orgmode=m.gmane.org@gnu.org To: Torsten Wagner Cc: FengShu , emacs-orgmode@gnu.org Torsten Wagner writes: > Hi, > > for me the biggest "trouble" with babel is to remember the possible > keywords in the header for different languages. > There were a lot of ongoing syntax change which did not make it easier > for me to remember all this. > Thus a menu which is organised by languages offering all possible > settings for each language would be very helpful. > | > Python > | | > | export - code - result - both - none > | | > | tangle - no - yes- filename > | | > | result - value - output > | | > | ... > | > ... > > Not sure how effectual this would be in a main menu. It would be > definitely awesome in a context menu > > That would be (copied from worg) [*] indicates cursor position > > #+NAME: factorial > #+BEGIN_SRC haskell [*] :results silent :exports code :var n=0 > > a context menu would appear presenting all possible header arguments for haskell > > #+NAME: factorial > #+BEGIN_SRC haskell :results [*] :exports code :var n=0 > > a context menu presenting all possible values for the header argument > :results in haskell > I guess that together with the possibility to call this menu by > keyboard strokes or alternatively show the same infos in the > minibuffer would be a great win for babel and it would make many > questions here on the list unnecessary. > Furthermore, any change or extension in the syntax for a certain > language would be directly reflected to the end-user. E.g., If I > suddenly see the menu entry :exports 3dprint, I would be curious and > check it out on worg and the manual ;) > > Totti > Hi, I've put together a first pass at such support for interactive header argument look up. Please evaluate this elisp code [1] in your *scratch* buffer, then in an Org-mode buffer insert a code block like the following with the point at [*], and press tab. #+begin_src R :[*] :foo #+end_src You should see an auto-completion list showing which header arguments are available and (for those with known arguments) which arguments may be specified. This includes language specific header arguments, i.e., the R code block above suggests about twice as many possible header arguments as an elisp block. Note this "expand on tab after :" behavior is active on "#+headers:" lines as well. This makes use of the `org-babel-common-header-args-w-values' variable which holds header argument names and completions, as well as the org-babel-header-arg-names:lang variables. Does this seem like a good interface? Is it missing any important functionality? Best, Footnotes: [1] ;; Add support for completing-read insertion of header arguments after ":" (defun org-babel-header-arg-expand () "Call `org-babel-enter-header-arg-w-completion' in appropriate contexts." (when (and (= (char-before) ?\:) (org-babel-where-is-src-block-head)) (org-babel-enter-header-arg-w-completion (match-string 2)))) (defun org-babel-enter-header-arg-w-completion (&optional lang) "Insert header argument appropriate for LANG with completion." (let* ((lang-headers-var (intern (concat "org-babel-header-arg-names:" lang))) (lang-headers (when (boundp lang-headers-var) (mapcar #'symbol-name (eval lang-headers-var)))) (headers (append (mapcar #'symbol-name org-babel-header-arg-names) lang-headers)) (header (org-completing-read "Header Arg: " headers)) (args (cdr (assoc (intern header) org-babel-common-header-args-w-values))) (arg (when (and args (listp args)) (org-completing-read (format "%s: " header) (mapcar #'symbol-name (car args)))))) (insert (concat header " " (or arg ""))) (cons header arg))) (add-hook 'org-tab-first-hook 'org-babel-header-arg-expand) -- Eric Schulte http://cs.unm.edu/~eschulte/