* feat(haskell): add haskell module and implement ghc version detection
* feat(haskell): implement stack resolver version detection
* fix(haskell): handle more complex resolvers
* fix(haskell): rename resolver_version to snapshot
* fix(haskell): change default color to bold purple
* feat(haskell): add tests
* fix(haskell): format
* fix(haskell): replace incorrect `or` with `or_else`
* fix(haskell): use write_all instead of write
* fix(haskell): λ as Haskell icon by default
* fix(haskell): fix tests and add a real stack.yaml testcase
* fix(haskell): make clippy happy
* test: add mock method for absolute files
Signed-off-by: Harald Hoyer <harald@hoyer.xyz>
* feat(module): add a container indicator module
Adds a container type indicator, if inside a container,
detected via the presence of some marker files.
E.g. inside a podman container entered with `toolbox enter`
the prompt changes to the container name and version.
```
starship on container_rebased [$!] is 📦 v1.0.0 via 🦀 v1.56.1
❯ toolbox enter
starship on container_rebased [$!] is 📦 v1.0.0 via 🦀 v1.56.1
⬢ [fedora-toolbox:35] ❯
```
Signed-off-by: Harald Hoyer <harald@hoyer.xyz>
Previous code would render all components as empty, resulting
in an empty string even if min_time was 0. This adds a special
case which forces prompt to render "0ms"
On Windows when running commands with their name instead of the path with Command::new, executable with that name from the current working directory will be executed.
This PR replaces all instances of Command::new with a new create_command function which will first resolve any executable paths and avoid this issue.
* feat(formatter): Allow scoped variables (#1094)
* feat: Allow scoped variables
, with the following improvements to the format string parser.
- Add documentation to spec
- Simplify some syntax in the spec
- Rewrite for loop with iterators
* Added support for R programming language.
* Removed unnecessary debug log used during dev process.
* Make the `R` command upper case as the *nix OS executables are case sensitives and the correct command is upper-case.
* Changed comments to reflect R features (rather than node.js where code was coming from).
* feat(format_string): Allow positional segments (#1138)
* feat(format_string): Allow using variables in a style string (#1130)
* fix(format_string): Allow multiple variable mappers (#1142)
* refactor: Add error handling to variables (#1148)
* Squashed commit of changes with meta variables:
commit 5beb3bca18f0b0c822b740afb3778ccb1e3a7d19
Author: heyrict <xiezh0831@yahoo.co.jp>
Date: Mon Apr 27 09:52:59 2020 +0800
fix: Cache variables in meta variables properly
commit 49b9324942dd55350c87107d0e8c7d1592d92e8a
Merge: cc575bc 260a1ab
Author: heyrict <xiezh0831@yahoo.co.jp>
Date: Sun Apr 26 21:34:52 2020 +0800
Merge branch 'feat/format-string' into meta-variables
commit cc575bc27cbf87c4197e96d2fa5416d4932e45d7
Merge: 3ed2d32 e0c1901
Author: heyrict <xiezh0831@yahoo.co.jp>
Date: Sun Apr 26 12:16:12 2020 +0800
Merge branch 'feat/format-string' into meta-variables
commit 3ed2d326c9f625930bdd72cea736c1d0eab6d381
Author: heyrict <xiezh0831@yahoo.co.jp>
Date: Sun Apr 26 11:06:28 2020 +0800
refactor(format_string): Allow returning error in variable mapper
commit 766732fe69
Author: heyrict <xiezh0831@yahoo.co.jp>
Date: Sat Apr 25 22:56:02 2020 +0800
fix: Add test for StyleVariableHolder
commit 444334ad20
Merge: 479d4a79796a66
Author: heyrict <xiezh0831@yahoo.co.jp>
Date: Sat Apr 25 22:52:27 2020 +0800
Merge branch 'positional-segments' into style-variables
commit 9796a66a96
Author: heyrict <xiezh0831@yahoo.co.jp>
Date: Sat Apr 25 22:51:26 2020 +0800
test: Add tests for VariableHolder
commit 479d4a72fa
Author: heyrict <xiezh0831@yahoo.co.jp>
Date: Sat Apr 25 22:41:47 2020 +0800
feat: Add trait StyleVariableHolder
commit 21d40c6f4e
Merge: 3b459f4e7dd987
Author: heyrict <xiezh0831@yahoo.co.jp>
Date: Sat Apr 25 22:17:11 2020 +0800
Merge branch 'positional-segments' into style-variables
commit e7dd987fd7
Author: heyrict <xiezh0831@yahoo.co.jp>
Date: Sat Apr 25 15:10:12 2020 +0800
misc: Minor changes on docs and codes
commit 71020b0397
Author: heyrict <xiezh0831@yahoo.co.jp>
Date: Fri Apr 24 20:51:45 2020 +0800
feat(format_string): Add syntax for positional segments
commit 3b459f4379
Author: heyrict <xiezh0831@yahoo.co.jp>
Date: Wed Apr 22 17:49:15 2020 +0800
fix: Fix clippy
commit 2fb052d68c
Author: heyrict <xiezh0831@yahoo.co.jp>
Date: Wed Apr 22 17:02:09 2020 +0800
feat: Add map_style method to feed values in style string
* fix: Change error type of StringFormatter::new
* fix: Fix rustfmt
* tests: Add tests to variable errors
* docs: Add documentation
* chore: Rename positional to conditional (#1166)
* docs: Add docs for format strings (#1083)
Co-authored-by: Thomas O'Donnell <andytom@users.noreply.github.com>
* refactor(rust): Use format strings (#1063)
* Updated to latest string formatter's changes.
* feat(format-string): add format string support to battery module (#1158)
* update battery module with format string
* update battery module docs
* update battery module with format string
* update battery module docs
* fix battery module with new StringFormatter api
* fix clippy warnings
* Update docs/config/README.md
Co-authored-by: Zhenhui Xie <xiezh0831@yahoo.co.jp>
* battery symbols now supports format-string
* battery symbols now support format-string
remove space between symbol and percentage
fix battery config
Co-authored-by: Zhenhui Xie <xiezh0831@yahoo.co.jp>
* refactor(golang): Use format strings (#1066)
* refactor(golang): Use format strings
* docs(golang): Update docs
* docs(golang): Update docs
* fix: Update to upstream API changes
* docs(golang): Update docs
Co-authored-by: heyrict <xiezh0831@yahoo.co.jp>
* Fixed a few inconsistencies.
* Removed string clone in favor of a reference.
* Update src/modules/r.rs
Reverting the r version string formatting to a more idiomatic way of handling it.
Co-authored-by: Thomas O'Donnell <andytom@users.noreply.github.com>
* Update src/configs/r.rs
Co-authored-by: Zhenhui Xie <xiezh0831@yahoo.co.jp>
* Updated documentation to reflect changes in config.
* refactor(java): Added formatter support for Java module. (#1084)
* refactor(haskell): Added formatter support for the Haskell module. (#1111)
* Added formatter support for the Haskell module.
* Updated haskell module with latest formatter code changes.
* Changed documentation for latest Haskell string formatter changes.
* Fixed a few inconsistencies.
* Removed unnecessary variable cloning for using reference instead.
* refactor(env_var): Added formatter support for the env_var module (#1180)
* refactor(memory_usage): Added formatter support for memory_usage module (#1182)
* Migrated the memory usage module to string formatter' support.
* Fixed a few inconsistencies.
* Removed cloning of variables to instead use references.
* refactor(cmd_duration): Use format strings (#1200)
* Fixed format issue in code.
* Fixed compilation error after adding new 'r' module in root config.
* Added .Rproj extension file to be detected with R prog lang.
* Aligned R module code with existing ones.
* Update src/configs/r.rs
Co-authored-by: David Knaack <davidkna@users.noreply.github.com>
* fix: Added rconfig to fullconfig and fixed broken api calls
* Apply suggestions from code review
Co-authored-by: Dario Vladović <d.vladimyr@gmail.com>
* Update src/modules/r.rs
Co-authored-by: Dario Vladović <d.vladimyr@gmail.com>
* Addressed PR comments.
Cleaned up code and fixed code errors.
* Updated docs for consistency purpose.
Co-authored-by: Milo <50248166+Milo123459@users.noreply.github.com>
* refactor: Renamed the `r` module to `rlang`
* test: Provided R fixture and R module renderer test
* doc: Updated rlang mod config to reflect latest detection changes
* fix: Added missing rlang entry in config/mod
* feat: Added version formatted fined grained configuration
* Added version_format in R lang documentation.
Co-authored-by: David Knaack <davidkna@users.noreply.github.com>
* review: Addressed later comments
* fix: README was missing a previously present section for Python
* Fix: Test was not updated for previous version string upgrade.
* fix: Upgraded R version in remaining test.
Co-authored-by: Zhenhui Xie <xiezh0831@yahoo.co.jp>
Co-authored-by: Thomas O'Donnell <andytom@users.noreply.github.com>
Co-authored-by: Luca Rinaldi <lucarin@protonmail.com>
Co-authored-by: John Letey <johnletey@gmail.com>
Co-authored-by: Tilmann Meyer <47182955+ATiltedTree@users.noreply.github.com>
Co-authored-by: David Knaack <davidkna@users.noreply.github.com>
Co-authored-by: Dario Vladović <d.vladimyr@gmail.com>
Co-authored-by: Milo <50248166+Milo123459@users.noreply.github.com>
* feat: add support for tcsh
* add tcsh to install.sh install message
* list tcsh in bug_report.rs and main.rs
* quote starship path
Co-authored-by: David Knaack <davidkna@users.noreply.github.com>
* fix job count
* add tcsh support to shell module
* fix STARSHIP_START_TIME undefined error
* preserve existing user precmd and postcmd, remove jobs support
* remove unnecessary parentheses
* minor script improvement
* removes parens from install script message
* Update docs/config/README.md
Co-authored-by: Thomas O'Donnell <andytom@users.noreply.github.com>
Co-authored-by: David Knaack <davidkna@users.noreply.github.com>
Co-authored-by: Thomas O'Donnell <andytom@users.noreply.github.com>
* fix(windows): don't inherit stdin when executing commands
On Windows, inheriting stdin from starship might lead to leaking the
console reference to the command we're executing. `id.exe` supplied with
Git has been observed to disable the ENABLE_VIRTUAL_TERMINAL_PROCESSING
console flag if it inherits stdin -- leading to Windows Terminal not
processing ANSI escape sequences.
This change fixes#2254 by explicitly disabling stdin inheritance.
The fix was suggested by David Knaack.
* fix(username): don't call `id -u` on Windows
This was done to check if user is root by comparing the UID to 0. Windows
does not have a concept of UID 0 anyway, so it's pointless to call `id.exe`
(which is installed with MSYS2 or Git, for example).
* perf(utils): Add timeout to `utils::exec_cmd`
This adds a timeout to any command executed using the `utils::exec_cmd`.
The initial time limit is hard coded to 500ms but if required we can
make this configurable. Have also switched the tests to be a bit more
granular on which systems they are ignored.
* Terminate the processes if they timeout
Have added support to the `utils::exec_cmd` to allow it to execute
commands that are not `.exe` on Windows. Have also added a timer to
measure how long a command took to execute.
Update the python module to try multiple python binaries when
determining the version. With the new logic if starship doesn't find
`python` on the `PATH`, which is the default for some Linux Distros, it
will fallback to `python3` and then `python2`.
Have reduced the log level when we fail to execute a command since this
is happening a lot more that expected, for example if a user checks out
a repo that contains a `.js` file but they don't have node installed.
This creates a custom logger for the log crate which logs everything to a file (/tmp/starship/session_$STARSHIP_SESSION_KEY.log) and it logs everything above Warn to stderr, but only if the log file does not contain the line that should be logged resulting in an error or warning to be only logged at the first starship invocation after opening the shell.
Have restored the `pyenv_prefix` option to the python module. This is
added as a new variable that will only be shown if `pyenv` is being used
to determine the version of python that is being used.
* refactor(java): parse version using regex
Mock java version retrieval & extend java module test suite with
rendering tests.
* chore: remove nom crate
* fix(java): support parsing version from both stdout & stderr
* fix(java): fix java command mock
* refactor(java): simplify version regex