Image

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.

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)

1 answer

+2
−0

Simply remove \e[48;5;X, because it is an unknown escape sequence, and it breaks your terminal


Enhancements:

Remove extra escape sequences that are not needed

There is no need to reset the formatting and then reset some part of the formatting, and you can reset and set the colors as a whole in one complete sequence

In your sample you can do just:

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

In your complete script you can do:

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[38;5;231m'
stopdeco=$'\e[0;38;5;214m\e[0m'
History

0 comment threads

Sign up to answer this question »