Rainer M Krug writes: > On 11/04/12 03:40, Eric Schulte wrote: >> tsd@tsdye.com (Thomas S. Dye) writes: >> >>> 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 >> >> Hi Tom, >> >> Currently language specific arguments for header arguments are not stored in any elisp >> variables so there is no way to provide this information to the auto completion function. I'm >> adding a new suite of language-specific variables which may be customized by each language to >> provide information on language-specific header-argument arguments. >> >> I've just put together this new code into a patch. I'm not currently able to run the test >> suite without massive failures (with or without this patch), so I'm just attaching the patch >> here rather than pushing it up directly. If it works well on other people's systems I think >> it should be committed. > > Hi > > I applied the patch and it seems to be working when used on #+header: but on > #+src_begin R :[*] > #+end_src > > it folds the code block when tab is pressed at [*] > > No detailed further tests done. > > Cheers, > > Rainer > Thanks for checking this out. Please try this new attached version which move the header argument auto completion to the front of the org-tab-first-hook. Thanks,