Commit Graph

34 Commits

Author SHA1 Message Date
Benjamin Sago
976db01b3e Prefer background colour when painting icons
The rationale here is that there's more of a background colour than the foreground colour when painting text, and having a gap of no background colour in between the icon and the file name looks weird.

Fixes GH-561.
2020-10-24 18:29:28 +01:00
Benjamin Sago
67a6cdd46a Make icon styles appropriate for all file types
exa now bases the icon style for a file on its file name and kind in all cases, rather than just on its file name. This means that directories and symlinks have the correctly-coloured icon.

It also only takes the foreground colour into account while styling the icon, to make sure they're not bold or underlined.

Fixes GH-528.
2020-10-24 18:16:38 +01:00
Benjamin Sago
f1e3e7c7ff Move icon generation into file name module
This commit makes adding icons to file names something that the file name renderer does, rather than something that each individual view does. This is now possible thanks to the previous commit a1869f2, which moved the option to do this into the same module. The repeated code has been removed.

It happens to fix a bug where the width of each column was being incorrectly calculated for the grid-details view, making lines slightly too long for the terminal because the icon wasn't being taken into account.
2020-10-24 18:03:36 +01:00
Benjamin Sago
3419afa7cf Massive theming and view options refactor
This commit significantly refactors the way that options are parsed. It introduces the Theme type which contains both styling and extension configuration, converts the option-parsing process into a being a pure function, and removes some rather gnarly old code.

The main purpose of the refactoring is to fix GH-318, "Tests fail when not connected to a terminal". Even though exa was compiling fine on my machine and on Travis, it was failing for automated build scripts. This was because of what the option-parsing code was trying to accomplish: it wasn't just providing a struct of the user's settings, it was also checking the terminal, providing a View directly.

This has been changed so that the options module now _only_ looks at the command-line arguments and environment variables. Instead of returning a View, it returns the user's _preference_, and it's then up to the 'main' module to examine the terminal width and figure out if the view is doable, downgrading it if necessary.

The code that used to determine the view was horrible and I'm pleased it can be cut out. Also, the terminal width used to be in a lazy_static because it was queried multiple times, and now it's not in one because it's only queried once, which is a good sign for things going in the right direction.

There are also some naming and organisational changes around themes. The blanket terms "Colours" and "Styles" have been yeeted in favour of "Theme", which handles both extensions and UI colours. The FileStyle struct has been replaced with file_name::Options, making it similar to the views in how it has an Options struct and a Render struct.

Finally, eight unit tests have been removed because they turned out to be redundant (testing --colour and --color) after examining the tangled code, and the default theme has been put in its own file in preparation for more themes.
2020-10-22 22:34:00 +01:00
Benjamin Sago
3dc86c99ad New set of lints, and Rust 2018 idioms 2020-10-13 01:36:41 +01:00
Benjamin Sago
f8df02dae7 Batch source formatting
I read through every file and applied a couple of rustfmt suggestions. The brace placement and alignment of items on similar lines has been made consistent, even if neither are rustfmt's default style (a file has been put in place to enforce this). Other changes are:

• Alphabetical imports and modules
• Comma placement at the end of match blocks
• Use newlines and indentation judiciously
• Spaces around associated types
• Spaces after negations (it makes it more clear imho)
• Comment formatting
• Use early-returns and Optional `?` where appropriate
2020-10-10 20:02:55 +01:00
Benjamin Sago
f0c139ca68 Better referencing
This commit makes changes to the way variables are referenced:

• Make types Copy when possible
• Make methods take `self` instead of `&self` where possible (trivially_copy_pass_by_ref)
• Remove unnecessary borrowing (needless_ref)
• Remove unnecessary cloning (clone_on_copy)
• Remove `ref` from match arms where possible (new Rust match ergonomics)
2020-10-10 15:30:19 +01:00
Benjamin Sago
70a30ed683 The Selfening
This commit uses Clippy to fix all the 'use_self' warnings. Using Self instead of the type name has been good Rust style for a while now, and it's become the style I'm used to seeing.
2020-10-10 13:55:26 +01:00
Benjamin Sago
7f9773b68e Merge branch 'zachcoyle-add-nix-icon' 2020-10-08 22:56:24 +01:00
Benjamin Sago
fd3a3d13b7 Merge branch 'add-nix-icon' of https://github.com/zachcoyle/exa into zachcoyle-add-nix-icon
# Conflicts:
#	src/output/icons.rs
2020-10-08 22:56:16 +01:00
Benjamin Sago
9240dbdef3
Merge pull request #734 from imsofi/master
Fix icons for symlinked directories
2020-10-08 22:41:59 +01:00
Benjamin Sago
d03e39c367 Merge branch 'master' of https://github.com/JavaCafe01/exa into JavaCafe01-master
Change a bunch of the existing shell-related icons to the new Unicode escape.
# Conflicts:
#	src/output/icons.rs
2020-10-08 22:30:20 +01:00
Benjamin Sago
1ee8fab7de Merge branch 'master' of https://github.com/DiegoMagdaleno/exa into DiegoMagdaleno-master
# Conflicts:
#	src/output/icons.rs
2020-10-08 22:23:18 +01:00
Benjamin Sago
12e45ac41c Merge branch 'master' of https://github.com/danielbayley/exa into danielbayley-master
# Conflicts:
#	src/output/icons.rs
2020-10-08 22:00:36 +01:00
Zach Coyle
3b1d770f8a
Add Nix Icon 2020-09-26 23:36:24 -04:00
imsofi
0a7ffcd042
Fix icons for symlinked directories 2020-09-08 22:27:39 +02:00
Gokul Swaminathan
43a4fcb27a Updated filetype icons
Added icon for filetype `.sh`
2020-08-14 01:11:44 -07:00
Diego Magdaleno
4085010b36
Add Swift Programming Language icon 2020-08-08 10:12:07 -05:00
ariasuni
dba3f37b0a Fix Clippy lints 2020-05-24 21:43:55 +02:00
Daniel Bayley
f018e093c7 Improve default file icon 2020-05-04 00:06:41 +01:00
Benjamin Sago
c46dfc8836
Merge pull request #619 from aeonzh/master
Better icons spacing
2020-01-19 16:17:13 +00:00
Benjamin Sago
5521f2d4ab
Merge pull request #560 from horosgrisa/master
Add some icons for files
2020-01-19 00:40:13 +00:00
Zheng He Hu
128fadd8bf
Add better icons spacing 2019-12-29 02:52:18 +01:00
Grigorii Horos
f4f83f4d37
Add some icons for files 2019-08-04 05:40:28 +03:00
Grigorii Horos
f9540ead5b
Align file 2019-08-04 01:14:52 +03:00
Grigorii Horos
e45fb7a0a7
Add some icons for files 2019-08-04 00:22:42 +03:00
Grigorii Horos
0d3023657b
Add some icons for files 2019-08-03 23:41:52 +03:00
Bond_009
f599c7ce93 Update to Rust 2018 2019-07-19 20:40:21 +02:00
Alex Soderman
c448b3747f added icons for video/audio/images
remove unnecessary clone
2018-03-27 13:18:49 -04:00
Alex Soderman
fd553227f0 remove underline from icon 2018-03-27 10:58:26 -04:00
Alex Soderman
217d1eefa9 moved icons functionality to grid mode 2018-03-26 17:02:05 -04:00
Alex Soderman
d962889134 Added painting to icon 2018-03-25 12:11:47 -04:00
Alex Soderman
694c4417a0 Implemented icon rendering 2018-03-24 21:18:49 -04:00
Alex Soderman
57e8802977 Added icons mode w/ prepending (icons themselves do not appear yet) 2018-03-22 19:13:02 -04:00