Commit Graph

1009 Commits

Author SHA1 Message Date
Tercio Gaudencio Filho 3fe35b571f
Change August to Aug. Fix issue #719. 2020-08-28 15:05:57 -03:00
Karey Higuera e8d69fc5e8 Update determine_time_zone function to check TZ
Instead of defaulting immediately to /etc/filename for the timezone, we can first check whether the TZ environment variable is set. If so, we can pull the corresponding timezone file from /usr/share/zoneinfo. Closes #453.
2020-08-26 19:31:48 -04: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
Alexis Bourget f872027cfe Add the documents extension for Apple file formats 2020-08-02 18:50:32 +02:00
Lars Haalck 16046d57de
Add --octal-permissions argument
Using --octal_permissions will insert another column before the existing
permissions where permissions are encoded using octal values as
requested in #316
2020-07-24 13:47:34 +02:00
Alain Schlesser 2ccc8fa093
Add immediate file types for PHP ecosystem
Added the following imemdiate file types for PHP:
- `composer.json` for [Composer](https://getcomposer.org/), the defactor standard package manager for PHP;
- `RoboFile.php`, for [Robo](https://robo.li/), the PHP task runner.

Note: [Phing]() uses `build.xml`, which was already included in the list.
2020-06-21 11:52:33 +02:00
Dmitriy Olshevskiy 45eade9a59 git-feature: display if a file is updated but unmerged (conflicted) 2020-05-29 17:23:22 +03:00
ariasuni dba3f37b0a Fix Clippy lints 2020-05-24 21:43:55 +02:00
Thomas Hurst acb7c49abf Improve handling of unavailable timestamps.
Previously if a timestamp was unavailable, it defaulted to the epoch.
Prior to this it defaulted to a zero duration.

Switch to an Option<SystemTime> and move the handling of unavailable
timestamps to rendering.
2020-05-19 02:31:15 +00:00
Thomas Hurst e54e1f53c8 Make logic a little clearer 2020-05-18 23:23:30 +00:00
Thomas Hurst 86163ab298 Restore ctime handling with correct pre-epoch behaviour 2020-05-18 23:21:56 +00:00
Thomas Hurst d2d2e7325f Correct handling of pre-epoch timestamps
Fix an off-by-one on the seconds when subseconds are present, and
correct display of nenoseconds, which are of course inverted due to the
internal value being negative.
2020-05-18 21:25:07 +00:00
Thomas Hurst bc830b9158 Handle timestamps before UNIX_EPOCH (#658)
Instead of returning a Duration since the epoch from file metadata,
which cannot represent times before it, return the SystemTime directly.

Move conversion closer to where it's needed, and perform it infallibly.
2020-05-18 21:03:44 +00:00
Daniel Bayley f018e093c7 Improve default file icon 2020-05-04 00:06:41 +01:00
Kat Marchán 7f717c3af3 checkpoint 2020-05-02 19:00:06 -07:00
ariasuni 5a84953b4e Fix typos in code documentation 2020-04-19 06:54:06 +02:00
ariasuni 046af5cdd1 Use git2 instead of parsing .gitignore for --git-ignore
Fix #636
2020-04-19 05:52:35 +02:00
Laurent Arnoud bd655f9c20
Remove unused imports on fs/file.rs 2020-01-19 18:40:34 +01:00
Benjamin Sago 490d9680c2 Merge branch 'fix-handling-maybe-unsupported-time-metadata' of https://github.com/ariasuni/exa into ariasuni-fix-handling-maybe-unsupported-time-metadata
# Conflicts:
#	src/fs/file.rs
#	src/options/filter.rs
#	src/options/view.rs
2020-01-19 16:46:51 +00:00
Benjamin Sago df0d30e966
Merge pull request #624 from ericbn/filetypes
Add pom.xml and zwc filetypes
2020-01-19 16:20:59 +00:00
Benjamin Sago c46dfc8836
Merge pull request #619 from aeonzh/master
Better icons spacing
2020-01-19 16:17:13 +00:00
Eric Nielsen 501fbf7182 Add pom.xml and zwc filetypes
pom.xml (Maven) is popularly used for Java projects, along with the
already existing build.xml (Ant) and build.gradle (Gradle) immediate
files.

zwc stands for Zsh Word Code and contains compiled Z Shell scripts or
functions.
2020-01-19 09:08:07 -05:00
Benjamin Sago eaece8cc7a
Merge branch 'master' into customize-size-scale-colours 2020-01-19 09:57:58 +00:00
Benjamin Sago 2382be7524
Merge branch 'master' into add-missing-flags-in-docs 2020-01-19 09:40:22 +00:00
Benjamin Sago 352afd40c3
Merge pull request #598 from FliegendeWurst/s-none-sorting
Optimize file table creation, fixes #484 as a side-effect
2020-01-19 09:32:17 +00:00
Benjamin Sago 416818fda2
Merge pull request #597 from FliegendeWurst/bugfixes
Two small bugfixes
2020-01-19 00:55:58 +00:00
Benjamin Sago d13cce7d94
Merge pull request #593 from ariasuni/add-new-filetypes
Add a few frequent filetypes
2020-01-19 00:53:34 +00:00
Benjamin Sago 3d82fc7683
Merge pull request #587 from brown121407/master
Fix "trait objects without an explicit `dyn` are deprecated"
2020-01-19 00:50:32 +00:00
Benjamin Sago 64bd1b9a55
Merge pull request #584 from msehnout/fix-panic-on-broken-symlink
fix panic on broken symlink in git repository
2020-01-19 00:48:07 +00:00
Benjamin Sago 8a711358ee
Merge pull request #579 from ericbn/unused-code
Remove unused code in File#get_source_files
2020-01-19 00:42:44 +00:00
Benjamin Sago 1f167dda41
Merge pull request #577 from 0rvar/feature/suppress-columns
Add support for suppressing table columns
2020-01-19 00:41:27 +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
Benjamin Sago c5a1e8e103
Merge pull request #557 from BrennanMcDonald/master
Added checks for modified/accessed/created metadata
2020-01-19 00:39:40 +00:00
Benjamin Sago 404ed20fd3
Merge pull request #552 from j-tai/icons-1-col
Display icons when file names are too long for grid
2020-01-19 00:20:18 +00:00
Benjamin Sago 4dab6237f1
Merge pull request #516 from VichoReyes/dothidden
Include symlinks to dirs when grouping dirs
2020-01-19 00:16:06 +00:00
Benjamin Sago e198cac3a7
Merge pull request #509 from emgelb/master
Convert default formatting so single-digit hour times are 0-padded
2020-01-19 00:05:07 +00:00
Benjamin Sago 8ccff86940
Merge pull request #450 from Bond-009/2018
Update to Rust 2018
2020-01-18 23:23:43 +00:00
Benjamin Sago 44664bf757
Merge pull request #289 from mqudsi/optional_args
Optional args support
2020-01-18 23:22:17 +00:00
Zheng He Hu 128fadd8bf
Add better icons spacing 2019-12-29 02:52:18 +01:00
Orvar Segerström 250104c9da Add new suppress flags to --help 2019-12-23 12:08:03 +01:00
ariasuni a636d08f8b Fix handling of potentially unsupported time metadata
- Checking on a directory doesn’t tell us if supported elsewhere
(some filesystems, like tmpfs, don’t support created time)
- We want to be able to display a column even if some subfiles or
subdirectories don’t support it

So now if unsupported a time of zero is used, and displayed as `-`
2019-12-20 05:37:29 +01:00
Maarten de Vries 3ef6195ffd Allow customizing size scale colours.
Also adjust the selection of the colour depending on the scale used.
 * With decimal prefixes colours change on powers of 1000.
 * With binary or no prefixes colours change on powers of 1024.
2019-11-17 16:49:51 +01:00
ecanja aded70c98e Add missing flags in documentation files
- Update completions
  - fish		(-D)
  - zsh			(-D, --changed)
- Update man page	(--changed)
- Update README		(-F, --changed, --icons)
- Update help text	(--changed)
2019-11-12 01:18:51 +01:00
FliegendeWurst bbd6db3687
Optimize file table creation, fixes #484 as a side-effect 2019-10-12 13:27:59 +02:00
FliegendeWurst 6010ed5213
Use the long view when stdout isn't a terminal and a long grid view was requested (fixes #522) 2019-10-12 11:58:31 +02:00
FliegendeWurst b5b731071c
Escape the delete character in filenames 2019-10-12 11:42:12 +02:00
ariasuni efbd46351c Add a few frequent filetypes 2019-10-03 22:45:21 +02:00
Alexandru-Sergiu Marton f6071e9c46 Fix "trait objects without an explicit `dyn` are deprecated" 2019-10-01 18:55:09 +03:00
Martin Sehnoutka a7a8e99cf3 fix panic on broken symlink in git repository
The issue including reproducer is described here:
https://github.com/ogham/exa/issues/526
This commit includes proposed change as well as integration test.
2019-09-15 16:56:58 +02:00
Eric Nielsen cb933a6f62 Remove unused code in File#get_source_files
as the "class", "elc", "hi", "o", "pyc" extensions are first tested in
FileExtensions#is_compiled, so removed code is redundant and neved
called.
2019-09-10 09:51:08 -05:00
Vicente Reyes 69a7e53ee3
include symlinks to dirs when grouping dirs
When using the option --group-directories-first, symlinks to directories
are now first too.
2019-09-04 14:16:16 -04:00
Orvar Segerström 925f5173c1 Add support for suppressing table columns 2019-08-29 14:34:30 +02: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
Brennan McDonald 215b779d35
Fixed copy-paste bug in access times. 2019-08-03 11:07:16 -07:00
Brennan McDonald f19f7be726
Updated file.rs
Added checks to `file.rs` to ensure that file's metadata exists after `UNIX_EPOCH`.
If the file was accessed/modified/created after UNIX_EPOCH, the current day is displayed.
2019-07-31 15:43:31 -07:00
James Tai dd9dffff8c Display icons when file names are too long for grid
Fixes ogham/exa#548
2019-07-30 18:33:12 -07:00
Bond_009 8b60285320 Fix build without default features 2019-07-19 20:40:21 +02:00
Bond_009 f599c7ce93 Update to Rust 2018 2019-07-19 20:40:21 +02:00
Oleksii Filonenko 58c821be6e
Add documentation for --icons flag
- Update completions
  - fish
  - zsh
- Update man page
- Update help text
2019-07-19 09:58:50 +03:00
Michael Hackner e3fc2de088 Add BUILD.bazel as another Bazel file type
This seems to be preferred now, though both are valid.
2019-07-17 01:05:33 -07:00
Benjamin Sago f1a5b646fe
Merge pull request #378 from LlinksRechts/master
fixed git status not working in directories containing '../'
2019-07-15 04:00:11 +01:00
Benjamin Sago 9497b30b33 Merge branch 'glyphs' of https://github.com/asoderman/exa into asoderman-glyphs
# Conflicts:
#	src/options/flags.rs
#	src/options/view.rs
#	src/output/grid.rs
2019-07-15 03:54:31 +01:00
Benjamin Sago 081bce0479 Merge branch 'fix-warnings-and-rust-2018' of https://github.com/ariasuni/exa into ariasuni-fix-warnings-and-rust-2018
# Conflicts:
#	src/fs/dir.rs
2019-07-15 03:42:33 +01:00
Benjamin Sago 9e1200f9b7 Fix failing tests 2019-07-15 03:37:05 +01:00
Benjamin Sago faed8f9b82
Merge pull request #457 from ariasuni/fix-sorting-by-created-time
Fix sorting by created time
2019-07-15 03:30:52 +01:00
Benjamin Sago df9b32c892 Fix a couple warnings 2019-07-13 21:17:48 +01:00
Benjamin Sago 6cd52163f7
Merge pull request #489 from benmezger/patch-1
Feat: add JPF to image filetype
2019-07-13 21:16:50 +01:00
Benjamin Sago e936d7e09f Prevent infinite loop with -aaR
This happened because exa would recurse into `.` over and over again. There was nothing distinguishing the pseudo-entry for `.` that was being added by `--a` from a `.` passed in on the command-line, so it was looping forever.

It gets fixed by having the File value keep track of whether it’s an --all --all entry, and not recursing into directories with this field set.

Fixes #515
2019-07-13 21:14:42 +01:00
E.M. Gelblicht 1bf9e397e5 converted default formatting so single-digit hour times are 0-padded 2019-06-10 17:34:21 -07:00
Bernardo Meurer 9660048b41
Replace trim_left_matches with trim_start_matches 2019-04-16 22:54:42 -07:00
Bernardo Meurer 2d0768c8d2
Fix usages of number_prefix 2019-04-16 22:54:06 -07:00
Ben Mezger (seds) 99167429ed
Feat: add JPF to image filetype 2019-04-03 15:10:03 -03:00
ariasuni f0e7321506 Fix and add tests 2019-03-23 17:23:43 +01:00
ariasuni 39a49a3d36 Check if the sort field is supported by the OS 2019-03-23 17:23:43 +01:00
ariasuni 56717c7336 Add “changed” sort option, to replace old incorrect “created” 2019-03-23 17:23:40 +01:00
ariasuni b0da0c9055 Use correct metadata for created time 2019-03-23 17:18:18 +01:00
ariasuni 49ed3ed0f8 Fix clippy warnings and explicitely ignore a few, fix future deprecation 2018-12-16 20:50:37 +01:00
Benjamin Sago 058b4a57bd Bump users crate version
And remove an unnecessary allocation while we’re at it. Fixes #442
2018-12-07 00:59:05 +00:00
Benjamin Sago 2d8d8d9a5c
Merge pull request #444 from ariasuni/display-git-ignored-state
Display if a file is ignored by git
2018-12-06 21:17:48 +00:00
ariasuni 649744dc82 Use more accurate time to fix inconsistent sorting 2018-11-22 18:10:58 +01:00
ariasuni 80b0d9dd0d Display if a file is ignored by git 2018-11-20 18:12:38 +01:00
Benjamin Sago efb0ad522c
Merge pull request #435 from teresy/shorthand-fields
refactor: use shorthand fields
2018-11-13 08:12:16 +00:00
teresy d63917af47 refactor: use shorthand fields 2018-11-06 17:43:01 -05:00
James Reed 7218fb4b6a
Document only-dirs option 2018-10-26 17:21:31 -06:00
James Reed 89a6e14e15
Move level option to correct group 2018-10-26 17:15:48 -06:00
Benjamin Sago 57e4c08411 Highlight README~ as temp, not immediate
Fixes #313.
2018-10-14 16:21:13 +01:00
Benjamin Sago c2bb986618 Replace Default impls that use state with fns
The Default impls for DefaultFormat and LoadFormat were originally called ‘new’, to which Clippy suggested that they be changed. But as these functions change based on what the year is, a function called something other than ‘new’, like ‘load’.
2018-10-13 22:15:10 +01:00
Benjamin Sago ecc4138d56 Merge branch 'clippy_fixes' of https://github.com/thibran/exa into thibran-clippy_fixes
# Conflicts:
#	src/options/view.rs
#	src/style/lsc.rs
2018-10-13 22:07:35 +01:00
Benjamin Sago 8b4ebc2d6b Merge branch 'master' of github.com:ogham/exa 2018-10-08 04:00:52 +01:00
Benjamin Sago dc2009aef4 Parse more ANSI codes
Including more styles and 24-bit foregrounds and backgrounds. Also a comment about how this is kicking the can down the road.

Fixes #347, mostly.
2018-10-08 04:00:09 +01:00
Benjamin Sago ce3f05c4f5 Allow more zero padding in ANSI code parsing
Fixes #352
2018-10-08 03:01:15 +01:00
Lucas Rooyakkers 9b446c03e8 Add support for Apple's M4V format 2018-10-02 01:47:51 -04:00
Benjamin Sago a4d9b5314f
Merge pull request #405 from Don42/feature_only_dirs
Flag for only showing directories
2018-09-27 21:01:15 +01:00
Benjamin Sago 3d796cf470
Merge pull request #397 from mopp/use_time_style_env_var
Use `TIME_STYLE` environment variable
2018-09-27 20:58:44 +01:00
Benjamin Sago a8b5534d53
Merge pull request #373 from doy/directory-symlink
make exa on symlinks to directories show their contents
2018-09-26 20:58:18 +01:00
Marco 'don' Kaulea 5dffaf3076 Add period for consistency 2018-09-03 09:20:03 +02:00
Marco 'don' Kaulea 33167a2282 Add short option for only-dirs 2018-07-13 17:38:36 +02:00
Marco 'don' Kaulea 054cac6b82 Add option to only display directories
This allows printing directory trees without any files, only
showing the structure.
I haven't decided on a letter for the short option.

Implements #401
2018-07-12 18:51:14 +02:00
Thibaut Brandscheid 755876e9b6 fix most clippy warnings 2018-06-19 17:17:39 +02:00
mopp 991781070e refers `TIME_STYLE` environment variable if it exists and the argument is not given 2018-06-15 04:38:32 +09:00
Benjamin Sago a3b2f2b3f4
Merge pull request #384 from spk/update-log
Update log to 0.4 and env_logger to 0.5
2018-05-28 10:50:23 +02:00
Benjamin Sago 55048f7ee2
Merge pull request #380 from kornelski/master
Replaced try!() with ?
2018-05-28 10:50:06 +02:00
Benjamin Sago 5438f949c9
Merge pull request #311 from martinlindhe/master
adjust some spelling
2018-05-28 10:47:38 +02:00
Laurent Arnoud eff7122bb2
Update log to 0.4 and env_logger to 0.5
No change needed for ansi_term to 0.11
2018-05-03 19:40:04 +02:00
Kornel 2976b487ab Replaced try!() with ? 2018-04-18 01:16:32 +01:00
Lukas Rysavy 2fc56d45ca fixed git status not working in directories containing '../' 2018-04-13 22:23:46 +02:00
Alex Soderman f96a45f45e fixed icons for grid details mode 2018-04-01 20:43:08 -04:00
Alex Soderman 68954f9142 Added --icons for oneline mode 2018-04-01 19:00:27 -04:00
Alex Soderman 5991bd4ab7 Added icons for --long view 2018-04-01 18:28:31 -04:00
Jesse Luehrs 9bb62fbd63 make exa on symlinks to directories show their contents
right now, `exa foo` and `exa foo/` behave differently, which is
confusing.

fixes https://github.com/ogham/exa/issues/192
2018-03-31 05:00:03 -04: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
Alex Soderman 67f2fcc748 Added --icons flag 2018-03-20 22:30:41 -04:00
Benjamin Sago 63a1035158
Merge pull request #355 from alexmaco/performance_tweaks
Create worker threads only once (for performance)
2018-03-16 17:23:58 +00:00
Benjamin Sago 9896f9ed78
Merge pull request #343 from BenWhitehead/mix-hidden-sorting
Add new sort option `.name` and `.Name`
2018-03-16 16:46:55 +00:00
Benjamin Sago b16a78942c
Merge pull request #366 from dguo/ts-extension
Don't treat .ts as a video file extension
2018-03-15 20:42:26 +00:00
Benjamin Sago 3614f5513d
Merge pull request #356 from joshleeb/highlight-lowercase-readme
Case Insensitive README.* Files As immediate
2018-03-15 20:41:44 +00:00
Danny Guo e711dbc0b6
Don't treat .ts as a video file extension
It's arguably more frequently used for TypeScript files.
2018-03-14 20:34:46 -04:00
Benjamin Sago f757300718 Upgrade libgit2
The ogham/git2-rs repository that exa uses in the Vagrant VM has also been updated. The only casualty was that some constants got namespaced.
2018-03-11 11:25:06 +00:00
Benjamin Sago 48cdf22f46
Merge pull request #345 from ogham/exa/remove-unused-import
remove unused import
2018-03-11 09:43:33 +00:00
Benjamin Sago 9bd0334d1a
Merge pull request #342 from ogham/exa/patch-1
Add Bazel and ANT files to immediate files types
2018-03-11 09:41:09 +00:00
Josh Leeb-du Toit d9c9dbe89e Case insensitive README.* files are immediate
Files with the prefix `README` are now classified as immediate, meaning
they will be highlighted amongst other things, in a case insensitive
way.
2018-02-15 21:55:52 +11:00
Alexandru Macovei 8cbde76b4c Create worker threads only once (for performance)
This improves performance by a factor of at least 2 in large --tree workloads by avoiding the repeated creation/destruction of the pool and containing threads.
Cycling pools also encountered lots lock contention, which accounted for most of the time saved by reusing a single pool.
2018-02-14 03:59:46 +02:00
Ryan Leung e1a4ed87f2 add #[allow(unused)] for compatibility 2018-02-01 14:52:01 +08:00
Ryan Leung 7fb0347e93 remove unused import 2018-01-31 15:05:20 +08:00
BenWhitehead a156d96768 Add new sort option `.name` and `.Name`
Add two new sort options `.name` and `.Name` which with ignore a leading
`.` if present on the file name before sorting according to `name` and
`Name`.

This new sort is convenient if you want to list hidden and unhidden
files sorted together.
2018-01-30 15:01:56 -08:00
Marco Farrugia c635031661
Add Bazel and ANT files to immediate files types 2018-01-28 19:26:37 -05:00
ne-sted 5fae489717 Update filetype.rs
add `zst` extension
2017-11-20 13:50:08 +02:00
Martin Lindhe 7b1ee01eb5 adjust some spelling 2017-10-31 06:24:31 +01:00
Benjamin Sago c7497f3778 Display more information for non-release releases 2017-10-08 20:09:46 +01:00
Benjamin Sago e154b58268 Move EXA_DEBUG variable to vars file 2017-10-08 17:24:50 +01:00
Benjamin Sago a45bcfe058 Rename broken_arrow to broken_symlink 2017-10-08 17:08:07 +01:00
Benjamin Sago 91334d601c Use colour traits when possible 2017-10-08 17:08:07 +01:00
Benjamin Sago 59d9e90f20 Replace “mi” colour with “bO” overlay
Fixes #288, but more-or-less as a side-effect.

The “mi” key in LS_COLORS was meant to be used for a missing link path, but it wasn’t really used like that. There was also a bug where control characters in a broken symlink’s path were assumed to be underlined, because that’s what happened in the default colour scheme, but this assumption doesn’t hold when colours were disabled.

The solution to these was not to introduce another configurable colour code, but to start using _overlays_ to alter a bunch of colours at once. The “mi” code will have to be added back later.
2017-10-08 17:08:07 +01:00
Chet Gurevitch afc9657434 Fix LS_COLORS 01 and 04 detection 2017-10-05 20:55:43 -07:00
Benjamin Sago 9cfc70f4c0 Further shortening 2017-10-02 09:45:55 +02:00
Benjamin Sago c7748fb1f0 Make these lines less long 2017-10-02 09:43:49 +02:00
Benjamin Sago 937b325e3a Add some ignored tests for sub-globbing 2017-09-30 09:17:29 +02:00
Benjamin Sago 166d1f5e5a Glob pattern ignore tests 2017-09-30 09:17:29 +02:00
Benjamin Sago 541e6855f2 Test some actual ignore caches 2017-09-30 09:17:29 +02:00
Benjamin Sago 476299e21f A note to my future self
It’s important to capture the current behaviour, even if it ends up being totally wrong.
2017-09-30 09:17:29 +02:00
Benjamin Sago 108dc80944 Ignore comments and blank lines when ignoring 2017-09-30 09:17:29 +02:00
Benjamin Sago 7b5b02d9f1 Extract function for parsing an ignore file 2017-09-30 09:17:29 +02:00
Benjamin Sago 1f23f3f0cc Don’t ignore .gitignore errors 2017-09-30 09:17:29 +02:00
Benjamin Sago 3d3ee8fd66 Typo fix 2017-09-30 09:17:29 +02:00
Benjamin Sago 827aa8bfc3 Ignore files matched in .gitignore
This doesn’t *completely* work: it seems to have trouble with ignored paths beginning with slashes, possibly amongst others. Also, .gitignore scanning could be made more efficient.
2017-09-30 09:17:29 +02:00
Benjamin Sago b95446d834 Thread an ignore cache through the program
!
2017-09-30 09:17:29 +02:00
Benjamin Sago 07443e87ba Add a --git-ignore option that doesn’t do anything
!!
2017-09-30 09:17:28 +02:00
Clar Charr eda3e56e4c Add .bk extension to is_temp. 2017-09-17 23:08:25 -04:00
Mahmoud Al-Qudsi ad02241ac2 Merge branch 'master' into optional_args 2017-09-16 14:28:24 -05:00
Benjamin Sago 4819c4721b Fix compile error with --no-default-features
Fixes #283. Also, have Travis compile without default features either, so I get warned the next time I break it.
2017-09-14 11:33:24 +01:00
Benjamin Sago c475cccce4 Flip the new/old order, and add suggestion for -lt
I changed my mind about which way round sorting by “newest” or by “oldest” should actually go. If you’re listing a large directory, you see the last lines of the output first, so these files should be the ones with the largest whatever the sort field is. It’s about sorting *last*, not sorting *first*. Sorting by size wouldn’t say “sorts smallest files first”, it would say “sorts largest files last”. Right?

Also, add a new suggestion that warns against “ls -lt”.
2017-09-14 09:18:17 +01:00
Benjamin Sago a8bf990674 Tie value suggestions to their arguments
This commit changes the definition of Arg so that it knows about which values it can accept, and can display them in the help text. They were already being shown in the help text, but they were passed in separately, so one argument could show two different sets of options if it wanted. Now, the argument itself knows whether there are suggestions, so it doesn’t have to be passed in separately.

This means we can use it for other things, including listing choices when an option is missed out, without having to repeat the list.

With Misfire::BadArgument now only having two fields, it’s not worth using a constructor function anymore.
2017-09-14 01:22:37 +01:00
Mahmoud Al-Qudsi 36cf5df044 Add support for optional argument/flag with optional value
TakesValue::Optional introduced which allows for an optional flag with
an optional value (equivalent to getopts' optflagopt mode).

Can be used where a default value for a modifier could exist, but the
user might prefer to override.

Will be used to implement #284, permitting --time to default to "sort by
modification date" for compatibility with GNU/posix ls but keeping
support for exa's previous behavior.
2017-09-13 18:48:59 -05:00
Benjamin Sago 1824313cda Put misfire.rs in a nicer order
The main type is now at the top.
2017-09-13 23:49:30 +01:00
Benjamin Sago 43bbf00478 Show a warning when running ‘exa -ltr’
Raised in #243 and #284. exa isn’t able to override the -t option like this, so the least it can do is detect that case (which is going to be an error case anyway) and show a suggestion.
2017-09-13 23:47:19 +01:00
Benjamin Sago 0fefc78cbb Add more modified date aliases
I don’t really see the modified date as the *modified* date, rather just the *date* field, because it’s the date field I refer to like 99.9% of the time. So now it has aliases to match.

Also are included are aliases for the reverse order, because I’d rather write “new” than “the reverse of old”.
2017-09-13 23:26:06 +01:00
Benjamin Sago 19b7780755 Fix typo in error message
It said “(Choices: (choices: this, that, other))” instead of “(choices: this, that, other)”. Also improve the same error elsewhere: options more have ‘settings’ than ‘values’.
2017-09-13 22:37:51 +01:00
Benjamin Sago 68e70bf036 Reword this comment 2017-09-13 22:12:11 +01:00
Benjamin Sago dc45332d7b Implement file name colouring in {exa,ls}_colors
This commit adds to the parsing of the LS_COLORS and EXA_COLORS variables so that non-two-letter codes (keys other than things like ‘di’ or ‘ln’ or ‘ex’) will be treated as file name globs, and get used to colour files accordingly.

Fixes #116 for good.
2017-09-13 08:51:57 +01:00
Benjamin Sago b86074d63b Rename Style to Styles to avoid a name clash 2017-09-13 08:44:59 +01:00
Benjamin Sago 28b4b672d4 Move FileStyle to the same options file as Colours
They are going to be deduced together (from the same environment variable) so it makes sense to put them in the same file first.
2017-09-03 19:50:40 +01:00
Benjamin Sago 4507edd734 256 colour support in ls_colors
This is more annoying than it should be because it has to work with Styles rather than with strings, which means parsing them, and parsing is always tricky business.
2017-09-03 17:05:38 +01:00
Benjamin Sago c60ea36a31 Allow --git --tree, too
This works by checking if any of the (immediate) files being listed are under Git, and hiding the column if all aren’t.
2017-09-02 12:53:08 +01:00
Benjamin Sago 9cda05df20 Only display Git column for directories with repos
This fixes the previous commit.
2017-09-02 00:04:22 +01:00
Benjamin Sago 558b13880b Don’t pass Dirs to the Table
A Table now doesn’t need to know about (or even import) Dir, because we can just not pass the Git reference in if it shouldn’t be using it.
2017-09-01 22:52:13 +01:00
Benjamin Sago f3c7fa500f Fix TableOptions Debug
The only field we can really show is the list of columns, and that happened to be useful this one time, so it might as well get shown!
2017-09-01 22:48:42 +01:00
Benjamin Sago 45a807a14f Redo Git implementation to allow --git --recurse
This is all a big commit because it took a lot more work than I thought it would! The commit basically moves Git repositories from being per-directory to living for the whole life of the program. This allows for several directories in the same repository to be listed in the same invocation; before, it would try to rediscover the repository each time! This is why two of the tests “broke”: it suddenly started working with --recurse.

The Dir type does now not use Git at all; because a Dir doesn’t have a Git, then a File doesn’t have one either, so the Git cache gets passed to the render functions which will put them in the Table to render them.
2017-09-01 19:13:47 +01:00
Benjamin Sago 3d4ddf8af6 Group Git repositories by their workdir
This uses the Git module’s newfound powers of getting actual GitRepo values from a factory to cache repositories a bit more. Now, when querying two directories under the same repository, it’ll open both, see that they have the same workdir, and only use the first one.
2017-08-28 23:52:21 +01:00
Benjamin Sago 62075fe984 Code and logging fix-ups 2017-08-28 18:40:52 +01:00
Benjamin Sago 040dbb2414 Use a global Git cache
This commit adds a cache for Git repositories based on the path being queried.

Its only immediate effect is that when you query the same directory twice (such as /testcases/git /testcases/git), it won’t need to check that the second one is a Git directory the second time. So, a minuscule optimisation for something you’d never do anyway? Wrong! It’s going to let us combine multiple entries over the same repository later, letting us use --tree and --recurse, because now Git scanning is behind a factory.
2017-08-28 18:11:38 +01:00
Benjamin Sago d86fc4286b \t and \s+$ 2017-08-26 23:54:12 +01:00
Benjamin Sago f6b7b7f298 Add exa_colors to make exa themable
This adds support for the EXA_COLORS environment variable, and defines a bunch of exa-specific two-letter codes that I pretty much made up arbitrarily that control parts of the interface.

Fixes #160, which I didn’t expect to actually fix this release cycle, but it unexpectedly became easy to do!
2017-08-26 23:17:07 +01:00
Benjamin Sago 504a0dd6b7 Stop collecting ls_colors into a hashmap
LSColors used to be built up from an iterator, and then queried later. But because the resulting HashMap gets queried in serial anyway, we might as well pass in a callback instead, saving the allocation.

This is also technically a little faster because styles that don’t map to anything (like `zz`) are no longer parsed.
2017-08-26 22:33:16 +01:00
Benjamin Sago dd838c2dc1 Move Colours and LSColors to their own module
The ‘options’ module is allowed to depend on ‘style’, but ‘options::render’ is not.
2017-08-26 21:40:37 +01:00
Benjamin Sago 945fa1e83d Isolate and document the environment variables 2017-08-26 21:36:27 +01:00
Benjamin Sago bf8ff3675b Move Vars into its own module 2017-08-26 20:48:51 +01:00
Benjamin Sago bfb8a5a573 Extract trait above file name colours
This commit meddles about with both the Colours and the FileExtensions.

Even though all the renderable fields were turned into traits, the FileName struct kept on accessing fields directly on the Colours value instead of calling methods on it. It also did the usual amount of colour misappropriation (such as ‘punctuation’ instead of specifying ‘normal_arrow’)

In preparation for when custom file colours are configurable (any day now), the colourise-file-by-kind functionality (links, sockets, or directories) was separated from the colourise-file-by-name functionality (images, videos, archives). The FileStyle struct already allowed for both to be separate; it was only changed so that a type other than FileExtensions could be used instead, as long as it implements the FileColours trait. (I feel like I should re-visit the naming of all these at some point in the future)

The decision to separate the two means that FileExtensions is the one assigning the colours, rather than going through the fields on a Colours value, which have all been removed. This is why a bunch of arbitrary Styles now exist in filetype.rs.

Because the decision on which colourise-file-by-name code to use (currently just the standard extensions, or nothing if we aren’t colourising) is now determined by the Colours type (instead of being derived), it’s possible to get it wrong. And wrong it was! There was a bug where file names were colourised even though the rest of the --long output wasn’t, and this wasn’t caught by the xtests. It is now.
2017-08-26 20:43:47 +01:00
Benjamin Sago e5e23e23c7 Use the file type colour trait methods 2017-08-26 15:29:39 +01:00
Benjamin Sago 276d18cf7c Give block and character devices different colours
There are now two device colours instead of one. Even though they’re both set to the same style for the default colour set, LS_COLORS allows the two to look different, so exa has to support it too.

It’s probably a good idea to support it anyway.
2017-08-26 14:30:33 +01:00
Benjamin Sago bd8e9d819c Add more ls_colors colours 2017-08-26 14:04:49 +01:00
Benjamin Sago d517e9e12b Split FileTypes into types and kinds
This separates the colours to give to files with different filesystem types (directories, links, sockets) from files with different names or extensions (images, videos, archives).

I’m not 100% sure I’ve got the terms “kind” and “type” the right way round, but whatever.

This was done because colouring files based on their name is going to be handled differently and extensibly from colouring files based on what the filesystem thinks.
2017-08-25 17:50:22 +01:00
Benjamin Sago fb3395883e Start actually parsing ls_colors
So far it only changes the colour of a directory, but it’s a start.
2017-08-25 17:43:36 +01:00
Benjamin Sago 59edc3b6ea These tests don’t need a type
Because the macros are now specialised to the type that’s being deduce-d, we don’t need to specify what the type is every time.
2017-08-25 09:07:28 +01:00
Benjamin Sago 974ddc0e63 Tests for turning colours on/off 2017-08-25 09:03:47 +01:00
Benjamin Sago a581c871ed Split the colours tests in two
The TerminalColours tests used half the macros, and the Colours tests used the other half. Now only the macros used are actually in scope.
2017-08-25 08:53:35 +01:00
Benjamin Sago 4907565baf Move colour options to their own file 2017-08-24 23:38:26 +01:00
Benjamin Sago 30f3c6eb00 Strict mode and tests for colour scale 2017-08-23 11:45:29 +01:00
Benjamin Sago 8b0e483c0f More ls_colors parsing 2017-08-22 18:13:21 +01:00
Benjamin Sago 5e0003784d Start writing ls_colors parser 2017-08-20 22:59:22 +01:00
Benjamin Sago b2201b72d5 A tree only needs the tree style
Now a tree only has access to the one style that’s used for colouring tree punctuation, rather than every style, 99% of which it wouldn’t ever use.
2017-08-20 21:39:52 +01:00
Benjamin Sago 9b24649d68 Reverse what knows how to render a cell
This commit adds many traits, all named ‘Colours’, to the code. Each one asks for a colour needed to render a cell: the number of links asks for colours for the number and the multi-link-file special case; the file size asks for number, unit, punctuation, and device ID colours, or it can do a scale with its own colours, however it wants.

This is a step towards LS_COLORS compatibility, believe it or not. If a text cell in a column doesn’t depend on Colours to render itself, then the source of the colours is open-ended.

I am glad to have not needed any test changes here.
2017-08-20 20:29:23 +01:00
Benjamin Sago 0b30864f10 \t 2017-08-20 18:14:40 +01:00
Benjamin Sago 57c647fee5 Default to sorting case-insensitively
This was touched on in #209 where I got the docs wrong compared to the actual implementation, but after thinking about it, I’d like to switch it round. (The --sort=Name and --sort=name difference has also been switched.) See the big ol’ comment for my reasons.

Because this changes core functionality, it broke many, many tests. You can see that this doesn’t change the -star- tests because the shell, rather than exa, orders the globbed files.

I kept on forgetting which way round Sensitive and Insensitive went, so I named them after the effect they have.
2017-08-20 17:33:39 +01:00
Benjamin Sago 965bc9e37a Print the parsed options to the debug log
It adds a lot of lines to the output, so I’m not convinced it’s worth it, but…
2017-08-19 22:39:34 +01:00
Benjamin Sago 4c16f50565 Fix an error being displayed weirdly
The Debug impl was being used instead of the Display one. Also, remove the full stops from the ends of all the error messages because I’ve decided it looks weird.
2017-08-19 22:17:53 +01:00
Benjamin Sago 1081762657 Basically, log before doing fs operations 2017-08-19 13:53:33 +01:00
Benjamin Sago 014e179abf One more 2017-08-19 12:22:17 +01:00
Benjamin Sago 6fbb0b8626 More logging things that shouldn’t happen 2017-08-19 11:15:17 +01:00
Benjamin Sago a5e177afe5 Now we can log OS error 95
The error in #178 was being hidden from output most of the time, and because exa isn’t a GUI program, there’s nowhere it can really dump log output like this. Now that users can opt in with the EXA_DEBUG variable, there is a place it can go.

Also stop the ERROR log level being printed by default.
2017-08-19 11:03:53 +01:00
Benjamin Sago 377260d88c Start logging at opportune moments
I want to be very careful when doing the “--git and --tree don’t work together” one to not search for more Git repositories than I should. Being able to log when a repository is looked up and also switch that functionality on and off would help with that.
2017-08-19 10:06:43 +01:00
Benjamin Sago bcf5213cc8 Tie the row threshold to EXA_GRID_ROWS
This makes it its own type, rather than just another environment variable that’s easily missed.
2017-08-13 11:15:40 +01:00
Benjamin Sago 6740faa781 env vars should be referenced, not copied
Just because the type that gets used right now is Copy and Clone doesn’t mean that when we pass mock ones in for tests they’ll be those two as well. So we have to go through and add &s everywhere.
2017-08-13 11:14:58 +01:00
Benjamin Sago 33e83accd0 match-to-if-let 2017-08-12 22:51:45 +01:00
Benjamin Sago da00e2fda2 Thread the row threshold through grid_details
No new features here, just some restructuring. Mode::GridDetails was nice and elegant with those two fields, but now there’s a grid-details-only option the elegance has gone out the window.
2017-08-12 22:49:16 +01:00
Benjamin Sago a6ed42105d By lines, I meant details
Yeah, I forgot what I was meant to be doing half-way through.

This also adds the row_threshold field, which disables the view unless there will be more than the given number of rows. Getting the row count required upgrading term_grid to a version that has that function added.
2017-08-12 20:19:30 +01:00
Benjamin Sago 513ec51358 Have grid-details turn into lines if it won’t fit
Previously the iterator went all the way through `2..`, and not only would that take a very long time, but at the end it wouldn’t even print anything. Now the grid-details view turns into a lines view when it’s hit its limit.
2017-08-12 14:21:34 +01:00
Benjamin Sago 6343fbc040 Remove unnecessary clone (plus docs) 2017-08-12 12:50:59 +01:00
Benjamin Sago e45e515805 Remove stray colon from help text
Fixes #266
2017-08-12 11:39:12 +01:00
Benjamin Sago e29f06fae0 Merge pull request #258 from chrisvittal/compression-types
Add extra types to compressed filetype filter.
2017-08-12 11:32:31 +01:00
Benjamin Sago 9e15c616cc dir_action comments and docs 2017-08-12 11:29:40 +01:00
Benjamin Sago 673e894d25 Give the filter modules some love 2017-08-12 10:09:33 +01:00
Benjamin Sago a7d8e1c84b Make the dir action a bit more lenient
More strict mode checks I forgot to take out
2017-08-11 22:56:52 +01:00
Benjamin Sago eec1a4f78a Stop --git from complaining too
Re-fixes #152
2017-08-11 21:43:56 +01:00
Benjamin Sago 5189d66e2c Hide xattr errors unless --extended
exa now ignores errors when checking for extended attributes when the user didn’t explicitly demand that they be checked. If a file does have xattrs, it’ll still display the @ in the permissions column; errors will now just cause the @ to be hidden instead.

This changed a lot of the xtests, which were displaying the error message in a few situations. Those tests have gained @-suffixed companions so the actual error messages can still be tested.

Fixes #178 (finally)
2017-08-11 12:36:14 +01:00
Benjamin Sago b286676667 Add actual error messages for the error messages
The annoying part is trying to format!() an OsStr.
2017-08-10 23:34:39 +01:00
Benjamin Sago adaa36e1c5 Integrate strict mode, use it to test file sizes
It’s a good test to be able to switch strict mode on in run.sh and not have it break anything! Now, the EXA_STRICT environment variable will toggle it on. We can even switch it off and see that it doesn’t error.
2017-08-10 18:45:26 +01:00
Benjamin Sago dbebd60c4e Extract var_os and use the mock to test
Some of the deduce functions used to just blatantly call std::env::var_os and not care, introducing global state into a module that was otherwise nice and functional and self-contained. (Well, almost. There’s still terminal width.)

Anyway, this made it hard to test, because we couldn’t test it fully with this global dependency in place. It *is* possible to work around this by actually setting the environment variables in the tests, but this way is more self-documenting.

With this in place, we can start to unit test things like deriving the view by passing in what the $COLUMNS environment variable should be, and that’s one of the first things checked.

src/options/mod.rs *almost* has all its tests moved to where they should be!
2017-08-10 17:54:28 +01:00
Benjamin Sago 532ebbc591 Only complain about long options in strict mode
Fixes #152. It just puts the check behind a flag and moves the tests around.
2017-08-10 13:59:39 +01:00
Benjamin Sago f389943bf1 New macro for testing deduce errors
Sometimes, the type in the Ok part of the Result wouldn’t implement PartialEq, so the first macro (which uses assert_eq) won’t work. In these cases, this new macro can be used instead, which just unwraps the Err’s contents. In other cases, it can shave off a ) at the end of a few lines.
2017-08-10 13:59:09 +01:00
Benjamin Sago 6755ee6ae9 Extract table columns into a struct
The table Options struct is roughly half runtime configuration and half flags to select which columns to display The column fields might as well be in their own struct, and now that the ‘for_dir’ function doesn’t use SizeFormat, it can be moved to Columns.
2017-08-09 22:25:16 +01:00
Benjamin Sago e98c765078 Move size format out of Column
Way in the past, the size format was the only variable column; the others were all fixed. Now there are many configurable columns and this field was still hanging around. The code that does the rendering just gets the size format as an argument, and now it works the same way as the TimeFormat.
2017-08-09 21:47:51 +01:00
Benjamin Sago 6b309d5cfc Make SizeFormat lenient, and add tests
This changes the SizeFormat option parser from its old, strict-by-default behaviour (where passing both --bytes and --binary would be an error) to the new, use-the-last-argument behaviour (where passing --bytes --binary would use --binary because it came later).

Doing this meant adding functionality to Matches so that it could return *which* argument matched. Previously, the order of --bytes and --binary didn’t matter, because they couldn’t both be present, but now it does.
2017-08-09 19:18:31 +01:00
Benjamin Sago b2947ed590 Document and test time formats 2017-08-09 17:14:16 +01:00
Benjamin Sago 0b87392fd4 Decouple assert_eq! and assert_parses
The assert_parses function was problematic because it insisted on using assert_eq! to check its contents. This won’t work for any type we want to test that doesn’t implement PartialEq, such as TimeFormat, which holds references to years and date strings and other such.

To go about fixing this, the first step is to change that function so it only does the initial processing, rather than the assertion, which is now done outside of it in the test macros instead.
2017-08-09 13:41:07 +01:00
Benjamin Sago ff497b52e5 Be stricter in strict mode
Now the code actually starts to use the Strictness flag that was added in the earlier commit! Well, the *code* doesn’t, but the tests do: the macros that create the test cases now have a parameter for which tests they should run. It’s usually ‘Both’ for both strict mode and default mode, but can be specified to only run in one, for when the results differ (usually when options override one another)

The downside to strict mode is that, now, *any* call to `matches.has` or `matches.get` could fail, because an option could have been specified twice, and this is the place where those are checked for. This makes the code a little less ergonomic in places, but that’s what the ? operator is for. The only place this has really had an effect is in `Classify::deduce`, which used to just return a boolean but can now fail.

In order to more thoroughly test the mode, some of the older parts of the code can now act more strict. For example, `TerminalColours::deduce` will now use the last-given option rather than searching for “colours” before “colors”.

Help and Version continue doing their own thing.
2017-08-09 09:21:29 +01:00
Benjamin Sago d97f603ee3 Make these tests less long 2017-08-08 09:20:46 +01:00
Benjamin Sago 00379cce63 Thread Strictness through the parser
The value is ignored, but this broke quite a lot of tests that assumed MatchedFlags had only one field.

Parsing tests have to have OsStr flags because I couldn’t get that part working right, but in general, some tests now re-use common functionality too.
2017-08-08 09:18:17 +01:00
Benjamin Sago c1e206669e Give IgnorePatterns a better interface
This commit gives IgnorePatterns a bunch of constructor methods that mean its option-parsing sister file doesn’t need to know that it’s a vec of glob patterns inside: it can work with anything that iterates over strings. Now, the options module doesn’t need to know about the glob crate.
2017-08-07 09:16:56 +01:00
Christopher Vittal 1bce51c9c8 Add extra types to compressed filetype filter.
This adds a few more common compressed filetypes to the is_compressed
fuction. Notably, xz, and two common package file formats, deb and rpm.
2017-08-07 00:57:29 -04:00
Benjamin Sago dd0c5f6bef Merge pull request #250 from ogham/exa/issue-213
fix issue #213 iso date format inversion
2017-08-06 20:38:21 +01:00
Benjamin Sago 999c9d56f5 Merge pull request #247 from ogham/exa/date_output
Fix month name widths once and for all #244
2017-08-06 20:23:09 +01:00
Benjamin Sago 68210c5e8c Merge branch 'master' of github.com:ogham/exa 2017-08-06 17:59:10 +01:00
Benjamin Sago 89540edb22 Allow xattrs to be shown in --tree without --long
This restriction was originally only there because a standalone --tree wasn’t a thing. Now it’s there, there’s no reason to forbid the combination.
2017-08-06 12:02:17 +01:00
Nontawat Numor e43e288d19 Add raw file type for Olympus and Nikon 2017-08-06 17:47:15 +07:00
Alfred Sawaya fca5b6b970 fix issue #213 iso date format inversion 2017-08-06 12:36:00 +02:00
Alfred Sawaya cb2e94a796 Fix month name widths once and for all #244
To render the date, Exa now find out the month with the longest name
among all months, and use the width of that.
2017-08-06 03:59:46 +02:00
Benjamin Sago b5bcf22612 Merge remote-tracking branch origin/option-pars-ng
This merges in exa’s own new options parser, which has the following features:

- You can specify an option twice and it’ll use the second one, making aliases usable for defaults (fixes #144)
- Lets arguments be specified more than once (fixes #125)

Strict mode is not done yet; I just wanted to merge this in because it’s been a while, and there’s work that needs to be done on master so I don’t want them drifting apart any further.

It’s likely that you’ll find cases where multiple arguments doesn’t work or where the wrong value is being used. There aren’t tests for *everything* yet, and it still uses global environment variables.

# Conflicts:
#	src/options/view.rs
2017-08-05 21:34:57 +01:00
Benjamin Sago 4289f4d27e Specify that we need the width of stdout
The term_size crate introduced in #237 did things *slightly* differently than exa: it tried to get the terminal width of stdout, stderr, and stdin. This broke some tests that only redirected stdout.
2017-08-05 20:26:13 +01:00
Benjamin Sago d701547ec4 Merge pull request #237 from ogham/exa/term_size
Use term_size crate to fetch terminal size.
2017-08-05 20:08:06 +01:00
Benjamin Sago 6759a5f97e Temporarily hush warnings 2017-08-05 19:56:42 +01:00
Benjamin Sago 7cb9a43541 Extract version info into its own struct
Now it’s more like help. There aren’t any other fields in its struct at the moment, but there will be in the future (listing the features, and extremely colourful vanity mode)
2017-08-05 19:46:47 +01:00