ranger-users
[Top][All Lists]

## Re: [Ranger-users] I can't get scope.sh to work properly on all files.

 From: Somelauw . Subject: Re: [Ranger-users] I can't get scope.sh to work properly on all files. Date: Mon, 4 Nov 2013 18:42:36 +0100

By the way, you are right about that /bin/sh is symlinked to dash on my system.

> Hmm, my native shell is zsh, but at the top of the file I found the
> following shebang:
> #!/usr/bin/env sh
>
> Replacing "sh" by "bash" worked for me.
> Leaving it as either "sh" or "dash" didn't work.
> Leaving it as "zsh" the script crashed with an error because
> apparently "file" and "tr" aren't build-in commands in zsh.
>
> Your suggestion of using sh and printf "%s" at the same time worked as well.
>
> I think your suggestion of using printf is best, so I left that
> solution in my config file.
>
>> I can reproduce the problem and offer the following solution.
>>
>> Summary:
>> (i)  The error occurs because the shell’s built-in echo command is
>>      interpreting the \b' of \begin'.
>> (ii) The solution is to use printf "%s" ' instead of echo ' in
>>      dump() in scope.sh.
>>
>> Details:
>> 1) The output of scope.sh and that of manually typing the command in
>> shell are different because you are (almost certainly) using two
>> different echo's. When you type the command manually, the system uses
>> the system installed echo, while in the script, the echo' built-into
>> the shell is used. The system installed shell does not interpret the
>> special characters by default, while the built-in shell does. (And,
>> actually, there is no way to turn off the built-in echo’s
>> substitutions. See below.)
>>
>> On my system /bin/sh is symlinked to /bin/dash. (This is probably the
>> not recognize echo’s -E option.) Have a look at the built-in echo for
>> Dash at its man page. As far as I can see, there is no way to disable
>> the interpretation of "special characters" in Dash. (the echo -E'
>> option is not present.)
>>
>> 2) The solution to this problem is to use printf. Change the line 37:
>>
>>
>> from:
>>      dump() { echo "$output"; } >> to: >> dump() { printf "%s" "$output"; }
>>
>>
>> You may wish to check Chris Johnson’s reply on the stackoverflow page
>> for more. He says, “these variations in the behavior are the primary
>> reason the use of printf is advocated over echo.”
>>
>> http://linux.die.net/man/1/dash
>> http://stackoverflow.com/questions/2931867/echo-e-acts-differently-when-run-in-a-script-by-root-on-ubuntu
>>
>> On Sun, Nov 03, 2013 at 01:59:16AM +0100, Somelauw . wrote:
>>> I created a small latex file test.tex:
>>>
>>> \begin{document}
>>>
>>>         h = \sqrt{n}
>>>
>>> \end{document}
>>>
>>> Now, when I run scope.sh on this I get to see the following (coloured)
>>> output:
>>> % ~/.config/ranger/scope.sh test.tex
>>> -Eegin{document}
>>>    egin{equation}
>>>         h = \sqrt{n}
>>>
>>> \end{document}
>>>
>>> Which obviously isn't correct. I'm not sure, but I think it might be
>>> interpreting ansi colour codes twice somehow.
>>>
>>> By manually parsing scope.sh I figured it should be executing the
>>> following command:
>>> % output=$(/usr/bin/highlight test.tex --out-format=ansi); echo -E$output
>>> which displays the correct (coloured) output for me:
>>> \begin{document}
>>>
>>>         h = \sqrt{n}
>>>
>>> \end{document
>>>
>>> [ truncated ]
>>

`