DEV Community

Cover image for Updating `ls` output display in WSL2 and Windows Terminal
Klee Thomas
Klee Thomas

Posted on

Updating `ls` output display in WSL2 and Windows Terminal

I've recently made the switch from Cmder with PowerShell to Window Terminal with WSL2 as my go to command line environment. It's great except for one thing, I find the way the ls command displays directories really hard to read the highlight colour mixed with the directory name has really low contrast. Changing the theme under the Windows Terminal settings changes the colours as a whole the highlighted style of the directories remains and is still difficult for me to read.

The display style is actually set by the Ubuntu environment. All the configuration for how the ls command should display variables is set in an environment variable LS_COLORS to see what is in there run echo $LS_COLORS the output will look like this:

$ echo $LS_COLORS
rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:mi=00:su=37;41:sg=30;43:ca=30;41:tw=30;42:ow=34;42:st=37;44:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arc=01;31:*.arj=01;31:*.taz=01;31:*.lha=01;31:*.lz4=01;31:*.lzh=01;31:*.lzma=01;31:*.tlz=01;31:*.txz=01;31:*.tzo=01;31:*.t7z=01;31:*.zip=01;31:*.z=01;31:*.dz=01;31:*.gz=01;31:*.lrz=01;31:*.lz=01;31:*.lzo=01;31:*.xz=01;31:*.zst=01;31:*.tzst=01;31:*.bz2=01;31:*.bz=01;31:*.tbz=01;31:*.tbz2=01;31:*.tz=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.war=01;31:*.ear=01;31:*.sar=01;31:*.rar=01;31:*.alz=01;31:*.ace=01;31:*.zoo=01;31:*.cpio=01;31:*.7z=01;31:*.rz=01;31:*.cab=01;31:*.wim=01;31:*.swm=01;31:*.dwm=01;31:*.esd=01;31:*.jpg=01;35:*.jpeg=01;35:*.mjpg=01;35:*.mjpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.svg=01;35:*.svgz=01;35:*.mng=01;35:*.pcx=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.m2v=01;35:*.mkv=01;35:*.webm=01;35:*.ogm=01;35:*.mp4=01;35:*.m4v=01;35:*.mp4v=01;35:*.vob=01;35:*.qt=01;35:*.nuv=01;35:*.wmv=01;35:*.asf=01;35:*.rm=01;35:*.rmvb=01;35:*.flc=01;35:*.avi=01;35:*.fli=01;35:*.flv=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.yuv=01;35:*.cgm=01;35:*.emf=01;35:*.ogv=01;35:*.ogx=01;35:*.aac=00;36:*.au=00;36:*.flac=00;36:*.m4a=00;36:*.mid=00;36:*.midi=00;36:*.mka=00;36:*.mp3=00;36:*.mpc=00;36:*.ogg=00;36:*.ra=00;36:*.wav=00;36:*.oga=00;36:*.opus=00;36:*.spx=00;36:*.xspf=00;36:
Enter fullscreen mode Exit fullscreen mode

This is a list of all the display information on how the different types of files should be displayed. It's in one of the format ext=x;yy;zz: where ext is the file type or extension x is a one digit representation of how to display the font, yy and zz are a 2 digit representation of the colour of the font and background respectively, ; delimits parameters within a set and : delimits between sets. All of the parameters are optional and the system seems to decide on the which to use based on if it's a valid input for that position, eg ext=1: will set the font weight to bold and ext=36: will set the colour to blue.

To make the directories display in a more readable fashion update the other writeable or ow property. This can be overwritten by adding it to the end of the environment variable string. LS_COLORS=$LS_COLORS:'ow36:' to set the out put for other writeable to blue with no background and make the text much more legible.

To make this change across all future terminal windows add export LS_COLORS=$LS_COLORS:'ow=36:' to the end of the ~/.bashrc file using echo "export LS_COLORS=\$LS_COLORS:'ow=36:'">>~/.bashrc. Don't forget to escape the $ or the current value of LS_COLORS will be exported instead of the variable name.

For more information on which codes relate to each colour see this answer on stack overflow

Top comments (0)