Updating `ls` output display in WSL2 and Windows Terminal
Tags: wsl, wsl2, windowsterminal, ubuntu
Published: 2020-07-03 09:13:08

I've recently made the switch from [Cmder](https://cmder.net/) 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:
```Bash
$ 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:
```

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](https://askubuntu.com/questions/466198/how-do-i-change-the-color-for-directories-with-ls-in-the-console)