From mboxrd@z Thu Jan 1 00:00:00 1970 From: tsd@tsdye.com (Thomas S. Dye) Subject: Re: layout org-babel menu WAS: About org-babel menu Date: Sun, 08 Apr 2012 11:19:47 -1000 Message-ID: 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> <87bon4pm03.fsf@gmx.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Return-path: Received: from eggs.gnu.org ([208.118.235.92]:45270) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1SGzWk-0004Kp-Dp for emacs-orgmode@gnu.org; Sun, 08 Apr 2012 17:20:04 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1SGzWi-0006U5-6B for emacs-orgmode@gnu.org; Sun, 08 Apr 2012 17:20:01 -0400 Received: from oproxy3-pub.bluehost.com ([69.89.21.8]:38013) by eggs.gnu.org with smtp (Exim 4.71) (envelope-from ) id 1SGzWh-0006Tn-Sl for emacs-orgmode@gnu.org; Sun, 08 Apr 2012 17:20:00 -0400 In-Reply-To: <87bon4pm03.fsf@gmx.com> (Eric Schulte's message of "Fri, 06 Apr 2012 17:51:24 -0400") 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: Eric Schulte Cc: FengShu , emacs-orgmode@gnu.org Eric Schulte writes: > 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) Hi Eric, This is potentially much nicer than a function template. I tried filling out an R source code block's header arguments, but I couldn't find a way to get :results output graphics, which I use frequently for ggplot2 graphics. With TAB I could see type arguments, but not collection or handling arguments. Is there some way to cycle through the various completion lists? All the best, Tom -- Thomas S. Dye http://www.tsdye.com