Communities

Writing
Writing
Codidact Meta
Codidact Meta
The Great Outdoors
The Great Outdoors
Photography & Video
Photography & Video
Scientific Speculation
Scientific Speculation
Cooking
Cooking
Electrical Engineering
Electrical Engineering
Judaism
Judaism
Languages & Linguistics
Languages & Linguistics
Software Development
Software Development
Mathematics
Mathematics
Christianity
Christianity
Code Golf
Code Golf
Music
Music
Physics
Physics
Linux Systems
Linux Systems
Power Users
Power Users
Tabletop RPGs
Tabletop RPGs
Community Proposals
Community Proposals
tag:snake search within a tag
answers:0 unanswered questions
user:xxxx search by author id
score:0.5 posts with 0.5+ score
"snake oil" exact phrase
votes:4 posts with 4+ votes
created:<1w created < 1 week ago
post_type:xxxx type of post
Search help
Notifications
Mark all as read See all your notifications »
Q&A

Welcome to Software Development on Codidact!

Will you help us build our independent community of developers helping developers? We're small and trying to grow. We welcome questions about all aspects of software development, from design to code to QA and more. Got questions? Got answers? Got code you'd like someone to review? Please join us.

Comments on Unset background colour in shell script

Post

Unset background colour in shell script

+3
−0

Inspired by the screenshots in this otherwise unrelated article https://itsfoss.com/tennis-csv-tool/ I'd like to highlight some lines in the terminal output of one of my zsh shell scripts.

Here a simplified version of what I puzzled together (the complete version is at the end of the post):

middeco=$'\n\e[38;5;208;48;5;214m\e[39m\e[38;5;231m'
stopdeco=$'\e[0;38;5;214m\e[0m\e[48;5;X'

file="some text"
echo "${middeco} $file ${stopdeco}"

file="some text some text some text some text some text some text some text some text some text some text some text some text some text text some text some text "
echo "${middeco} $file ${stopdeco}"

file="some text some text some text some text some text some text some text some text some text some text text some text some text "
echo "${middeco} $file ${stopdeco}"

screenshot showing the terminal output. First a short piece of text with orange background colour which fits in one line. Then a long text which spans over two lines. And last a medium length text which also spans two lines, but stops before half the second line is filled. The orange background colour stops with the text, but then restarts towards the end of the line

This works fine for short and long texts, but for medium length texts, the background colour starts to reappear towards the end of the second line (highlighted by the freehand circle in the screenshot).

Is there any way to avoid this?


Environment:

  • macOS Terminal.app v.2.15
  • window width: 96 columns
  • zsh v5.9

Just for completeness here the complete script including the nerdfont characters:

startdeco=$'\n\e[38;5;202m\e[38;5;231;48;5;202m'
middeco=$'\e[38;5;202;48;5;208m\e[38;5;208;48;5;214m\e[39m\e[38;5;231m'
stopdeco=$'\e[0;38;5;214m\e[0m\e[48;5;X'

file="some text"
echo "${startdeco}Reason: ${middeco} $file ${stopdeco}"

file="some text some text some text some text some text some text some text some text some text some text some text some text text some text some text "
echo "${startdeco}Reason: ${middeco} $file ${stopdeco}"

file="some text some text some text some text some text some text some text some text some text some text text some text some text "
echo "${startdeco}Reason: ${middeco} $file ${stopdeco}"
History

1 comment thread

Seems like a typo? (1 comment)
Seems like a typo?
Karl Knechtel‭ wrote 5 months ago

The stopdeco seems to be broken; I don't know what you expect \e[48;5;X to represent. It looks as though you started writing another 8-bit colour code like several others you have already (\e[ to start the command, then 48; as "set background colour" in a colour command; then 5; for 8-bit colour mode; then the palette index, then m to terminate a colour command), but there is no palette index specified and no m terminator. I've never heard of a command starting with \e[ (CSI) and ending with X.

If this isn't a typo (i.e. if the above actually explained something to you about how the codes work; or if there is a sequence ending in X that I don't know about) then I'd encourage you to refine the question even further to focus on what you actually need(ed) answered.