Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 23 Feb 2023 19:29:36 +0100
From:      Daniel Tameling <tamelingdaniel@gmail.com>
To:        questions@freebsd.org
Subject:   Re: Cursing the tput utility - the penguin strikes again
Message-ID:  <Y/ewkOQgK4K2K8Ne@mail.gmail.com>
In-Reply-To: <974a81c2-a92d-7f94-5f96-869bddfe21f3@fjl.co.uk>
References:  <974a81c2-a92d-7f94-5f96-869bddfe21f3@fjl.co.uk>

next in thread | previous in thread | raw e-mail | index | archive | help
On Thu, Feb 23, 2023 at 04:45:21PM +0000, Frank Leonhardt wrote:
> I'm looking at another documentation snafu here.
> 
> So there's a tput utility for controlling the terminal in BSD. It takes
> "attributes" and arguments and outputs whatever control codes are needed to
> make the terminal do what you need in a portable way (switch to bold, move
> the cursor, clear to EOL or whatever). It doesn't matter if you're using an
> VT52 terminal or xterm - tput does the translation.
> 
> What the man page talks about as "attributes" are actually tcap codes -
> there's a list of them under "man 5 terminfo". So, to move the cursor to the
> top left use "tcap cm 0 0 " - "cm" being the tcap code for Cursor Move. The
> location and format of the database in the man page is way off mark, but
> never mind.
> 
> So what's my problem?
> 
> Well use the tcap utility on non-BSD platforms and it suddenly doesn't work.
> It turns out that the penguinistas thought using the "Cap Name" instead of
> the "TCap Code" was a good idea. Some of the codes are the same, some are
> not. In fact most are not.
> 
> So for example, "cm" becomes "cup", and "ce" (Clear End-of-line) is "el". On
> a Linux you probably need to use "tcap cup 0 0" instead of "tcap cm 0 0.
> 
> So my question is, assuming one wants one's scripts to be compatible with
> Linux, what's the best way of going about it? Is there some new
> platform-independent way of doing this I'm too old to know about, or do you
> really have to write shell scripts to cope with both by defining the code to
> use up front based on the output of uname?
> 
> I can figure this out - I just want to know if there's a "best practice"
> solution before rolling my own. If anyone reading expresses an interest I
> might put the best answer I can find in a blog post.
> 
> Thanks, Frank.
> 
> 
> 

Did you try using the tput from devel/ncurses instead? I once ran into
a similar problem and if I remember correctly that one works with the
same options as on Linux because it's the one installed there. And it
is frequently already installed as a dependency; the problem is just
that the FreeBSD tput is earlier in PATH.

--
Kind regards,
Daniel



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?Y/ewkOQgK4K2K8Ne>