emacs-orgmode
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [O] Losing tabs when tangling or editing


From: Michael Hannon
Subject: Re: [O] Losing tabs when tangling or editing
Date: Mon, 28 May 2012 20:45:07 -0700 (PDT)

Michael Hannon <address@hidden> wrote:
>
>Thomas S. Dye <address@hidden> wrote:
>>
>>> Greetings.  I was trying to set up a little demo in which I included a
>>> Makefile inside a "sh" source-code block in an Org-mode file, then tangled
>>> the file and ran "make" on the tangled file (either in the actual shell or
>>> in another sh block in Org).
>>>
>>> It appears that Org is removing tabs when it tangles the file, and the
>>> lack of tabs causes "make" to complain.
>>>
>>> I've appended a toy example which exhibits the problem.  BTW, if I edit
>>> the source block via C-c ' I also lose the tabs, i.e., even before
>>> tangling.
>>>
>>> Any thoughts about this?
>>>
>
>> I stumbled across this, too, in a somewhat different context.  My
>> "solution" was to hard code the newlines and tabs with \n\t using an
>> emacs-lisp source block and (format), then evaluate to a file, rather than
>> tangle.  I don't think it's a pretty solution, but it does work.
>
> Thanks, Tom.  I admire your ingenuity, but I think your work-around is too
> complicated for my purposes.  I was hoping to use this example to do a bit
> of subliminal proselytizing for Org mode.  If I tell people that to do this
> they have to hand code a bunch of newlines and tabs, using Emacs lisp at
> that, I'm not gonna win many converts.
>
> I was hoping that there might be some kind of customization possible:
>
>    (setq leave-the-bleeping-tabs-alone t)
>
> I looked through ob-tangle.el but didn't see anything obvious.  (This is
> neither surprising nor conclusive, given my limited lisp skills.)

I don't know if this is an improvement or not, but I wrote a tiny awk script
that looks for a space at the beginning of a line and prepends a tab if it
finds one; otherwise, it leaves the line alone.  Please see the appended.

-- Mike

$ cat hw.org
* test preservation of tabs when tangling

#+BEGIN_SRC sh :tangle Makefile.tangled

hw:    hw.cpp
    g++ -o hw hw.cpp

  
#+END_SRC


$ cat Makefile.tangled

hw:     hw.cpp
        g++ -o hw hw.cpp

$ grep -P "\t" Makefile.tangled    ## check for tabs
$   ## Nope, no tabs

$ cat hw.awk
{
  if ( /^ /) {
    print "\t" $0
     } else {
    print $0
     }
}

$ awk -f hw.awk Makefile.tangled > Makefile.tangled.fixed

$ grep -P "\t" Makefile.tangled.fixed   ## check again for tabs
            g++ -o hw hw.cpp

$ make -f Makefile.tangled.fixed 
g++ -o hw hw.cpp

$ ./hw
Hello, world!

>
>> #+name: configure-makefile #+header: :file Makefile #+header: :var
>> emacs="/Applications/Emacs-23-4.app/Contents/MacOS/Emacs" #+header: :var
>> init-file="init-new.el" #+header: :var exporter="new" #+header: :eval
>> noexport #+BEGIN_SRC emacs-lisp (let ((f (file-name-sans-extension
>> (file-name-nondirectory (buffer-file-name)))) (g (if (string= exporter
>> "old") "org-export-as-latex" "org-e-latex-export-to-latex"))) (format
>> "CC=gcc EMACS=%s BATCH_EMACS=$(EMACS) --batch -Q -l %s %s
>>    
>>     all: %s.pdf
>>    
>>     %s.tex: %s.org\n\t$(BATCH_EMACS) -f %s
>>    
>>     %s.pdf: %s.tex\n\trm -f %s.aux\n\tif pdflatex %s.tex </dev/null; then
>>     \\\n\t\ttrue; \\\n\telse \\\n\t\tstat=$$?; touch %s.pdf; exit $$stat;
>>     \\\n\tfi\n\tbibtex %s\n\twhile grep \"Rerun to get\" %s.log; do
>>     \\\n\t\tif pdflatex %s.tex </dev/null; then \\\n\t\t\ttrue;
>>     \\\n\t\telse \\\n\t\t\tstat=$$?; touch %s.pdf; exit $$stat; \\\n\t\tfi;
>>     \\\n\tdone
>>    
>>     %s.ps: %s.pdf\n\tpdf2ps %s.pdf
>>    
>>     clean:\n\trm -f *.aux *.log  *.dvi *.blg *.bbl *.toc *.tex *~ *.out
>>     %s.pdf *.xml *.lot *.lof " emacs init-file (file-name-nondirectory
>>     (buffer-file-name)) f f f g f f f f f f f f f f f f f)) #+END_SRC
>>
>>
>>>
>>>
>>> $ cat Makefile.original hw:    hw.cpp g++ -o hw hw.cpp
>>>
>>> $ grep -P "\t" Makefile.original hw:    hw.cpp g++ -o hw hw.cpp
>>>
>>> $ make -f Makefile.original g++ -o hw hw.cpp
>>>
>>> $ ./hw Hello, world!
>>>
>>> $ \rm hw
>>>
>>> $ cat hw.org * test preservation of tabs when tangling
>>>
>>> #+BEGIN_SRC sh :tangle Makefile.tangled
>>>
>>> hw:    hw.cpp g++ -o hw hw.cpp
>>>
>>> #+END_SRC
>>>
>>> $ make -f Makefile.tangled Makefile.tangled:3: *** missing separator (did
>>> you mean TAB instead of 8 spaces?).  Stop.



reply via email to

[Prev in Thread] Current Thread [Next in Thread]