Zsh Mailing List Archive
Messages sorted by: Reverse Date, Date, Thread, Author

Re: print to the terminal in zle



Hey Stephane,

Stephane Chazelas wrote:
> recently, Debian broke some of my scripts using ZLE in `zsh -i` by adding:

An interactive shell for a script? What's the reason for that?

>         function zle-line-init () {
>             emulate -L zsh
>             printf '%s' ${terminfo[smkx]}
>         }
>
> To /etc/zsh/zshrc
>
> That smkx  escape sequence is printed to stdout instead of the terminal.

Which terminal is that? The terminal should definitely react to smkx if
it has that sequence in its terminfo database entry. Are you maybe
changing $TERM to something the terminal cannot handle?

If not, what are you doing that uses zle and is not connected to a
terminal?

> What would be the correct way to do it?

There is also `echoti'. But it barfs if the $TERM for which the terminfo
db query was done doesn't have the key you asked for. But it does
exactly the same as the printf. It outputs the escape sequence to
stdout:

% echoti smkx | cat -v
^[[?1h^[=

> Doing `printf > /dev/tty` would probably do it but it would be
> better I think to be able to write to the fd that zsh currently
> has opened to the terminal (usually 10 if it  was free upon zsh
> startup).
>
> is there a way to do that?

Hm, I don't see how that would be better. Care to elaborate?

> Or an alternative way to set smkx on ZLE init and rmks  on
> zle-finish?

I think smkx/rmkx switching should always be done while the line editor
is active - directly in the zsh/zle module. I think this was discussed,
though, and it was decided to keep it the way it is in order to not
break existing setups.

Regards, Frank

-- 
In protocol design, perfection has been reached not when there is
nothing left to add, but when there is nothing left to take away.
                                                  -- RFC 1925



Messages sorted by: Reverse Date, Date, Thread, Author