Compare commits

..

867 Commits

Author SHA1 Message Date
9be28807cb ⬆️ Update dependencies (conemu-maximus5 v23.07.24) (#2863)
Co-authored-by: DRSDavidSoft <DRSDavidSoft@users.noreply.github.com>
2023-07-24 14:55:59 +01:00
e2168a361c ⬆️ Update dependencies (git-for-windows v2.41.0.windows.3, clink v1.5.1, conemu-maximus5 v23.07.23, clink-completions v0.4.10) (#2850)
Co-authored-by: DRSDavidSoft <DRSDavidSoft@users.noreply.github.com>
2023-07-24 09:29:50 +01:00
7542376213 Remove appveyor config (#2805)
This should be merged after #2804

Signed-off-by: Martin Kemp <me@martinke.mp>
2023-07-20 13:56:52 +01:00
e9750ab73d avoid erroneous messages, skip clink if injection fails fatally 2023-07-04 12:10:32 +03:30
59e14a1783 Remove deprecated PsGet module in favor of Install-Module 2023-05-23 14:26:50 +03:30
34f2aabb8e Remove PSGet Entirely
Fixes #2841

Signed-off-by: Martin Kemp <me@martinke.mp>
2023-05-23 11:11:39 +01:00
845720e25a Merge pull request #2847 from chrisant996/fix_2846
Fix 2846
2023-05-17 11:30:13 +03:30
55676399d5 Merge pull request #2849 from cmderdev/update-vendor
Updates to `1` vendored dependencies
2023-05-16 23:51:54 +03:30
48e4dff882 ⬆️ Update dependencies (clink-completions v0.4.8) 2023-05-16 13:40:42 +00:00
a605ec520d Clean luacheck warnings. 2023-05-15 09:18:59 -07:00
5fab87f4d6 Remove unused function.
The `get_hg_status()` function has been unused since commit
35eab7a51a in 2018.
2023-05-15 09:18:47 -07:00
c9153c96bf Fix global Lua namespace pollution.
Some variables were global when the intent was to be local variables.
2023-05-15 09:17:01 -07:00
74381ecd19 Fix #2846; errors when git/svn/hg not installed.
Also fixes error when HEAD is not available in a git repo, e.g. due to a
corrupt repo.
2023-05-15 09:15:36 -07:00
8d39f79a90 Merge pull request #2844 from cmderdev/update-vendor
Updates to `1` vendored dependencies
2023-05-11 18:37:01 +03:30
7b880efda4 ⬆️ Update dependencies (git-for-windows v2.40.1.windows.1) 2023-04-26 13:40:36 +00:00
4aefd0bb71 Merge pull request #2843 from cmderdev/update-vendor
Updates to `1` vendored dependencies
2023-04-24 17:34:59 +03:30
7daeb465e8 ⬆️ Update dependencies (clink v1.4.24) 2023-04-24 13:41:39 +00:00
23488fcbb2 fetch all history for all branches and tags 2023-04-23 23:47:28 +03:30
d838f861af checkout development 2023-04-23 23:43:26 +03:30
d80202c791 add task to auto push to development 2023-04-23 23:39:35 +03:30
73034f9e31 Merge pull request #2833 from cmderdev/update-vendor
Updates to `2` vendored dependencies
2023-04-11 02:15:18 +03:30
8875f77573 Merge pull request #2840 from cmderdev/dependabot/github_actions/peter-evans/create-pull-request-5
Bump peter-evans/create-pull-request from 4 to 5
2023-04-11 02:14:22 +03:30
1d1e815c91 Bump peter-evans/create-pull-request from 4 to 5
Bumps [peter-evans/create-pull-request](https://github.com/peter-evans/create-pull-request) from 4 to 5.
- [Release notes](https://github.com/peter-evans/create-pull-request/releases)
- [Commits](https://github.com/peter-evans/create-pull-request/compare/v4...v5)

---
updated-dependencies:
- dependency-name: peter-evans/create-pull-request
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-04-10 16:02:00 +00:00
36ad85c7b7 ⬆️ Update dependencies (git-for-windows v2.40.0.windows.1, clink v1.4.23) 2023-03-16 13:43:09 +00:00
bbb50f99f8 Merge pull request #2815 from cmderdev/update-vendor
Updates to `3` vendored dependencies
2023-03-12 08:39:05 -04:00
4efbe0bd62 ⬆️ Update dependencies (git-for-windows v2.40.0-rc2.windows.1, clink v1.4.22, clink-completions v0.4.7) 2023-03-10 13:42:19 +00:00
476fd2d324 Merge pull request #2806 from pulsovi/fix-title-at-end
fix: /task "<taskName>" no longer works since version 1.3.20
2023-03-05 14:48:55 -08:00
b3af7c3983 Merge pull request #2819 from daxgames/more_speed
Remove unnecessary git actions in fast init
2023-02-05 17:39:23 +03:30
d82fece61e Remove unnecessary git actions in fiast init 2023-01-23 19:16:44 -08:00
6bd2e260f0 Add time to debug output 2023-01-22 12:30:30 -08:00
c9d2b33792 Update Clink to v1.4.10 2023-01-16 19:16:20 +03:30
9e87f375f1 ⬆️ Update dependencies (clink v1.4.10) 2023-01-16 13:41:30 +00:00
84262c4476 Major updates to Cmder 2023-01-15 19:17:51 +03:30
0b01ea6f63 ⬆️ Update dependencies (clink v1.4.9, clink-completions v0.4.4) 2023-01-15 13:41:12 +00:00
af6472cb57 remove duplicate variable settings 2022-12-25 17:55:56 +00:00
fd12ece9af test github token 2022-12-25 17:49:14 +00:00
b5ae5eb711 display all env vars 2022-12-25 17:33:10 +00:00
c9e872e826 don't display the headers variable 2022-12-25 17:30:01 +00:00
f99480fd49 update vendor scripts 2022-12-25 17:13:44 +00:00
834940cddb Merge pull request #2807 from cmderdev/update-vendor
Updates to `2` vendored dependencies
2022-12-22 17:42:15 +03:30
5135370ec1 ⬆️ Update dependencies (git-for-windows v2.39.0.windows.2, clink v1.4.6) 2022-12-22 13:40:52 +00:00
92a3c9c215 fix: /task "<taskName>" no longer works since version 1.3.20 2022-12-22 12:16:51 +01:00
f22943212b Return error level 2 in Clink when fatal error, related to #2800 2022-12-22 10:25:17 +03:30
dc2bc9bda7 Draft a release on a tag being pushed (#2804)
Signed-off-by: Martin Kemp <me@martinke.mp>

Signed-off-by: Martin Kemp <me@martinke.mp>
2022-12-21 18:08:49 +00:00
a03ad615f1 ⬆️ Update dependencies (clink v1.4.5) 2022-12-21 13:40:56 +00:00
8b3f38ad21 fix misspellings 2022-12-21 02:35:11 +03:30
9e55c48200 fix checking for clink injection 2022-12-21 02:29:31 +03:30
3b6e1cbf5f Fix error from profile.d PowerShell scripts 2022-12-21 01:56:28 +03:30
e1bf703f50 Fix error from profile.d PowerShell scripts
When there are `ps1` files in `profile.d`, the following error is logged:

>A positional parameter cannot be found that accepts argument 'Sourcing'.
2022-12-20 10:50:44 -06:00
2e9b512102 adjust history settings to more suitable default values 2022-12-20 10:45:09 +03:30
9bbc97c981 Use New-TimeSpan to calculate total elapsed time 2022-12-20 10:19:00 +03:30
4766425ad3 Create dependabot.yml 2022-12-19 10:20:34 +00:00
470808838f TotalSecond -> TotalSeconds
Signed-off-by: Martin Kemp <me@martinke.mp>
2022-12-19 10:15:02 +00:00
328f4b3073 Use New-TimeSpan to calculate total elapsed time
Fixes #2797

Signed-off-by: Martin Kemp <me@martinke.mp>
2022-12-19 10:13:34 +00:00
691addb95c Use CodeQL Scanning (#2795)
* Use CodeQL Scanning

* run on windows

Signed-off-by: Martin Kemp <me@martinke.mp>

* Use our build scripts

Signed-off-by: Martin Kemp <me@martinke.mp>

Signed-off-by: Martin Kemp <me@martinke.mp>
2022-12-19 09:16:06 +00:00
efa2e576d0 Update conemu to mitigate CVE-2022-46387 (#2794)
Signed-off-by: Martin Kemp <me@martinke.mp>

Signed-off-by: Martin Kemp <me@martinke.mp>
2022-12-19 08:33:35 +00:00
5eaf0d0396 use github token when available 2022-12-15 21:05:13 +00:00
0e34d925ce ⬆️ Update dependencies (clink v1.4.4) 2022-12-14 17:50:30 +03:30
9d2ac373c5 ⬆️ Update dependencies (clink v1.4.4) 2022-12-14 13:41:25 +00:00
835343f9d6 Merge pull request #2786 from cmderdev/update-vendor
Updates to `3` vendored dependencies
2022-12-13 17:46:38 +03:30
271fe4c822 ⬆️ Update dependencies (git-for-windows v2.39.0.windows.1, clink v1.4.3, clink-completions v0.4.2) 2022-12-13 13:41:54 +00:00
24ba9c3fa5 Merge pull request #2791 from chrisant996/fix_2789
Fix https://github.com/cmderdev/cmder/issues/2789
2022-12-06 01:38:22 +03:30
0fdcda98cf Fix https://github.com/cmderdev/cmder/issues/2789
Holding ^C made git.exe hang while cmd.exe (Clink) updated the prompt.

The prompt script had three problems:

1.  It invoked `git config` every time a prompt was displayed, to
    figure out where to skip invoking `git status`.  But it even did
    that if the current directory wasn't part of a git repo.
2.  It invoked `git config` two times for every single prompt, to
    attempt to improve performance if the user disables `git status`
    coloring.  But two times for every single prompt is expensive, so
    it has the opposite effect in the general case, and noticeably
    degrades performance.
3.  It invoked `git config` using a blocking call, instead of using the
    async prompt support in Clink.  That significantly reduced the
    benefit of having used async prompt filtering for `git status`.

Now the `git config` invocations use async prompt filtering, which lets
the prompt display instantaneously.  It also now uses a timer to avoid
invoking `git config` repeatedly when new prompts show up in rapid
succession.

Also, the `cmderGitStatusOptIn` variable is no longer leaked into the
Lua global namespace.

These changes resolve the issue: holding ^C is very fast and no longer
causes git.exe to hang.
2022-12-05 13:52:14 -08:00
42df6cd05b fix git bash GIT_INSTALL_ROOT 2022-11-19 02:32:02 +00:00
a4fa8d5333 Merge pull request #2780 from cmderdev/update-vendor
Updates to `1` vendored dependencies
2022-11-07 18:16:27 +03:30
1ba542e915 added links to labels 2022-11-07 17:38:30 +03:30
2c656a9c34 added a word 2022-11-07 17:33:59 +03:30
0adbc47c7e ⬆️ Update dependencies (clink v1.4.0) 2022-11-07 13:54:22 +00:00
e0ade8f3f1 Merge pull request #2779 from cmderdev/development
Improvements to shells and general fixes
2022-11-07 00:19:57 +03:30
ba97011bbc changes to letter casing in variable 2022-11-06 23:19:01 +03:30
cfcfe6f282 fix packignore issues 2022-11-06 23:17:55 +03:30
048692b5b5 describe color codes in order 2022-11-06 11:50:22 +03:30
7c74931af8 revert a letter case 2022-11-06 11:47:23 +03:30
e3d9f81e25 add prompt for vanilla cmd.exe when clink not present 2022-11-06 11:37:58 +03:30
7c309c6a7b add link to documentation in comment 2022-11-06 11:36:03 +03:30
0c1ab3fbb1 powershell: fixes for first time launch 2022-11-06 11:34:27 +03:30
fc44def0ad make powershell scripts consistent 2022-11-06 11:32:22 +03:30
fbe3e17eea add check for config dir 2022-11-06 11:30:56 +03:30
47caafb800 update launcher manifest comments 2022-11-04 18:55:25 +03:30
efb3338f5c powershell formatting 2022-11-04 18:47:16 +03:30
3859f6ffc0 consistent indentation 2022-11-04 13:29:18 +03:30
4e1918dcf7 formatting 2022-11-04 12:58:24 +03:30
dcc06a9d70 add excd (#1051) 2022-11-02 19:15:58 +03:30
d3026aef5d fix links to clink completions 2022-11-02 18:52:43 +03:30
159937b2df added a link to the wiki 2022-11-02 11:38:47 +03:30
3214a6d5ea ⬆️ Update dependencies (clink v1.3.51) (#2776)
Co-authored-by: DRSDavidSoft <DRSDavidSoft@users.noreply.github.com>
2022-11-01 10:31:34 +00:00
02970841c3 optimize compression flags (reduce passes for more speed) 2022-10-27 13:15:44 +03:30
04bbea7d24 Update dependencies (clink v1.3.50) 2022-10-27 12:54:38 +03:30
c8d48b7f3e ⬆️ Update dependencies (clink v1.3.50) 2022-10-26 13:56:46 +00:00
0f6ed93d0d merge into development branch 2022-10-25 21:15:01 +03:30
2be652707b ignore thumbnails in all directories 2022-10-25 20:39:26 +03:30
96ce96c53d ignore log files and clink history 2022-10-25 20:38:10 +03:30
ce23189427 do not stop when using fallback method 2022-10-25 19:46:56 +03:30
a2a996147e adjust root path 2022-10-25 18:42:30 +03:30
6d46df634e added a new line 2022-10-25 11:27:11 +03:30
fe08df3fdc update links and some minor formatting improvements 2022-10-25 11:24:37 +03:30
39ac92d61c add editors to ignore files 2022-10-25 00:48:28 +03:30
bdbd3aab2b fix docs for user-aliases.cmd #2397 2022-10-25 00:44:47 +03:30
18aea2b258 Merge branch 'master' of https://github.com/cmderdev/cmder 2022-10-25 00:22:47 +03:30
5cd05b056b Improvements to Cmder prompt 2022-10-25 00:22:15 +03:30
c0fc10009a use colons for batch labels 2022-10-25 00:13:21 +03:30
cc5e4a0e60 fix a misspelling 2022-10-24 21:20:52 +03:30
6e0e1729d8 use a variable to keep DRY 2022-10-24 21:01:55 +03:30
cbb10de06d consistent spaces 2022-10-24 20:54:24 +03:30
0b7e47cdc2 add new alias for file listing 2022-10-24 20:38:09 +03:30
96ca7cea4a enhance cmder prompt 2022-10-24 19:58:46 +03:30
0ba0dea6a2 Update Clink to v1.3.49 2022-10-23 18:38:45 +03:30
e320ba8aae ⬆️ Update dependencies (clink v1.3.49) 2022-10-23 15:06:50 +00:00
23b80264b0 use shorter commit message 2022-10-23 18:34:36 +03:30
90cd1130ac add link to repo url 2022-10-23 18:09:35 +03:30
7f71456a41 Merge pull request #2767 from cmderdev/update-vendor
Updates to `2` vendored dependencies
2022-10-21 11:07:33 +03:30
c606e5c8ee Update vendored dependencies (git-for-windows v2.38.1.windows.1, clink v1.3.48) 2022-10-20 13:58:38 +00:00
98d28846b3 Git-bash use conemu-msys2-64 connector (#2765) 2022-10-19 22:41:19 +03:30
27f28e6ed7 fix double escaped percent 2022-10-19 10:21:56 +03:30
8b6d1d8a6f alternative where filter instead of relying on find.exe 2022-10-19 00:33:10 +03:30
211fbd6428 Sync Git-bash start argument from ConEmu to use conemu-msys2-64 connector
use conemu-msys2-64 connector would help to solve some display problems under Git Bash like character/cursor drifting, `tmux` display wrong, and so on. As the default profile is hardcoded and ConEmu upstream has solved it by using msys-connector, please add it.
2022-10-19 02:32:17 +08:00
2acb6808ed use pwsh as shell value 2022-10-18 16:54:26 +03:30
ee913e09ee use relative path 2022-10-18 16:51:59 +03:30
ede79c2199 use correct sources path 2022-10-18 16:41:38 +03:30
665df2a8c8 add step to initialize vendors 2022-10-18 16:26:47 +03:30
a0f234b9d0 check for clink existence 2022-10-18 16:22:05 +03:30
5cdb98abb7 add escape code color 2022-10-18 16:20:30 +03:30
9399cbdcd7 detect if clink initialization failed 2022-10-18 16:11:54 +03:30
c992215f94 Merge branch 'master' of https://github.com/cmderdev/cmder 2022-10-18 15:21:31 +03:30
55b90cc958 fix minor typo 2022-10-18 15:21:28 +03:30
971483b2b7 use consistent indentation in init.bat 2022-10-18 15:20:35 +03:30
c8d554220a Update README.md 2022-10-18 12:37:10 +01:00
8feae5d81d Update README.md 2022-10-18 12:36:44 +01:00
6d77c988db changes to zip compression parameters 2022-10-18 14:58:16 +03:30
04b6ec2ac8 Update issue template labels
* update question template
* update bug-report label
* update feature-request label
2022-10-18 14:49:03 +03:30
b5bddc929e Updated changelog to released 2022-10-18 14:38:53 +03:30
04e4446c37 add step label name 2022-10-18 12:44:59 +03:30
4b5e52014e Merge branch 'master' of https://github.com/cmderdev/cmder 2022-10-18 12:31:15 +03:30
8a71e7d51b stop steps if no new versions detected 2022-10-18 12:30:55 +03:30
668b9ad0fb update questions issue template 2022-10-18 02:57:57 +03:30
11919ebc54 fix minor bad link 2022-10-18 02:53:49 +03:30
1754995aa0 re-order a section regarding docs 2022-10-18 02:52:04 +03:30
c333fc0c67 improvements to github form 2022-10-18 02:50:15 +03:30
f927fafb67 adjustments to the issues forms 2022-10-18 02:44:12 +03:30
942d513a2a re-order form parts for issue report 2022-10-18 02:42:10 +03:30
1bc35b6edd remove invalid yml property 2022-10-18 02:31:36 +03:30
904d552801 fix yml issue 2022-10-18 02:30:31 +03:30
1fa1919eaf move from issues template to github forms 2022-10-18 02:27:01 +03:30
2fa0130711 fixed some misspelings and grammar issues 2022-10-18 01:14:25 +03:30
c068c219eb Updates to 3 vendored dependencies 2022-10-18 00:43:13 +03:30
85051f0cb2 Update vendored dependencies (git-for-windows v2.38.0.windows.1, clink v1.3.47, conemu-maximus5 v22.08.07) 2022-10-17 20:24:26 +00:00
5eacfc90af Re-factor the build script and add auto update vendors 2022-10-17 23:52:29 +03:30
2ebf68393f fix small ending delimiter 2022-10-17 23:46:14 +03:30
856d22e9f8 write raw github env var with newlines 2022-10-17 23:43:06 +03:30
9151fb3469 new line GitHub env improvements 2022-10-17 23:35:29 +03:30
d767c9b2e9 use alternative method to escape newlines 2022-10-17 22:25:09 +03:30
3943ba6cc8 fix small bug 2022-10-17 22:19:37 +03:30
cc9699c134 resolve issues with variable name 2022-10-17 22:16:26 +03:30
4264158ff2 attempt to fix new lines for PR message 2022-10-17 22:14:00 +03:30
0559060ceb use correct escaping for new line 2022-10-17 21:58:51 +03:30
ae391eb576 use paranthesis to fix bug 2022-10-17 21:56:05 +03:30
129c2971c7 use a table for message description 2022-10-17 21:51:35 +03:30
3f88112d22 edit notice title 2022-10-17 21:20:32 +03:30
3fe76de9b5 fix github variable 2022-10-17 21:19:19 +03:30
e1a0d3850c improve formatting of text 2022-10-17 21:18:24 +03:30
1e34c885f3 fix typos 2022-10-17 21:11:37 +03:30
1d330e7330 remove incompatible version string matching 2022-10-17 21:09:06 +03:30
f468ddfe95 fix typo 2022-10-17 21:02:53 +03:30
e7139bd474 initial update vendors script 2022-10-17 21:00:30 +03:30
6b72e84940 minor letter casing update 2022-10-17 20:30:12 +03:30
3901fef98b minor letter casing edit 2022-10-17 20:08:37 +03:30
71536ddddf stop ssh agent only if building vendors 2022-10-17 19:52:15 +03:30
7995f34981 adjust comments 2022-10-16 17:34:57 +03:30
87f7ddf449 formatting and case conventions 2022-10-16 16:13:26 +03:30
d94fe86b2a add -noVendor flag 2022-10-16 16:10:51 +03:30
f58652fc28 check requirements only for specified switches 2022-10-16 16:01:15 +03:30
e1caeb879a Merge branch 'master' of https://github.com/DRSDavidSoft/cmder 2022-10-16 14:56:30 +03:30
5b46f4fec7 use default bg color instead of black for default configuration 2022-10-16 01:20:06 +03:30
b0f034a960 use correct background colors (SGR49) instead of black (SGR40) - fixes #2560
the default value of SGR 49 works best with both ConEmu and Windows Terminal, and both values don't take an effect on Cmder.
(ref: https://github.com/cmderdev/cmder/wiki/Seamless-Windows-Terminal-Integration)
2022-10-16 01:10:20 +03:30
70632a2bb8 add pwsh alias to quickly launch powershell with cmder profile 2022-10-16 00:57:47 +03:30
9d76f99dcf closes #2756 2022-10-16 00:44:58 +03:30
50bf15dd75 update tests to use separate steps 2022-10-16 00:33:31 +03:30
2de6f8232a add tests 2022-10-16 00:27:20 +03:30
8d4afb0570 fix problem with #2756 2022-10-16 00:02:38 +03:30
67e2bf1a73 Fix post build action if path has spaces in it. 2022-10-15 15:42:41 -04:00
59269aa9f1 allow manual trigger 2022-10-15 15:48:13 +03:30
1c4a8b3ff5 add vendor dependency check action 2022-10-15 15:39:57 +03:30
a49921bb1b add github variable helpers (credit: @microsoft) 2022-10-15 15:37:39 +03:30
473e9566e7 use BITS for more performant downloads when possible 2022-10-15 14:53:52 +03:30
f9cb2d6264 echo messages for github actions 2022-10-15 13:49:02 +03:30
7856b3ab57 minor space corrections 2022-10-15 12:58:22 +03:30
4dc3dc0dac fix remaining misspellings in changelog 2022-10-15 12:56:04 +03:30
abbab3f8b4 trim trailing spaces 2022-10-15 12:46:13 +03:30
9aa26c46d0 remove additional spaces 2022-10-15 12:38:25 +03:30
7f682653e4 consistency with powershell conventions;
* use "PS" instead of no-width "$([char]0x200B)" character in prompt (credit @skycommand)

* fixes additional space after the lambada and before the path

* display "PS" before path to distinguish between PowerShell and CMD
2022-10-15 12:32:52 +03:30
23edc8036f fetch all git history 2022-10-15 04:31:56 +03:30
cb9d06f8a3 improve plain zip compression 2022-10-15 04:18:38 +03:30
cc85a32e48 use lzma2 for 7-zip compression 2022-10-15 04:14:15 +03:30
3b9e591ea0 improve 7-zip compression efficiency 2022-10-15 04:11:43 +03:30
adcef21034 make sure each edition contains the correct vendored files 2022-10-15 03:55:44 +03:30
2dc5463c31 don't create archive with the root folder prefix 2022-10-15 03:44:15 +03:30
4b8d669d01 recursively ignore files for packing 2022-10-15 03:41:07 +03:30
a4c5b9d098 add cmder root prefix to exclude parameters 2022-10-15 02:54:32 +03:30
9c4e4d27c8 Minor edits to AppVeyor build scripts 2022-10-15 02:47:36 +03:30
489078763d switch to upload individual files 2022-10-15 02:30:45 +03:30
aa755278ec upload the entire build directory 2022-10-15 02:08:52 +03:30
5c8e0f38fe remove explicit call to vcvars 2022-10-15 01:49:20 +03:30
5831fa4977 resolve child path 2022-10-15 01:47:22 +03:30
d7d0f1320b use correct cmer root path 2022-10-15 01:44:21 +03:30
9f395805e1 remove stderr progress for 7-zip 2022-10-15 01:44:07 +03:30
e8d34e07a1 allow custom titles for the launcher
Custom option for launcher title
2022-10-15 01:39:38 +03:30
77df64b61b include version.rc2 2022-10-15 01:25:05 +03:30
db44218d14 comment out middle steps 2022-10-15 01:21:17 +03:30
1b7d804701 add 7-zip progress to output 2022-10-15 00:35:34 +03:30
c9ba643851 remove invalid symlink 2022-10-15 00:29:55 +03:30
f301968ac3 remove recurse param 2022-10-15 00:27:27 +03:30
f02bbfc5be use Get-ChildItem with excluded files instead of dir 2022-10-15 00:20:58 +03:30
50816c6bfc add verbose message with directory content 2022-10-14 23:42:02 +03:30
a0827fb4f5 formatting code 2022-10-14 23:27:22 +03:30
28e42104ac create save to directory if it doesn't exist 2022-10-14 23:16:54 +03:30
2189fe9483 use resolve path for input parameters 2022-10-14 23:07:45 +03:30
813fd6d82f more descriptive verbose comment for packing 2022-10-14 22:57:53 +03:30
1fbe2f7c2d use absolute path for default cmder root dir 2022-10-14 22:28:50 +03:30
e1c14f6c7e add github actions badge 2022-10-14 22:24:50 +03:30
4992227614 use correct order of commands to move directory 2022-10-14 22:12:59 +03:30
7178b978ec adjust required string double quotes 2022-10-14 22:04:55 +03:30
ee01f26680 use absolute paths for moving items 2022-10-14 22:01:34 +03:30
eede47bfad set the workspace path for github actions correctly 2022-10-14 21:56:19 +03:30
9d9519bdd4 add missing prefix for github actions 2022-10-14 21:52:54 +03:30
f05c77e53c add resolve path for flatten directory function 2022-10-14 21:51:04 +03:30
0b163d43ab adjustments to github actions build 2022-10-14 21:48:40 +03:30
d567229050 add verbose message for flatten directory 2022-10-14 21:46:00 +03:30
800a4a953f changes for github actions build 2022-10-14 21:25:15 +03:30
be5198c74b use github actions 2022-10-14 21:15:46 +03:30
91d5a25fe9 use max cpu count switch for msbuild 2022-10-14 20:02:03 +03:30
760566acb9 resolve conflicts 2022-09-12 22:33:52 +04:30
a8bc932dbd resolve conflicts 2022-09-12 22:27:41 +04:30
6cd7817938 resolve merge conflicts 2022-09-11 09:56:40 +04:30
3d0e6b86e3 Merge pull request #2748 from DRSDavidSoft/master
Fix build system scripts (closes #2723)
2022-09-10 20:28:44 -04:00
a027bdc5c2 Merge pull request #2747 from DRSDavidSoft/patch-3
Add bin\cmder_shell.cmd
2022-09-10 20:23:57 -04:00
0f490fdb61 Merge pull request #2746 from DRSDavidSoft/taskdialog
Use TaskDialog instead of MessageBox (Fixes Builds)
2022-09-10 20:22:42 -04:00
795ab5746c Merge https://github.com/DRSDavidSoft/cmder into taskdialog 2022-09-10 01:49:31 +04:30
771c53c7f1 Re-target build tools & update script 2022-09-10 01:47:10 +04:30
805a5fc6e5 Merge pull request #3 from DRSDavidSoft/taskdialog
Merge TaskDialog
2022-09-10 01:35:04 +04:30
05c92f4cb0 Rename cmder_shell. to cmder_shell.cmd 2022-09-10 01:10:17 +04:30
d2d3d38782 Merge branch 'patch-3' of https://github.com/DRSDavidSoft/cmder into taskdialog 2022-09-10 01:09:44 +04:30
15d66d394a add cmder_shell.cmd 2022-09-10 00:00:24 +04:30
280e40f077 Merge branch 'master' into taskdialog 2022-09-09 21:31:25 +04:30
8ee5e36fca update switches string 2022-09-09 21:26:11 +04:30
dab1dd93f1 Merge pull request #2745 from DRSDavidSoft/patch-3
Minimal comspec detection (related to #2744)
2022-09-09 09:14:44 -04:00
e2d817a497 Add set to fix error 2022-09-09 09:11:45 -04:00
d1b1012741 minimal comspec detection (fixes #2744) 2022-09-09 17:24:25 +04:30
5c409dabc8 Merge pull request #2739 from DRSDavidSoft/patch-4
Update Clink, Clink Completions and ConEmu dependencies
2022-09-08 22:32:21 -04:00
05db3658ad Merge pull request #2738 from DRSDavidSoft/patch-3
Related to #2654: Move space from "{git}{hg}{svn}" to individual parts
2022-09-08 22:31:55 -04:00
ef0de62d82 Merge pull request #2742 from daxgames/better_bat
Better bat
2022-09-04 09:25:03 -04:00
61e7028566 CHANGELOG 2022-09-04 09:23:03 -04:00
59bbdaddc7 Cleanup 2022-09-04 09:16:39 -04:00
7a9ad78e66 Fix #2740 2022-09-01 13:00:43 +00:00
ec371bafff Update Clink, Clink Completions and ConEmu dependencies 2022-08-30 22:10:12 +04:30
a617397aea move space from "{git}{hg}{svn}" to individual parts 2022-08-30 21:59:09 +04:30
74060922a4 run script before compile 2022-07-18 18:21:08 +01:00
e48dec15ac VS2022 2022-07-18 18:13:38 +01:00
52389f21f0 VS 2019 2022-07-18 17:42:09 +01:00
d1e033c312 try 142 2022-07-18 17:40:54 +01:00
c89ef96347 Remove XP platform
Fixes #2723
2022-07-18 17:36:49 +01:00
4846eff298 Merge pull request #2720 from daxgames/CH
Update Clink and Git
2022-07-15 10:11:59 -04:00
5f25ea58a0 update Clink and Git 2022-07-15 10:08:52 -04:00
dceccffb72 Merge branch 'master' into CH 2022-07-15 10:06:59 -04:00
0a4d3bcb77 update Clink and Git 2022-07-15 10:04:30 -04:00
913f93d24a Merge pull request #2703 from Mikaz-fr/master
Add optional clink async prompt update for svn status
2022-07-13 08:52:52 -04:00
70b5822fd5 Enable asynchronous clink prompt update for svn status
If enabled in the cmder prompt config, use clink asynchronous update of the prompt for svn status (similar to git)
2022-05-25 15:34:22 +02:00
f184714457 Add new cmder config value
Add new setting value prompt_overrideSvnStatusOptIn to cmder_prompt_config.lua.default to control of asynchronous svn status update should be used with clink
2022-05-25 15:28:29 +02:00
7beb490048 Merge pull request #2695 from goodusername123/master
Update Git for Windows and Clink
2022-04-25 18:42:06 -04:00
f2d8e31e2e Update clink URL
Updates the Clink URL in the readme to point to the newer maintained version of Clink that is used by Cmder.
2022-04-25 16:58:37 -05:00
6e05a9105f Fix and Update changelog 2022-04-25 16:54:49 -05:00
62bfbb4501 Update Git for Windows to 2.36.0 2022-04-25 16:49:28 -05:00
8bf40227e8 Update Clink to 1.3.16 2022-04-25 16:47:34 -05:00
cf61b81f01 Merge pull request #2691 from daxgames/clink_1.3.15
Clink 1.3.15
2022-04-16 14:02:55 -04:00
427937918e update Clink to 1.3.15 2022-04-16 13:41:01 -04:00
fe29497878 update Clink to 1.3.14 2022-04-16 13:36:24 -04:00
f3fcb8be4a Merge pull request #2689 from daxgames/fix_find_git
Fix find git
2022-04-16 11:51:37 -04:00
36e13027f6 CHANGELOG.md 2022-04-16 11:42:27 -04:00
ef51ed2be2 Merge branch 'fix_find_git' of https://github.com/daxgames/cmder into fix_find_git 2022-04-16 11:35:41 -04:00
6d313853f3 only look at \cmd\git.exe for found git 2022-04-16 11:35:19 -04:00
f46e8b81d8 Merge branch 'master' into fix_find_git 2022-04-16 11:18:38 -04:00
864b85f254 CHANGELOG.md 2022-04-16 11:14:22 -04:00
ce02fb4a0e fix find latest git 2022-04-16 10:51:26 -04:00
e345f187d8 Remove set term=cygwin in init.bat (#2688) 2022-04-16 15:01:17 +01:00
fc00cc8be2 Merge pull request #2680 from daxgames/fix_git_worktree
Fix git worktree
2022-03-17 08:14:08 -04:00
0dd2a665e2 CHANGELOG.md 2022-03-17 08:10:18 -04:00
6189f4f0e6 fix prompt branch for git worktree 2022-03-17 07:57:48 -04:00
0616ff0a82 Merge pull request #2660 from vsajip/fix-2659
Fix #2659: Use get_hg_branch() to get Mercurial branch information.
2022-02-03 17:48:26 -05:00
99452c8158 Merge pull request #2661 from geekrumper/master
Fix #2654: blank space added between {cwd} and version_control variable
2022-02-03 17:46:30 -05:00
4098265a36 Fix #2654: blank space added between {cwd} and version_control variable 2022-02-02 14:13:51 +01:00
eab4454ac5 Fix #2659: Use get_hg_branch() to get Mercurial branch information. 2022-01-29 14:48:58 +00:00
711fe2895e Merge pull request #2648 from daxgames/fix_posh_colors
Fix posh colors
2022-01-15 16:04:17 -05:00
7cc1c77225 do not display message when alterring git path 2022-01-15 16:02:14 -05:00
f0c4e85ac8 yellow to white 2022-01-15 15:14:24 -05:00
ea0145448c Merge pull request #2647 from daxgames/spellling_fixes
Spellling fixes
2022-01-15 11:24:05 -05:00
0281ee7dda CHANGELOG.md 2022-01-15 11:22:00 -05:00
f997da60e3 CHANGELOG.md 2022-01-15 11:20:33 -05:00
34df88aa76 Merge pull request #2646 from daxgames/spellling_fixes
Spellling fixes
2022-01-15 11:17:02 -05:00
c51c3c55a8 add README config/profile.d 2022-01-15 11:12:38 -05:00
0e8c556e7d Merge branch 'master' of https://github.com/cmderdev/cmder into spellling_fixes 2022-01-15 11:01:22 -05:00
357e51acd1 spelling fixes 2022-01-15 11:00:58 -05:00
66f9d582ec Merge pull request #2635 from asoluter/master
Fix a problem with an ampersand character in path
2022-01-15 10:33:35 -05:00
83a95d1412 Merge pull request #2629 from eltociear/patch-1
Fix typo in README.md
2022-01-15 10:32:03 -05:00
a1417f6cf9 Fix a problem with an ampersand character in path 2021-12-08 23:49:14 +02:00
8ea4bbb11c Fix typo in README.md
enviroment -> environment
2021-11-30 20:34:31 +09:00
f39aade500 Update to Git 2.34.0and Clink 1.2.46 2021-11-21 13:50:54 -05:00
004535e0bc remove -all 2021-11-21 13:40:53 -05:00
6ae2f97f52 add quotes 2021-11-21 13:32:57 -05:00
0326f2e3a8 Merge branch 'master' of https://github.com/cmderdev/cmder into conemu-up 2021-11-21 13:24:56 -05:00
9f065a63e8 Ps1 git discovery (#2438)
* Fix start errors in path with ()

* Fix start errors in path with ()

* Fix start errors in path with ()

* Fix start errors in path with ()

* remove quotes from debug_output messages

* remove quotes from debug_output messages

* remove quotes from debug_output messages

* discovery newer git version

* new git path config for powershell

* xxx

* add isGitShim

* fix no git found in path

* debug

* revert not ps1 changes

* cleanup

* final

* spacing

* fixes

* cleanup

* cleanup

* timer for Powershell

* fixes

* fixes for git path settings

* grab vendor/bin/alias.cmd from master

Co-authored-by: Dax T. Games <dtgaes@kinggeek.org>
Co-authored-by: dgames <dgames@dtg.local>
2021-11-16 14:22:17 +00:00
b6316eb447 Merge pull request #2624 from cmderdev/revert-2618-master
Revert "Fix a problem with an ampersand character in path"
2021-11-11 07:35:34 -05:00
59dfa9c46f Revert "Fix a problem with an ampersand character in path" 2021-11-11 07:35:04 -05:00
a4cb56b083 Merge pull request #2618 from xpam-net/master
Fix a problem with an ampersand character in path
2021-11-11 07:17:33 -05:00
ad6979d25f Merge pull request #2621 from chehrlic/clink_git_speedup
Speed up git status / conflict status by calling git only once.
2021-11-10 05:55:04 -05:00
addcefdd47 Speed up git status / conflict status by calling git only once. 2021-11-08 17:43:46 +01:00
0637d6b3e9 Merge branch 'master' into conemu-up 2021-11-07 17:54:54 -05:00
f72c285d8b Merge pull request #2609 from Lunchb0ne/env-fix-again
Fix no env in the prompt string
2021-11-07 14:41:53 -05:00
f24266014f update clink and git 2021-11-07 13:03:44 -05:00
c27cedc9b3 quote PATH settings 2021-11-07 10:54:33 -05:00
4c85e8b2f1 Fix a problem with an ampersand character in path
If the path variable contained values with an ampersand character (such as in the case of MySQL), the string splits by this character, and tries to execute what follows as a separate command. 
All occurrences of the set command containing %PATH% should be wrapped in quotation marks
2021-10-29 09:13:35 +02:00
c75c02c9ce update Clink and Conemu versions 2021-10-20 21:10:38 -04:00
9de284123c Fix the env not showing
Turns out the `{env}` part was missing from the prompt constructor
2021-09-25 16:32:52 +03:00
93715461e6 Merge pull request #2606 from daxgames/cmder_diag
Cmder diag - Save output to a file.
2021-09-17 12:35:24 -04:00
fc6cf025be save cmder_diag.* output to a file 2021-09-17 12:28:49 -04:00
f809af1eec save cmder_diag.* output to a file 2021-09-17 12:22:25 -04:00
5b071d8d59 Merge pull request #2591 from koaleksa/fix-posh-git-1.0.0
Fix Posh-Git 1.0.0 import and console.
2021-09-10 12:28:33 -04:00
6d1e2d6e8b Fix Posh-Git 1.0.0 import and console. 2021-08-31 08:40:46 +02:00
2ef8c967d2 update conemu and clink (#2575)
* update conemu and clink

* update clink to 1.2.24

* update clink to 1.2.24

* update clink to 1.2.24

* Clink 1.2.26

Co-authored-by: dgames <dgames@dtg.local>
2021-08-19 16:47:47 +01:00
b885b4e235 Clink 1.2.26 2021-08-13 21:36:58 -04:00
f717f5031b update clink to 1.2.24 2021-08-07 03:30:40 -04:00
710cc3ecc3 update clink to 1.2.24 2021-08-07 03:27:13 -04:00
0fc6b6571e update clink to 1.2.24 2021-08-07 03:25:34 -04:00
48f50568b0 update conemu and clink 2021-07-23 23:09:24 -04:00
b8760e4d04 Merge pull request #2556 from chrisant996/clink-async-prompt 2021-07-18 09:58:41 +02:00
ae7209f254 Update clink to 1.2.22 2021-07-18 09:57:12 +02:00
9d4da63184 Update clink to 1.2.20 2021-07-18 09:57:12 +02:00
62a6311b6d Merge pull request #2549 from ian-craig/status-branchonly
Show branch name when cmder.status=false without expensive status ops
2021-07-17 14:10:21 -04:00
b40510f3a0 Merge branch 'master' into env-fix-again 2021-06-27 17:51:04 +03:00
e7a6e64473 Rewrote how prompt_overrideGitStatusOptIn works.
It was less clear before, and it also accidentally took effect when
the `prompt.async` Clink setting was off.
2021-06-12 18:56:37 -07:00
f6c2657b23 Allow scripts to disable part of the Cmder prompt.
The Cmder prompt normally includes version control info, which involves
running some potentially expensive commands.  The cmder-powerline-prompt
project (and maybe other projects) replaces the Cmder prompt and runs
the same potentially expensive commands -- so expensive commands get run
twice!

This change makes it possible for the user and/or other scripts to
disable the version control part of the built-in Cmder prompt.

https://github.com/chrisant996/cmder-powerline-prompt
2021-06-11 01:01:35 -07:00
91aabe75af Add prompt config variable for async git prompt.
Setting `prompt_overrideGitStatusOptIn = true` will override the
`cmder.status` and `cmder.cmdstatus` git config settings and run the git
prompt status commands in the background.  But it only takes effect when
using Clink v1.2.10, since that's required in order to run prompt update
commands in the background.
2021-06-10 18:49:39 -07:00
946f929eaf Merge pull request #2559 from daxgames/docs
Docs
2021-06-10 20:25:52 -04:00
8a870c093a Merge branch 'master' into docs 2021-06-10 20:23:39 -04:00
bfe526604d revert 2021-06-10 20:21:43 -04:00
79e505acf8 Merge branch 'master' of https://github.com/cmderdev/cmder 2021-06-10 20:20:22 -04:00
9a2e22cb6d Merge branch 'master' of https://github.com/cmderdev/cmder into docs 2021-06-10 20:14:56 -04:00
b2add2b966 prompt config docs 2021-06-10 20:12:47 -04:00
74202a8719 Merge pull request #1 from daxgames/status-branchonly-dax
Status branchonly dax
2021-06-05 14:26:34 -07:00
5305ebd4a6 Use Clink async prompt filtering for git.
`git status` and `git diff` can be slow in large repos.  Clink v1.2.10
and higher support using Lua coroutines to do expensive parts of prompt
filtering in the background.  When the expensive parts complete, the
prompt gets refreshed.

This means even large repos can have fast prompts PLUS git status all
the time!

This change should be backward/forward compatible with both older and
newer versions of Clink (of course only newer versions will gain the
benefit).
2021-05-31 21:29:19 -07:00
4e22ad93f4 Merge pull request #2 from daxgames/status-branchonly-dax
Status branchonly dax
2021-05-31 20:40:41 -07:00
6730f864b1 Merge pull request #1 from ian-craig/status-branchonly
Status branchonly
2021-05-31 20:38:23 -07:00
56b04fc9ce fix unknown color and code dedup 2021-05-31 10:53:18 -04:00
55ff611095 fix default unknown color 2021-05-30 08:56:44 -04:00
aebe37bd28 fix default unknown color 2021-05-30 08:56:05 -04:00
413fb2f1ac remove xxx 2021-05-30 08:46:37 -04:00
73ad62eaa2 add xxx 2021-05-30 08:46:08 -04:00
4fab4cc6e4 make unknown color white for all shells 2021-05-30 08:41:40 -04:00
a41fad80d5 Merge branch 'status-branchonly' into status-branchonly-dax 2021-05-30 07:56:01 -04:00
c9acb13d0b Fix cmder no status prompt 2021-05-30 07:50:48 -04:00
03d0f913ea fixing branch only 2021-05-30 07:27:16 -04:00
a5c98d4fe9 Add simple branch name gen for sh and ps1 2021-05-25 21:03:28 -07:00
9df8f1a92a Revert to boolean, keep branch name when status=false 2021-05-25 17:53:41 -07:00
c262934822 Add branchonly option to cmdstatus 2021-05-20 17:53:05 -07:00
f1665ddd7d Fix no env in the prompt string
Yeah, I was surprised too..
2021-05-10 18:47:17 +03:00
36f4ce0e3c Merge pull request #2538 from daxgames/fix_configurable_prompt
Fix configurable prompt
2021-05-02 22:47:11 -04:00
59941f5dfa cleanup 2021-05-02 21:05:58 -04:00
6d79ed5eb2 Merge branch 'master' of https://github.com/cmderdev/cmder into fix_configurable_prompt 2021-05-02 21:04:23 -04:00
99a7445fcb Merge pull request #2537 from Lunchb0ne/fix-env-weirdness
Fix env symbol being repeated when using a program that sets/modifies the env
2021-05-02 21:01:37 -04:00
d6b5fe8e1d CHANGELOG 2021-05-02 20:56:17 -04:00
11fb1b3a50 do not rely on config\cmder_prompt_config.lua 2021-05-02 20:56:02 -04:00
810a3da955 upgrade to clink 1.2.5 2021-05-02 20:54:52 -04:00
e8df3ef247 Refactor the env substution logic
And some prompt cleanup
2021-05-02 21:53:22 +03:00
8d6ce3e4ac Merge pull request #2523 from daxgames/prompt_config
Prompt config
2021-04-15 08:27:05 -04:00
9793ca1ed9 update git for windows 2021-04-15 08:17:07 -04:00
d9b2c729f9 replace :: with rem 2021-04-15 07:54:39 -04:00
8fa351810a CHANGELG.md 2021-04-11 18:54:26 -04:00
3752b95218 CHANGELG.md 2021-04-11 18:52:59 -04:00
e0cb86d738 parametrized status colors 2021-04-11 18:42:43 -04:00
0ef76ee2d3 add configurable prompt 2021-04-11 18:28:43 -04:00
8a2ace9fc2 Merge pull request #2522 from vladimir-kotikov/patch-6
Bump clink-completions version
2021-04-09 07:40:25 -04:00
37c7b1dc02 Merge pull request #2520 from daxgames/git_opt_out
set global cmderGitStatusOptIn var for use in clink-completions
2021-04-09 07:40:09 -04:00
ad755dc7f9 Bump clink-completions version 2021-04-09 10:46:27 +03:00
6027ac31c4 set global cmderGitStatusOptIn var for use in clink-completions 2021-04-07 22:30:53 -04:00
c34eb73555 Merge pull request #2452 from daxgames/1.3.18
1.3.18
2021-03-26 05:45:35 -04:00
f7df79a2d7 CHANGELOG.md 2021-03-26 05:41:17 -04:00
0fd2d9c8a8 CHANGELOG.md 2021-03-25 19:14:18 -04:00
e918b18ca7 CHANGELOG.md 2021-03-25 19:13:03 -04:00
0a7f1623f7 fix path length check with fast_init set 2021-02-28 23:09:49 -05:00
d02be816e2 fix failure in lib_path if path is too long 2021-02-28 21:54:06 -05:00
8452f33407 changelog.md 2021-02-25 14:38:05 -05:00
a66b8b3035 Merge pull request #2458 from FTOH/patch-1
Fix: Incomplete operation when closing bash.exe
2021-02-09 09:07:15 -05:00
ed60c14a44 Merge pull request #2475 from simaek/patch-1
Fix some commands like 'ls' are not available
2021-02-09 09:04:45 -05:00
cc1d459ea9 Fix some commands like ls' are not available 2021-02-08 23:23:30 +08:00
633d673bd7 Fix escaping double quotes 2021-01-17 22:13:01 +07:00
a7e45ef64a Merge pull request #2464 from stephensolis/patch-1
Fix: "The system cannot find the file specified" if %GIT_INSTALL_ROOT%\usr\bin doesn't exist
2021-01-17 08:30:32 -05:00
10d63daf90 Fix enhance_path call if no usr\bin in %GIT_INSTALL_ROOT% 2021-01-16 23:34:22 +01:00
6c15598010 update to Clink 1.1.20 2021-01-12 09:01:39 -05:00
3608b5bc81 Added quotes as in previous commits 2021-01-11 15:03:52 +07:00
2d75a635de Fix: Incomplete operation when closing bash.exe 2021-01-11 14:22:54 +07:00
9cf3ba222e remove clink defaults 2021-01-09 09:43:37 -05:00
01d300f779 cleanup 2020-12-24 18:43:23 -05:00
ba1027f6d5 cleanup 2020-12-24 18:34:27 -05:00
b5d172cd32 cleanup 2020-12-24 18:33:10 -05:00
f362ba8dba spacing 2020-12-24 17:55:56 -05:00
783cf68d10 CLink migration and clenaup 2020-12-24 17:48:00 -05:00
c4fb7e6034 Merge branch 'master' of https://github.com/cmderdev/cmder into 1.3.17_fixes 2020-12-24 12:15:08 -05:00
da0af1d96b 1.3.17 Fixes for clink settings and history 2020-12-24 12:14:46 -05:00
9c9eac1875 Merge pull request #2449 from daxgames/alias_fix
Alias fix
2020-12-23 07:55:52 -05:00
ae0b7722ed CHANGELOG.md 2020-12-23 07:55:16 -05:00
bb2f89d044 CHANGELOG.md 2020-12-23 07:33:12 -05:00
24cad3ed5c fix 'alias ..=cd ..' removing 2 char aliases 2020-12-23 07:30:47 -05:00
ae7ddb7f86 Merge branch 'master' of https://github.com/cmderdev/cmder 2020-12-23 07:29:36 -05:00
e0b8ebc669 Clink fork fixes (#2441)
* debug

* remove debug

* Switch to chrisant996 Clink 1.1.8

* Update to Clink 1.1 10

* CHANGELOG.md

Co-authored-by: dgames <dgames@dtg.local>
2020-12-21 21:30:30 +00:00
00b22ea79a Update clink-completions to 0.3.6 (#2440)
https://github.com/vladimir-kotikov/clink-completions/releases/tag/0.3.6
2020-12-17 10:26:59 +00:00
eb8e470fe3 Merge branch 'master' of https://github.com/cmderdev/cmder 2020-12-11 05:52:31 -05:00
9088a5e2e6 Merge pull request #2430 from qfp64/faster-init
Improve init speed
2020-12-11 05:48:07 -05:00
25bc575e8a Merge pull request #2390 from daxgames/sysinfo
add systeminfo.exe output to cmder_diag.*
2020-12-11 05:42:22 -05:00
0ff3b391f1 Merge branch 'master' of https://github.com/cmderdev/cmder into master 2020-12-11 03:47:19 -05:00
11a78a8d64 Fix errors 2020-12-10 13:35:40 +00:00
2a9a4d2860 Speed up calls to lib_console 2020-12-07 19:41:11 +00:00
4874e78953 remove debug 2020-12-06 10:56:58 -05:00
f4988480f6 debug 2020-12-06 09:23:23 -05:00
44f5095047 fix docs for user-aliases.cmd #2397 (#2398) 2020-10-27 17:32:05 +00:00
2205461943 Update git for windows to 2.29.1 (#2410) 2020-10-27 17:31:19 +00:00
5d05034810 fix docs for user-aliases.cmd #2397 2020-09-28 15:20:13 +03:00
467b4d4ad9 hide possible file write conflict 2020-09-13 08:27:10 -04:00
ea6e18c834 hide possible file write confilct 2020-09-13 08:02:46 -04:00
4378741aad add systeminfo.exe output 2020-09-12 06:10:41 -04:00
6458199812 Merge pull request #2380 from daxgames/fix_git_not_expected
Fix `\Git\cmd\git.exe" found." was unexpected at this time.`
2020-08-31 19:11:19 -04:00
d1adf16fa8 'fixes' 2020-08-24 20:27:56 -04:00
cda883bc39 add setlocal 2020-08-23 08:47:20 -04:00
b1ef763922 add setlocal 2020-08-23 08:42:58 -04:00
2cd7632720 Merge pull request #2376 from MMShep97/update-readme-links
Update readme links
2020-08-15 09:02:51 -04:00
92169c1295 Deletes link to non-existent repo :( 2020-08-14 17:57:50 -05:00
e0aba11018 Updates readme link to correct path
Fixes capitalization

Fixes opt to be bin

Updates readme link to correct path
2020-08-14 17:47:24 -05:00
e8fe522a99 Merge pull request #2372 from cmderdev/revert-2371-revert-2369-fix-powershell-prompt
Revert "Revert "Update profile.ps1""
2020-08-13 12:19:36 -04:00
937874f03c Revert "Revert "Update profile.ps1"" 2020-08-13 07:29:24 -04:00
9e085f5938 Merge pull request #2371 from cmderdev/revert-2369-fix-powershell-prompt
Revert "Update profile.ps1"
2020-08-13 07:09:20 -04:00
829a65f552 Revert "Update profile.ps1" 2020-08-13 07:08:20 -04:00
93b69798f4 Merge pull request #2369 from mcnubblet/fix-powershell-prompt
Update profile.ps1
2020-08-13 06:48:01 -04:00
3f6aa3b348 Update profile.ps1
Set utf-8 BOM in profile.ps1 to fix incorrect prompt display in PowerShell
2020-08-13 14:05:49 +10:00
a1785415fd Merge pull request #2359 from daxgames/changelog
Changelog
2020-07-29 20:43:32 -04:00
794ae2ad60 changelog 2020-07-29 20:42:14 -04:00
28c416a15c changelog 2020-07-29 20:41:29 -04:00
70aa573111 changelog 2020-07-29 20:39:37 -04:00
4cacd2fdc8 Merge pull request #2358 from FloSchwalm/update-to-git-2.28
Update git for windows to 2.28.0
2020-07-29 20:28:25 -04:00
80f76ad956 Merge pull request #2357 from FloSchwalm/fix-git-version-comparison
Fix git version comparison
2020-07-29 20:27:23 -04:00
906bb5d357 Merge pull request #2339 from daxgames/fix_global_vars_vscode_err
1.3.16-pre: 1.3.15 Fixes
2020-07-29 19:33:12 -04:00
29d784b2b1 Update git for windows to 2.28.0 2020-07-29 22:58:30 +02:00
fc90722faa Prepend %GIT_INSTALL_ROOT%\cmd to path instead of appending it
The default setting for path enhancing is appending,
so the provided unix tools don't overwrite windows tools we may want to keep.
For Git this is undesired behavior, though, as we just compared git versions
to decide which one we want to use. The git directory thus needs to be prepended
to the path to make sure a call to git uses the version we selected.
2020-07-29 22:48:01 +02:00
167c49ee6d Rewrite old calls to :verbose_output to working %lib_console% verbose_output 2020-07-29 22:46:35 +02:00
0ed10e5e89 Reorder if-else-clauses in :compare_git_versions so last else block can be reached
It is hard to spot without the brackets, but the last else block - that resets %test_dir% and
logs in verbose mode that an older user git version will be ignored - can't actually be reached.
The else block is considered to belong to the if clause "if exist "%test_dir:~0,-4%\cmd\git.exe""
that will only ever be executed if ERRORLEVEL is greather than or equal to 0, thus if the test fails,
the following else if clause "else if ERRORLEVEL 0" will always succeed and the last else block will be ignored.
Using the vendored git version may still have worked because %GIT_INSTALL_ROOT% isn't set either way,
but to enable the log message I reordered if-else-clauses and brackets in the way I think the
original author intended them to work.
2020-07-29 22:39:46 +02:00
cd50db3a7f Use ERRORLEVEL instead of %errorlevel% to compare git versions
%errorlevel% was always 0, even if the vendored git version was more current than the installed one
Usually exiting a batch script with "exit /b exitCode" as used in :compare_versions
sets %errorlevel% to the specified exit code
However, this may not work if %errorlevel% was set before with "Set errorlevel="
I didn't find the location where this might have happened,
but I saw the consequence of %errorlevel% always being 0
Thus I decided to use ERRORLEVEL instead as this will always work regardless of environment variable

For more information check https://ss64.com/nt/errorlevel.html
2020-07-29 22:25:49 +02:00
37a223b449 fix lib_path 2020-07-25 05:11:34 -04:00
334838c079 Update init.bat 2020-07-24 08:34:45 -04:00
0c3d89925e 'fix 2020-07-23 13:41:10 -04:00
020661af95 Merge branch 'fix_global_vars_vscode_err' of https://github.com/daxgames/cmder into fix_global_vars_vscode_err 2020-07-23 13:39:46 -04:00
79261d4d27 fix 2020-07-23 13:36:50 -04:00
7326a3cfc5 Update init.bat 2020-07-23 13:34:13 -04:00
fdcbd6df87 Delete vscode_init_args.cmd 2020-07-23 08:43:09 -04:00
0c41d5f5d4 Merge pull request #2351 from famoses/patch-1
quote time measures for timer.cmd
2020-07-18 08:58:53 -04:00
40c58417b2 quote time measures for timer.cmd
The startup time duration is calculated wrongly ( at least for me, on Windows 1909, with CmderMini 1.3.15.1010 ). I got something like "Elapsed Time: 80:36:1.00 (290161.00s total)" printed into the cmder consle window. I can be solved by quoting the time measures taken in `init.bat`. 

It seems that `time.cmd` fails in recognizing two arguments. In fact it did split the first time measure into two arguments and ignored the second time measure.
Example: 
from the two time measures
λ echo %CMDER_INIT_START% %CMDER_INIT_END%
12:53:44,34 12:53:54,04
The call to `time.cmd` created following output (i added echo commands to print variables start and end right after they got assigned the arguments)
start: 12:53:44
end:   34
2020-07-18 13:32:22 +02:00
97a41ddd99 fix cmder_configured GTR 1 2020-07-14 22:31:57 -04:00
954937cf97 cleanup 2020-07-05 15:22:09 -04:00
2c620d1d67 cleanup 2020-07-05 15:13:23 -04:00
5e7a7029d1 make vscode_init.cmd smart enough to apply cmder settings if launched from inside or outside cmder 2020-07-04 14:23:16 -04:00
f1c1354c00 make vscode_init.cmd smart enough to apply cmder settings if launched from inside or outside cmder 2020-07-04 13:43:18 -04:00
0f12de345b Update init.bat 2020-07-02 07:00:25 -04:00
c332ab1a34 Fix bug introduced in 1.3.15 2020-07-01 16:24:36 -04:00
4403edb110 Update init.bat 2020-07-01 08:26:44 -04:00
00bc5439fd Merge branch 'fix_git' into fix_global_vars_vscode_err 2020-06-29 07:51:31 -04:00
da5f1bc4db fix git detect 2020-06-29 07:49:22 -04:00
52f5ad62c3 changelog 2020-06-26 22:29:26 -04:00
250ae06e7a fix vscode terminal errors when setting cmder fast_init=1 outside cmder 2020-06-26 22:27:29 -04:00
bc7984769c Merge pull request #2338 from daxgames/master
CHANGELOG.md
2020-06-26 16:49:35 -04:00
130dc750be CHANGELOG.md 2020-06-26 16:45:21 -04:00
c6edbc0068 Merge pull request #2311 from daxgames/fix_path_enh_recurs
Fix and enhance enhance_path_recursive
2020-06-26 16:27:42 -04:00
c0eeec6608 Merge pull request #2335 from kvittokonito/custom_window_icons
Added support for setting custom icons for Cmder window
2020-06-26 16:25:34 -04:00
ee25dbaab6 Removed leftover debug text in error message box. 2020-06-24 07:25:30 +02:00
e3ad9c3953 Merge branch 'custom_window_titles'
# Conflicts:
#	launcher/src/CmderLauncher.cpp
2020-06-24 07:23:28 +02:00
31df5c3e5e Added support for setting custom titles for Cmder window. 2020-06-24 07:17:48 +02:00
e9f20aea91 Added build configurations for x64. 2020-06-24 03:01:54 +02:00
29aa75e158 Added support for setting custom icons for Cmder window. 2020-06-24 03:01:22 +02:00
8781779636 Update init.bat
If CMDER_CONFIGURED==1 skip to :CMDER_CONFIGURED
2020-06-09 19:41:08 -04:00
31c019b7e4 Update init.bat
Move skip to user config below clink enablement in cmder_configured == 1
2020-06-08 21:18:23 -04:00
4d86559841 Update init.bat
Remove cmder_configured goto
2020-06-08 21:03:41 -04:00
a5dcf9c260 Merge pull request #2323 from SVijayB/Broken-links
Update README.md
2020-06-07 15:52:46 -04:00
a999d17f71 Allow setting cmder init.bat arg vars globally on windows. 2020-06-07 15:32:15 -04:00
04c784cb16 Allow setting cmder init.bat arg vars globally on windows. 2020-06-07 14:49:02 -04:00
a2ce74f981 Update README.md 2020-05-25 00:27:53 +05:30
b91bb84f3d fix cexec.cmd 2020-05-10 10:56:12 -04:00
35ace106c8 Merge pull request #2308 from wtof1996/update-git
Update git for windows to 2.26.2
2020-04-29 13:42:43 -04:00
1861983469 readme 2020-04-29 13:40:39 -04:00
1f5ea5e596 Fix and enhance enhance_path_recursive 2020-04-29 12:03:24 -04:00
2936abe2a5 Update git for windows to 2.26.2 2020-04-28 11:18:24 +08:00
c9bc1f6b83 Merge pull request #2294 from daxgames/1.3.15
Fix Cmder issue #2290
2020-04-06 10:18:26 -04:00
be5ec648c4 Fix Cmder issue #2290 2020-04-06 10:15:00 -04:00
ab3639540f Merge pull request #2293 from daxgames/1.3.15
1.3.15-pre
2020-04-06 08:50:15 -04:00
2517f55f15 Merge branch 'master' into 1.3.15 2020-04-06 08:48:19 -04:00
1af12666e4 move git functions to git lib 2020-04-06 08:46:46 -04:00
93f8718489 move git functions to git lib 2020-04-06 08:20:26 -04:00
1071221468 Fix an issue with clink.find_files() return order not always consistent, leading to .init.lua not being run first lua path being broken (#2278) 2020-03-14 13:01:06 +00:00
a92bb1947f Merge pull request #2265 from andyburgess/master
Fixes #2247, fixes #2254
2020-03-05 21:22:08 -05:00
251968b4c6 Fixes #2247, fixes #2254 2020-02-21 11:52:52 -05:00
638d82e989 Update CHANGELOG.md 2020-01-08 21:43:09 -05:00
0e37a4c2f9 Merge pull request #2222 from daxgames/1.3.14
1.3.14
2020-01-08 21:34:19 -05:00
ca2550b70e Fix issue #2214 2020-01-06 23:03:11 -05:00
492fc284f2 Fix issue #2214 2020-01-06 22:57:29 -05:00
ec06f3e39b changelog 2020-01-06 22:50:03 -05:00
850e4ec045 Merge pull request #2237 from jrappen/patch-1
Bump git-for-windows to v2.24.1.windows.2
2020-01-06 22:40:49 -05:00
fe3d2034ef Bump git-for-windows to v2.24.1.windows.2 2020-01-06 22:45:17 +01:00
180e72a6aa revert --no-log to fix windows 7 clink prompt 2020-01-05 13:52:23 -08:00
93cf865071 post-install fixes 2020-01-05 16:41:02 -05:00
b41aac982c Merge pull request #2223 from vladimir-kotikov/patch-6
Update clink-completions
2019-12-05 13:23:36 -05:00
8df688bada Update clink-completions
https://github.com/vladimir-kotikov/clink-completions/releases/tag/0.3.5
2019-12-05 10:53:32 +03:00
84917159ec fixes for cmd:cmder init script 2019-12-04 16:14:36 -05:00
750560851f fixes for cmd:cmder init script 2019-12-04 16:13:08 -05:00
9b29668250 fixes for cmd:cmder init script 2019-12-04 16:09:38 -05:00
a857d8419c fixes for cmd:cmder init script 2019-12-04 16:04:16 -05:00
0cf1c5e2eb fix 2019-11-23 18:13:03 -05:00
ddec3e8425 Merge pull request #2212 from daxgames/goo_per_shell
dd per shell git opt out
2019-11-23 11:59:25 -05:00
2428e8529f dd per shell git opt out 2019-11-23 11:54:53 -05:00
3eb82d4095 Merge pull request #2203 from daxgames/conemu191012
update conemu to 19.10.12
2019-11-19 17:21:05 -05:00
589b48d06e update conemu 2019-11-09 17:50:57 -05:00
67f35bc05d Merge pull request #2199 from daxgames/git_opt_out
Git opt out
2019-11-09 17:03:07 -05:00
9724151f06 allow git prompt status opt out for powershell and bash 2019-11-09 16:40:55 -05:00
c04cc6dc7f allow git prompt status opt out for powershell and bash 2019-11-09 16:39:57 -05:00
3ee244e4c1 allow git prompt status opt out for powershell and bash 2019-11-09 16:36:16 -05:00
44bc089ee4 move lambda to cmder prompt method for easier user change 2019-11-03 14:14:47 -05:00
6ab4599a4d separate powershell functions from profile.ps1 2019-11-03 13:07:20 -05:00
dac4b27e28 separate powershell functions from profile.ps1 2019-11-03 12:59:36 -05:00
661f59d0fb Fix #2191 profile.ps1: CheckGit does not export $gitLoaded 2019-11-03 12:36:28 -05:00
5a6f873d2b README.md 2019-11-03 11:29:18 -05:00
788d4e0caa README.md 2019-11-03 11:28:18 -05:00
f1fbd98093 README.md 2019-11-03 11:25:02 -05:00
74fcb5b62b README.md 2019-11-03 11:23:37 -05:00
60279fea04 README.md 2019-11-03 11:22:29 -05:00
7877d417f8 changelog 2019-11-03 11:13:55 -05:00
44a8bf5802 add ability to disable git 2019-11-03 11:00:27 -05:00
b70a03cde0 Merge pull request #2194 from daxgames/fix_path_with!
Fix path with ! in cmder_root dir path
2019-11-01 17:19:03 -04:00
8cf51e454a CHANGELOG.md 2019-10-27 17:06:02 -04:00
f1b1ac0ec1 CHAMGELOG.md 2019-10-27 16:57:28 -04:00
06b0c0d3c2 cleanup 2019-10-27 16:43:51 -04:00
f1a9721256 Update init.bat 2019-10-22 22:44:17 -04:00
46c8099317 Update CHANGELOG.md 2019-10-22 22:41:44 -04:00
f44c68273b Merge pull request #2193 from glucas/fix/2192
Fix #2192: Set default prompt hooks before loading user profile
2019-10-22 21:45:32 -04:00
7f69f15637 Fix #2192: Set default prompt hooks before loading user profile 2019-10-22 11:17:13 -04:00
3736508b2c Update template issue (#2189)
* fix unclear guide

* m. update
2019-10-14 19:37:55 +02:00
4575ac3209 ⬆️ Update ConEmu to 190714
Release Notes: https://conemu.github.io/en/Whats_New.html
2019-10-12 19:45:23 +02:00
035f209bc4 ⬆️ Update Git to 2.23.0
Release Notes: https://github.com/git-for-windows/git/releases/tag/v2.23.0.windows.1
2019-10-12 19:43:46 +02:00
e4651cf7b4 Bare doubledash for conemu commands (#2174)
* Add bare doubledash command line option

The '--' parameter is a common POSIX-style option.  All command-line parameters after the double dash will be joined by a space and forwarded to conemu.

* add bare doubledash command line option

The "--" option indicates that the remaining portion of the command line is forwarded to conemu. Quotes and spacing is retained.

* move all doubledash related code together

* remove unused variable
2019-10-06 21:52:50 +01:00
19a2fd11e3 Clink Completions 0.3.4 (#2177)
* update Changelog, clink-completions 0.3.4, fix ps fg color

* Update CHANGELOG.md

* Update CHANGELOG.md
2019-09-28 02:21:47 +02:00
feee4eaed2 Merge pull request #2153 from mcovalt/clink_nolog
Disable clink logging
2019-09-14 09:13:04 -04:00
b310a2c47c Disable clink logging 2019-08-29 12:48:52 -04:00
22afc40a08 cleanup 2019-08-22 06:27:39 -04:00
c499456f97 cleanup 2019-08-22 06:24:49 -04:00
34468ef2fd cleanup 2019-08-22 06:20:19 -04:00
5cb8021864 Merge branch 'fix_path_with!' of https://github.com/daxgames/cmder into fix_path_with! 2019-08-22 06:11:18 -04:00
468dba474e fixes 2019-10-13 15:47:25 -04:00
db42252ef2 cleanup 2019-10-13 10:18:04 -04:00
57b328b209 cleanup 2019-10-13 10:15:26 -04:00
05836e761e merge 2019-10-13 10:11:38 -04:00
e8b33aa45b Merge branch 'master' of https://github.com/cmderdev/cmder into fix_path_with! 2019-10-13 10:11:25 -04:00
377d97e56a fix path with ! in dir 2019-10-13 10:07:23 -04:00
3a44bc809d add ~ match to vendor/clink.lua/ 2019-09-27 18:17:24 -04:00
45e5600249 update Changelog, clink 0.3.4, fix ps fg color 2019-09-26 18:07:25 -04:00
ff595e62b1 Merge pull request #2144 from daxgames/1.3.12
1.3.12 Release
2019-08-18 18:33:40 -04:00
a85a208b20 CHANGELOG.md 2019-08-18 18:26:21 -04:00
ecda3acfdf Update CHANGELOG.md 2019-08-18 17:49:56 -04:00
5477b7812d Re-arrange CHANGELOG.md. 2019-08-18 17:39:29 -04:00
81951a4a14 Merge branch 'master' of https://github.com/cmderdev/cmder 2019-08-18 16:33:43 -04:00
0280593d4c Merge pull request #2123 from daxgames/alias
CHANGELOG.md
2019-07-07 14:06:57 -04:00
f8e859f844 changelog 2019-07-07 14:05:14 -04:00
af4c1fddbb Merge pull request #2122 from daxgames/alias
restore old alias.cmd without 'create' option
2019-07-07 13:56:18 -04:00
b58b3b4547 restore old alias.cmd without 'create' option 2019-07-07 13:52:34 -04:00
9184f8e2bf Merge branch 'master' of https://github.com/cmderdev/cmder into alias 2019-07-07 13:32:47 -04:00
1e0e2193e0 Merge branch 'master' into alias 2019-07-07 13:31:13 -04:00
38fd3468fe restore old alias.cmd without 'create' option 2019-07-07 13:30:34 -04:00
ebd977778b Merge pull request #2113 from SupinePandora43/vscode
vscode.bat
2019-06-27 08:27:37 -04:00
72dd8376cd move
https://github.com/cmderdev/cmder/pull/2113#issuecomment-506044156
2019-06-27 16:00:55 +05:00
b61752f89e vscode.bat
add that to settings.json

`"terminal.integrated.shell.windows": "cmd.exe",
"terminal.integrated.shellArgs.windows": [
    "/K",
    "%CMDER_ROOT%/vscode.bat",
]`

for using cmder inside vscode
2019-06-25 12:37:57 +04:00
8f59d529f4 Update stale comments 2019-06-20 10:12:12 +01:00
711c436f04 Merge branch 'master' of https://github.com/cmderdev/cmder 2019-06-09 16:18:38 -04:00
ea531cdd44 Fix post-install.bat not running and deleting itself (#2106)
* Fix post-install.bat not running

* Changelog

* Changelog
2019-06-03 11:23:00 +01:00
73c21d1a59 Wrap labels with quotes 2019-05-24 13:54:09 +01:00
a97ce1f950 Create stale.yml 2019-05-24 13:47:01 +01:00
4510abb3c8 Merge pull request #2096 from eziosella/pull-request-2094-pars-forwarding
Add `/x "CONEMU ARGS"` command line argument.
2019-05-22 08:30:18 -07:00
6d132c2665 Merge pull request #2099 from warthurton/patch-1
Update README.md
2019-05-22 08:27:53 -07:00
543c7ca6e9 Replace /FWPARS argument with /X as "daxgames" request. 2019-05-19 22:54:47 +02:00
efc978f6f8 Update README.md
Added /t switch for timed init mode.
2019-05-16 15:13:07 -04:00
5def1c584a Add FWPARS cmdline argument.
This argument forwards parameters to ConEmu app.

	e.g. Cmder.exe /FWPARS "-min -tsa"

In this case Cmder will start minimized on TaskBar
2019-05-12 15:18:15 +02:00
865e443fcd Merge pull request #2068 from cmderdev/history_cmd_index_sync
Print Index in History Command Output
2019-05-05 17:28:07 -04:00
893207453d CHANGELog 2019-05-05 17:27:25 -04:00
5e5e0ece73 CHANGELog 2019-05-05 17:25:47 -04:00
834f031442 Merge branch 'master' of https://github.com/daxgames/cmder into history_cmd_index_sync 2019-05-05 17:19:49 -04:00
0bd847e695 Merge pull request #2083 from JoshuaWebb/master
Close file handles in clink.lua
2019-05-05 17:13:57 -04:00
efe64ee6fd Merge pull request #2072 from daxgames/alias
Alias
2019-05-05 17:12:13 -04:00
5f9f3560c8 fix commnd line help 2019-05-05 17:11:31 -04:00
9b9bb13f6a fix commnd line help 2019-05-05 17:06:44 -04:00
52eea5fe9f Close file handles in clink.lua 2019-04-19 16:16:45 +10:00
ab3f0b76fb fixes 2019-04-01 22:17:53 -04:00
528bbea7f5 fixes 2019-04-01 22:10:21 -04:00
f20eca01ac fixes 2019-04-01 17:34:00 -04:00
26d8d58e77 Merge branch 'master' of https://github.com/cmderdev/cmder into alias 2019-04-01 17:32:57 -04:00
cf134604bb fixes 2019-04-01 17:31:46 -04:00
67b374ad37 revert alias.cmd changes 2019-04-01 17:09:05 -04:00
d592f80364 Merge branch 'master' of https://github.com/cmderdev/cmder into alias 2019-04-01 17:04:03 -04:00
3e40c80331 new alias create syntax 2019-04-01 16:58:45 -04:00
ac2082d56d Merge pull request #2060 from daxgames/ps1_prompt
Fixes and More Cmder Like Powershell
2019-04-01 15:20:37 -04:00
a813e359c5 don't delete aliases by default but provide an easy way for users to do so. 2019-04-01 09:09:32 -04:00
345562dbd0 Merge branch 'ps1_prompt' of https://github.com/daxgames/cmder into ps1_prompt 2019-03-31 16:48:10 -04:00
13de4924ca make powershell use of bash commands more bash like 2019-03-31 16:47:36 -04:00
f39b921121 fixes 2019-03-31 16:11:14 -04:00
43d5a7b833 Merge branch 'master' of https://github.com/cmderdev/cmder into history_cmd_index 2019-03-31 16:04:53 -04:00
b424012a08 make debug messages more verbose 2019-03-31 09:48:58 -04:00
192c2f4dd1 fix git detection 2019-03-31 09:47:50 -04:00
4622aa87e4 Merge branch 'master' of https://github.com/cmderdev/cmder into ps1_prompt 2019-03-23 15:05:05 -04:00
0b2c9bf005 Merge branch 'ps1_prompt' of https://github.com/daxgames/cmder into ps1_prompt 2019-03-23 15:04:06 -04:00
081624d88e cleanup 2019-03-23 15:03:44 -04:00
280bbfff1f update issue template (#2062) 2019-03-20 22:57:13 +01:00
a93fff6798 Update init.bat 2019-03-17 15:09:02 -04:00
8abfa9d413 add back shell context menu to drives on register unregister 2019-03-16 19:15:36 -04:00
98a64b71b2 Allow full ps1 prompt customization by 'config/*.ps1' scripts 2019-03-16 13:52:47 -04:00
f2b26352b4 Merge branch 'master' of https://github.com/cmderdev/cmder 2019-03-12 21:12:42 -04:00
63128ed52f polished issues template (#2056)
- added version subsection
- better worded upstream technologies notice
- more clear instructions
2019-03-07 14:29:46 +01:00
036efc2fb8 Merge branch 'master' of https://github.com/cmderdev/cmder 2019-03-03 07:08:10 -05:00
2582891307 Merge branch 'master' of https://github.com/cmderdev/cmder 2019-03-01 19:54:14 -05:00
ec42046297 Merge pull request #2017 from b0bh00d/master
Replaced 'hg id -ib'
2019-03-01 14:00:22 -05:00
522656845f Merge pull request #2041 from cmderdev/upate_readme
Update README.md
2019-03-01 13:58:40 -05:00
6b22a5c583 Merge pull request #2055 from daxgames/git_clink_changes
Git and Clink changes
2019-03-01 13:57:32 -05:00
e75958b881 Merge branch 'master' of https://github.com/cmderdev/cmder 2019-03-01 13:47:03 -05:00
8ec252276f changelog 2019-02-28 18:13:19 -05:00
16bf572cdf Merge branch 'master' of github.com:cmderdev/cmder into git_clink_changes 2019-02-28 18:03:58 -05:00
7bd25e95e1 upgrade git to 2.21.0 2019-02-28 17:55:16 -05:00
cc12b848ac provide default settings for clink that updates the history file in real time 2019-02-28 17:44:28 -05:00
20d55c1469 all clink disable by setting CMDER_CLINK=0 befor starting task 2019-02-28 17:37:45 -05:00
06e6c63b7f Update README.md 2019-02-18 11:41:11 -05:00
89499f2a60 Replaced the 'hg -id' command with the 'hg branch' and 'hg status' pair for improved response times. 2019-01-20 21:02:31 -07:00
95e5169476 Merge remote-tracking branch 'upstream/master' 2019-01-20 20:50:09 -07:00
760f4e579e ignore all /d arg if running inside vscode 2019-01-06 18:09:06 -05:00
6d8f7a290a ignore all args if running inside vscode 2019-01-06 17:46:50 -05:00
2a4e9d8301 workaround vscode tasks showing cmder debug output 2019-01-06 17:27:04 -05:00
961f38a399 Updated the HG prompt (#2002)
Per our email discussion, I have updated the HG prompt code to use the '-ib' option to 'hg id' so the branch name is always available, regardless of the state of the working copy.
2019-01-05 19:56:30 +01:00
5a48e568a8 Updated the HG prompt code to use the '-ib' option to 'hg id' to always have the branch name available. 2019-01-01 11:17:53 -07:00
524fce25ab Merge pull request #1999 from daxgames/fix_ssh_agent_default
fix ssh-agent in user_profile.cmd.default
2018-12-22 17:13:35 -05:00
46bde1af8b fix ssh-agent in user_profile.cmd.default 2018-12-22 17:07:31 -05:00
9a47bce6ac fix ssh-agent in user_profile.cmd.default 2018-12-22 17:05:08 -05:00
0a3be464be Merge pull request #1997 from cmderdev/revert-1996-fix_ssh_agent_default
Revert "Update Changelog"
2018-12-22 16:56:42 -05:00
b2723d6f6a Merge pull request #1998 from cmderdev/revert-1995-fix_ssh_agent_default
Revert "fix sshagent call in user_profile.cmd.default"
2018-12-22 16:56:19 -05:00
4f2ced57df Revert "fix sshagent call in user_profile.cmd.default" 2018-12-22 16:55:56 -05:00
88169b8721 Revert "Update Changelog" 2018-12-22 16:55:17 -05:00
f6db922732 Merge pull request #1996 from daxgames/fix_ssh_agent_default
Update Changelog
2018-12-22 16:40:28 -05:00
e822d55aa5 Changelog 2018-12-22 16:38:51 -05:00
ccb6cb80e5 Changelog 2018-12-22 16:37:28 -05:00
e56ed810a0 Changelog 2018-12-22 16:34:23 -05:00
7e8d67caa8 Merge pull request #1995 from daxgames/fix_ssh_agent_default
fix sshagent call in user_profile.cmd.default
2018-12-22 16:12:49 -05:00
4e4f050374 fix sshagent call in user_profile.cmd.default 2018-12-22 15:40:09 -05:00
51e75d4bb5 add percent escaping for string.gsub (#1991)
In `string.gsub()`, the `%` character has special meaning and must be escaped to be treated verbatim, otherwise the "invalid use of '%' in replacement string" warning will show up.

This adds a verbatim() function for that purpose. It fixes this warning for situations where `'%` characters are in the current path (cwd), version control branch names, or in the previous `PROMPT` set by the user.
2018-12-19 21:17:45 +01:00
f4389fc552 Merge pull request #1988 from daxgames/no_prefer_nix_option_
Prefer /nix_tools option
2018-12-16 13:08:56 -05:00
8101923242 Merge pull request #1987 from seeq12/default-files-user-profile
Use default files for default user profiles
2018-12-16 10:31:48 -05:00
7e1bc4297a Move ssh-agent logic to lib script 2018-12-13 21:12:18 -08:00
0f30329e38 Update init.bat 2018-12-13 21:55:08 -05:00
25820ae4d4 Merge pull request #1975 from patstew/git-no-unix
Add /git_no_unix switch to init.bat to prevent adding !GIT_INSTALL_ROOT!\usr\bin to PATH
2018-12-13 21:51:01 -05:00
528a69dab9 update nix_tools option to allow preferring nix tools 2018-12-13 20:54:18 -05:00
0c9e0e2f8c Use default files for default user profiles 2018-12-13 12:13:17 -08:00
20eb7b8e81 Add /nix_tools switch to init.bat to optionally add !GIT_INSTALL_ROOT!\usr\bin to PATH 2018-12-13 16:09:52 +00:00
ab02c4ce46 Merge pull request #1982 from haroldhues/master
make /register work with /single
2018-12-12 21:05:52 -05:00
f9f06a5595 make /register work with /single 2018-12-07 21:05:51 -08:00
8ac540ebb6 debug 2018-12-02 11:51:00 -05:00
fcab51da2b remove file 2018-12-02 11:46:23 -05:00
dc492c836f Merge branch 'master' of https://github.com/cmderdev/cmder into prefer_nix_option 2018-12-02 11:46:01 -05:00
1eb03dd1b8 add '/prefer_nix' switch to init.bat 2018-12-02 11:44:18 -05:00
3163d6d1c3 Merge pull request #1971 from cmderdev/fix_1.3.9
fix initial launch of cmder starting with conemu default cfg
2018-11-30 15:00:35 -06:00
5c7f4943ad fix initial launch of cmder starting with conemu default cfg 2018-11-30 14:56:30 -05:00
378ebff566 Merge pull request #1969 from rjvdboon/fix_1956
Improve LANG env var detection
2018-11-30 07:45:33 -06:00
572a94ca3a Improve LANG env var detection 2018-11-30 12:01:21 +01:00
22aa59bd83 Merge pull request #1949 from daxgames/multi-user
Use user_conemu.xml or conemu-%computername%.xml directly if '-c [path]' is used to start cmder.
2018-11-28 19:04:05 -06:00
eb6a332da2 Merge branch 'master' of https://github.com/cmderdev/cmder into multi-user 2018-11-22 16:21:24 -06:00
dd614642b2 Merge pull request #1961 from DanielChesters/master
Ensure use the system find and findstr command instead find/findstr from path
2018-11-22 16:18:28 -06:00
036cf09360 Ensure use the system find and findstr command instead find/findstr from path. Fix #1959 2018-11-22 21:14:02 +01:00
7203671fc9 fix powershell profile.d 2018-11-17 19:55:24 -05:00
787ac3773c make /register work with /c 2018-11-12 09:22:05 -05:00
b16aa7a29e better command line error handling 2018-11-12 08:30:44 -05:00
d8e8fc8adb add /m command line argument to use machine config rather than user config for conemu. 2018-11-12 07:56:55 -05:00
0efeaa91fa cleanup 2018-11-11 08:04:35 -05:00
8c0817941e added /c [path] use vendored conemu.xml as a default starting point if it exists 2018-11-11 07:55:14 -05:00
e17b04cbb9 cleanup 2018-11-10 18:49:33 -05:00
e904ebce72 use user_conemu.xml or conemu-%computername%.xml directly if '-c [path]' is used to start cmder. 2018-11-10 17:26:08 -05:00
a226019d5a Merge pull request #1948 from daxgames/fix_timer
fix timer error
2018-11-10 14:00:38 -05:00
d04cc1f04e fix timer error 2018-11-10 13:57:26 -05:00
2e77513674 Merge pull request #1947 from daxgames/fix_ignore_config
Fix ignore config
2018-11-10 09:46:25 -05:00
1640e9c01d fixes' 2018-11-10 09:45:23 -05:00
ddbfd1da18 Merge branch 'fix' 2018-11-10 09:38:58 -05:00
bc7c6e97b3 Fixed move of default conemu.xml to the vendor folder 2018-11-10 09:32:44 -05:00
45f05ed8fa Merge pull request #1946 from cmderdev/revert-1945-ignore_config
Revert "Ignore `%cmder_root%\config`"
2018-11-10 09:02:00 -05:00
72b676b939 Revert "Ignore %cmder_root%\config (#1945)"
This reverts commit 637b0fd3ac.
2018-11-10 06:42:27 -05:00
637b0fd3ac Ignore %cmder_root%\config (#1945)
* move default comemu.xml to vendor folder

* ignore all of config folder

* cleanup
2018-11-10 02:40:16 +01:00
ce62db6d33 cleanup 2018-11-08 21:45:21 -05:00
f3ed7b6d1b ignore all of config folder 2018-11-08 21:35:23 -05:00
57e5ae1719 move default comemu.xml to vendor folder 2018-11-08 21:25:42 -05:00
a5bdecca77 Add /f for fast init. (#1942)
The below enables Cmder Fast Init mode for `cmd.exe` sessions.  This is more like the Cmder 1.3.5 init process.  See issue #1821 

Cmder Fast Init mode bypasses or disables the following Cmder 1.3.6+ features:

* Git root and version detection.  Defaults to `%cmder_root%\vendor\git-for-windows` if it exists.
* Path enhance validation before path modify so `%Path%` enhancements are forced.
* Recursive path add for `"%CMDER_ROOT%\bin"`
* Recursive path add for `"%CMDER_USER_BIN%\bin"` if `/c [user_config_folder` is specified.
* `/d` switch to enable debug output.
* `/v` switch to enable debug output.

Add `/f` to Cmder task as shown below t enable fast init:

_Note 1: This setting is invalid in Cmder `Powershell` and `Bash` sessions~_

_Note 2: Add `/t` also to see init timer output_

![image](https://user-images.githubusercontent.com/7318053/47957637-052e3880-df90-11e8-93ef-91e1ab696d82.png)

Cuts ~2.4 seconds off of init time.

![image](https://user-images.githubusercontent.com/7318053/47957795-45db8100-df93-11e8-8ae0-551d12c4e2dc.png)
2018-11-04 01:36:51 +01:00
5be25f29f8 Initialize time_init to fix init error message 2018-11-03 18:52:26 +01:00
cb78f0486a Remove duplicate Install-Module detection
Block was inserted twice.
2018-11-03 02:15:03 +01:00
f5ac81daa0 Fix typos, remove escaping inside inline code, replace single quote with backtick 2018-11-03 02:14:49 +01:00
da0aea96f8 Fix typo and broken link 2018-11-03 02:14:49 +01:00
3a11d45552 add diag helper scripts and adds to the path (#1918)
These scripts are to help us help our users by getting a relative picture of their environment that they can submit with an incident.
2018-11-02 14:00:40 +01:00
c5a6afbf5b Merge pull request #1905 from narnaud/git_shim
Ensure the right git path is found in case of shim.
2018-10-12 22:55:48 +02:00
a607f0f2d5 Ensure the right git path is found in case of shim.
If the git found is a shim, we need to follow the path to the actual git
directory to set the GIT_INSTALL_ROOT variable.
This happens when installing git via scoop for example.
2018-10-10 07:14:50 +02:00
66da1716bc Merge pull request #1758 from xiazeyu/master
lib to check init.bat's custom args
2018-09-30 18:06:42 +02:00
bfaa194468 Merge pull request #1 from daxgames/cexec
flag_exists.cmd to cexec
2018-09-30 23:17:23 +08:00
c3956e307a Merge pull request #1889 from leochien0102/leochien0102-patch-1
Leochien0102 Fix the 'was unexpected at this time.' at start
2018-09-29 23:15:26 +02:00
3344268c24 Merge pull request #1887 from gaoslin/master
Update init.bat, fix PR #1665
2018-09-29 17:06:53 -04:00
8ff459b309 fixes 2018-09-24 19:07:48 -05:00
103d0a6cea more headers 2018-09-24 18:51:55 -05:00
8dc9bc9ae1 fix the 'was unexpected at this time.'
Change the single quotation marks to double while path concerned
2018-09-21 16:01:52 +08:00
bb4ed4af51 Update init.bat 2018-09-18 17:26:11 +08:00
ae2fda72fd Merge pull request #1884 from daxgames/fix_lua
Fix lua
2018-09-18 03:03:57 +02:00
bda09bc274 init.bat update for cexec 2018-09-16 16:23:22 -05:00
749ce17dbe git prompt yellow 2018-09-16 15:53:49 -05:00
8cf59d1cbf cleanup 2018-09-16 10:21:37 -05:00
1d36ba4ed4 fix user lua and git detection 2018-09-16 10:18:10 -05:00
564ef5220e allow conditionally setting environment variables 2018-09-15 16:25:31 -05:00
f84da84e15 cleanup 2018-09-15 15:12:45 -05:00
86544c9188 readme.md 2018-09-15 15:11:50 -05:00
4aec21ce19 readme.md 2018-09-15 15:10:35 -05:00
0be94725bd readme.md 2018-09-15 15:06:13 -05:00
9dce9d0f62 added exit codes 2018-09-15 13:55:54 -05:00
669e997602 flag_exists.cmd to flag_exec.cmd, also to lib as an option 2018-09-15 12:52:23 -05:00
0730c6e32b Merge branch 'master' into master 2018-09-15 11:28:04 +08:00
0d2e16c653 Merge pull request #1871 from daxgames/user_lua
Embed 'alias' functionality into 'vendor\bin' and Load User Lua files
2018-09-13 22:41:19 +02:00
35eab7a51a Merge pull request #1834 from b0bh00d/master
Refactored the Mercurial prompt code to be more efficient.
2018-09-13 18:07:07 +02:00
2cfa7c45fc ⬆️ ConEmu to 180626
release notes: https://conemu.github.io/en/Whats_New.html
2018-09-13 18:05:36 +02:00
ab0de6d157 ⬆️ Update Git to 2.19.0
Release notes: https://github.com/git-for-windows/git/releases/tag/v2.19.0.windows.1
2018-09-13 17:58:39 +02:00
bd9cff2691 cleanup 2018-09-05 18:07:27 -05:00
9b121f1c0a switch to taskdialog 2018-09-05 04:22:42 +04:30
cfe22c8ef0 set encoding to UTF-8 2018-09-05 03:22:57 +04:30
3ef53f64d4 add strings.rc2 2018-09-05 03:18:59 +04:30
4a10e0b2eb mainstram build tools 2018-09-04 00:31:59 +04:30
7b191d3caf cleanup 2018-09-03 14:54:52 -05:00
277972a7f2 fixed 2018-09-03 12:59:43 -04:00
b1aa687d4f handle start dir args with trailing \" 2018-09-03 11:07:06 -05:00
ec4c815264 cleanup 2018-09-03 06:08:44 -05:00
12b9af99c5 '.gitignore' 2018-09-03 06:05:20 -05:00
d58c6c2070 cleanup 2018-09-02 19:17:16 -05:00
06c7cc969c Merge branch 'user_lua' into tcc 2018-09-02 19:09:49 -05:00
44b4b7a195 '.gitignore' 2018-09-02 19:09:12 -05:00
9869f9a372 cleanup 2018-09-02 18:59:14 -05:00
85c4a5b4af cleanup 2018-09-02 18:56:17 -05:00
3f96336610 verbos output 2018-09-02 18:53:49 -05:00
a8cae77395 Merge branch 'user_lua' into tcc 2018-09-02 18:53:19 -05:00
823eeaf082 cmder_shell settings 2018-09-02 18:18:59 -05:00
823e6fee6e add cmder_shell method 2018-09-02 17:32:20 -05:00
34f8c43d98 replace - with _ in debug-output and verbose-output 2018-09-02 09:16:40 -05:00
352a16f84d trying to get tcc working 2018-09-02 09:04:46 -05:00
541fc16daf Trying to get tcc working 2018-09-01 22:08:00 -05:00
75e6644d2a rename 2018-09-01 18:35:02 -04:00
7d40ea4609 modify message 2018-09-01 18:32:21 -04:00
451fb46ce1 move user-aliases.cmd to user_aliases.cmd 2018-09-01 18:17:09 -04:00
70788dc1e5 gitignore 2018-09-01 17:43:53 -04:00
c25ff75187 move bin\alias.bat to vendor\bin\alias.cmd 2018-09-01 17:39:24 -04:00
059a31618b cleanup 2018-09-01 15:32:43 -04:00
e69e7f9b82 run user lua afer cmder lua 2018-09-01 14:59:40 -04:00
e93231114f Merge remote-tracking branch 'origin' into user_lua 2018-09-01 14:35:41 -04:00
08550751da Merge pull request #1860 from gucong3000/lang
Add %LANG% support
2018-09-01 00:32:02 +02:00
49da3745bc Fix #1806 #1675 (#1870)
## Rename user-profile.* user_profile.* to resolve #1806, #1675

* This is a backward compatible fix and will automatically and silently rename users '%cmder_root%/config/user-profile.\*' to '%cmder_root%/config/user_profile.\*' and '[user_specified_config_root]/user-profile.\*' to '[user_specified_config_root]/user_profile.\*' if the sources exist.

  * Cmder.exe does this for cmd.exe sessions.
  * The init scripts for bash and Powershell handles it for these shells
2018-09-01 00:02:56 +02:00
e4fb0d694b Revert "replace user-aliases with user_aliases"
This reverts commit d91438de47.
2018-08-31 18:41:06 +02:00
798da058cc Merge pull request #1865 from m01ar/master
Dot-Sourcing Error: PowerShell 5.1 and Windows Software Restriction Policy compatibility
2018-08-30 15:24:38 +02:00
d91438de47 replace user-aliases with user_aliases 2018-08-30 15:22:33 +02:00
08e1244fe5 fix some spelling issues 2018-08-30 15:22:28 +02:00
02f4a9dfe5 Merge pull request #1866 from arionkrause/master
Fixed typo
2018-08-30 15:15:29 +02:00
e80ad2356f Fixed typo 2018-08-29 22:07:26 -03:00
21b1f00981 Powershell 5.1 compatibility
Fixes Powershell 5.1 error when Windows Software Restriction Policy is enabled:

bin\vendor\profile.ps1 : Cannot dot-source this command because it was defined in a different language mode. To invoke this command without importing its contents, omit the '.'  operator.
At line:1 char:1
+ . 'bin\vendor\conemu-maximus5\..\profi ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (:) [profile.ps1], NotSupportedException
    + FullyQualifiedErrorId : DotSourceNotSupported,profile.ps1
2018-08-29 14:42:01 +03:00
34bb62409a Update profile.ps1
Fixes Powershell 5.1 error when Windows Software Restriction Policy is enabled:

bin\vendor\profile.ps1 : Cannot dot-source this command because it was defined in a different language mode. To invoke this command without importing its contents, omit the '.'  operator.
At line:1 char:1
+ . 'bin\vendor\conemu-maximus5\..\profi ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (:) [profile.ps1], NotSupportedException
    + FullyQualifiedErrorId : DotSourceNotSupported,profile.ps1
2018-08-29 14:38:59 +03:00
b901a4a569 add LANG support 2018-08-23 11:57:16 +08:00
39f47870a3 chore: unite slash 2018-08-06 16:05:31 +08:00
f4ee915678 docs: update to latest useage 2018-08-06 13:21:45 +08:00
192056e19b Merge branch 'master' into master 2018-08-06 13:14:45 +08:00
f6c2d9c31e refactor: reduce global varible useage, fixed quote issue, added parameters support 2018-08-06 13:09:59 +08:00
b3200efa7e doc: fix typo 2018-08-06 11:25:27 +08:00
b57e146e7a docs: migrated instructions to the wiki pages 2018-07-17 14:11:16 +08:00
0f99f66b42 Refactored the Mercurial prompt code to be more efficient. 2018-07-06 14:34:48 -06:00
4655888690 Merge pull request #1805 from SommerEngineering/patch-1
Fixed spelling in README.md
2018-06-10 20:35:56 +02:00
431c6300e5 Fixed spelling 2018-06-10 12:40:37 +02:00
e3cdf43afc better fix for #1265 2018-06-07 18:29:48 +02:00
6c016788d4 Revert "sanitize dir before assigning to prompt"
This reverts commit 0b2d7bd655.
2018-06-07 17:04:06 +02:00
0b2d7bd655 sanitize dir before assigning to prompt
Fixes #1265
2018-06-07 16:08:53 +02:00
27f51f48a4 Profile.ps1 (#1796)
* Fix GIT_INSTALL_ROOT again

* fix profile.ps1
2018-06-03 00:15:33 +02:00
34554d6b08 Update README
Add formatting to code, path, and executable identifiers to promote readability/scanability.
2018-05-31 14:35:43 +02:00
4df1d744d3 Fix lib base (#1794)
* Fix GIT_INSTALL_ROOT again

* fixed lib_base error

* fix lib help

* fix lib help
2018-05-31 14:35:02 +02:00
40b9ca4e28 Update CHANGELOG.md 2018-05-30 01:17:12 +02:00
19d5a87224 Fix GIT_INSTALL_ROOT again 2018-05-30 01:04:41 +02:00
44aadccbec ⬆️ ConEmu to 180528
release notes: https://conemu.github.io/en/Whats_New.html
2018-05-29 22:42:32 +02:00
83f411384c ⬆️ Update Git to 2.17.1
Release notes: https://github.com/git-for-windows/git/releases/tag/v2.17.1.windows.2
2018-05-29 22:37:21 +02:00
861f99d64b rename /bin/have.bat to /vendor/lib/flag_exists.cmd
Please use %flag_exists% instead of using have
2018-05-27 10:22:44 +08:00
6af44441fe Merge branch 'master' of github.com:xiazeyu/cmder 2018-05-18 21:03:07 +08:00
0ce1db97d0 fix: bug when no argument is passed in 2018-05-18 21:02:36 +08:00
0c39d0a799 Merge branch 'master' into master 2018-05-18 20:37:19 +08:00
add82a247b docs: update doc for have.bat 2018-05-18 20:34:10 +08:00
bf6dae4a24 feat: add have.bat as a wrapper 2018-05-18 20:32:05 +08:00
7d31eeaa5a enable unc paths by default 2018-05-17 15:50:06 +02:00
daa94c5462 Optimize comments of using arguments in user-profile.cmd 2018-05-04 20:14:40 +08:00
36403df91e Updates issue template, notes on README.me and fixes line ending (#1751)
* add integration notes, refined docs

* change img size

* verbose issue template

* move docs from README to WIKI

* increased politeness factor by 10%
2018-05-04 00:29:25 +02:00
a843e85c8b Fix GitHub download failures (#1760)
* Github changed to only accept TLS 1.2 connections, this fixes the resulting failures.
2018-05-04 00:28:14 +02:00
9a3a8f23d0 Little Changes 2018-05-01 08:57:02 -04:00
99f51b0fc0 fix conflict with init.bat build-in command parser, update user-profile.cmd 2018-05-01 13:02:21 +08:00
4f3fcae9d9 Merge pull request #1754 from cmderdev/daxgames-patch-2
Fix git install root
2018-05-01 02:24:26 +02:00
a06d4e93ec Pass arguments to user-profile.cmd 2018-04-30 20:31:01 +08:00
13ea026dc9 Fix git install root
This is untested so don't merge yet.  I'll test tonight.
2018-04-26 19:06:18 -04:00
dc8e572ca5 ⬆️ ConEmu to 180416
release notes: https://conemu.github.io/en/Whats_New.html
2018-04-19 09:07:55 +02:00
b2262522c9 ⬆️ Update Git to 2.17.0
Release notes: https://github.com/git-for-windows/git/releases/tag/v2.17.0.windows.1
2018-04-13 20:20:59 +02:00
9d0729fe42 ⬆️ ConEmu to 180411
release notes: https://conemu.github.io/en/Whats_New.html
2018-04-13 20:20:59 +02:00
a1e47ceaca Merge pull request #1745 from daxgames/fix_reg_cleanup
Fixes for recent reworks
2018-04-13 18:27:11 +02:00
2a18ba084c fix spelling 2018-04-12 21:43:31 -04:00
12e3761017 fix tab 2018-04-12 21:41:42 -04:00
b8890ed297 switch to debug output 2018-04-12 21:39:52 -04:00
063f30c193 fix git missing error on cmder mini cmd shell 2018-04-12 21:32:38 -04:00
bc72f20a2d reposition echo 2018-04-12 21:06:00 -04:00
78a9711447 fix unreg cleanup 2018-04-12 21:05:38 -04:00
55d9b25f57 double quote more paths
fixes #1681
2018-04-06 18:08:28 +02:00
7294092618 fix a typo 2018-04-06 00:00:11 +02:00
959073ac5c Merge pull request #1730 from DRSDavidSoft/dev-david
Generate Win32 version string based on build no, git tag or fallback to changelog
2018-04-05 23:51:06 +02:00
e746101ed2 Merge pull request #1739 from daxgames/fix_init
fix bash and powershell init scripts
2018-04-05 23:48:26 +02:00
65bf25f1d0 fix bash and powershell init scripts 2018-04-03 14:17:34 -04:00
94e7c24b72 minor typo fix 2018-03-31 00:03:39 +04:30
d6569192fc replace tabs to spaces 2018-03-30 23:57:21 +04:30
7d04ded1c2 add appveyor message 2018-03-30 23:52:32 +04:30
5c3f46fd88 fix git detection statement 2018-03-30 23:46:48 +04:30
502129d4f9 minor fix 2018-03-30 23:31:51 +04:30
b36b8a4cb3 new version handle logic 2018-03-30 23:23:44 +04:30
3965852c26 clean before build 2018-03-29 03:23:18 +04:30
93d2c427ad respect powershell naming convention 2018-03-29 01:18:57 +04:30
624deec2f0 minor edit – added a character to the verbose output 2018-03-28 22:34:28 +04:30
c817df2032 add build version str; fix padding 2018-03-28 22:30:09 +04:30
236aefe8c6 add build version string 2018-03-28 22:28:33 +04:30
2f3f1d474a specified custom manifest file 2018-03-28 22:28:01 +04:30
cb4d95e7a3 added build number, removed duplicated manifest 2018-03-28 22:26:17 +04:30
1dadade661 replaces spaces to tabs 2018-03-28 22:24:26 +04:30
2bc17c4ff2 renamed app.manifest 2018-03-28 22:22:56 +04:30
ae473ecea6 add escaped quotes handling 2018-03-28 21:24:02 +04:30
3aeca3c972 add required block to else statement 2018-03-28 21:16:27 +04:30
57a28f118d add template for version string 2018-03-28 21:14:15 +04:30
018bf45df4 add version string handler 2018-03-28 21:13:55 +04:30
f8359fc3f7 add verbose version info 2018-03-28 21:11:31 +04:30
249f7b9baf add build flags; use spaces 2018-03-28 21:07:14 +04:30
eaf7048ed7 add automatic version creation
with this commit, the build script extracts the latest version string found in `CHANGELOG.md`, and then creates appropriate resource files for the executable compilation
2018-03-28 20:48:57 +04:30
f4321bbc33 add functions to get version and generate rc
these functions can be used to a) extract the version from `CHANGELOG.md` and b) create a .rc2 file from the `sample` template by replacing its content
2018-03-28 20:41:18 +04:30
96736feecc added version.rc2.sample
this file controls how the version strings appears in the final compiled .exe file
2018-03-28 20:38:12 +04:30
dc9e385365 add cmder manifest file 2018-03-28 18:43:41 +04:30
a85cd81f00 added version resources and manifest. 2018-03-28 18:37:46 +04:30
1662678ebf fixed line endings 2018-03-28 18:16:14 +04:30
9462315789 fix /unregister 2018-03-24 08:57:14 -05:00
864f778099 load user clink 2018-03-24 08:03:28 -05:00
bcf8527f74 run markdownlint and update changelog 2018-03-24 03:34:39 +01:00
72ab0f064f update psget to the latest version 2018-03-24 00:01:08 +01:00
91f5c5379a actually show the new task 2018-03-23 23:49:54 +01:00
19bad7dfa9 open cmder in the current working dir as every other windows app works (#1725)
open cmder in the current working dir as every other Windows app works
2018-03-23 23:38:53 +01:00
afb8f52516 ignore .github dir and markdown files for packaging 2018-03-23 23:34:05 +01:00
6543c204b7 add default WSL bash task 2018-03-23 23:29:24 +01:00
0438ce5763 ⬆️ Update Git to 2.16.3
Release notes: https://github.com/git-for-windows/git/releases/v2.16.3.windows.1
2018-03-23 23:11:05 +01:00
471369f73b Made all sub-routines in init.bat importable libs (#1706) 2018-03-23 15:20:07 +01:00
66d36fdc1c Created issue_template.md (#1723)
Purpose:
- Prevent duplicated/similar issues
- Explain the suitable repo for each issue, avoiding ConEmu issues here.
- Help users to provide a better explanation to identify the problem
2018-03-23 14:32:15 +01:00
17247f2065 ⬆️ ConEmu to 180318
release notes: https://conemu.github.io/en/Whats_New.html
2018-03-19 20:57:10 +01:00
63f3f8020f Merge pull request #1707 from cmderdev/drop_xp
Drop Windows XP support
2018-03-14 13:26:56 +01:00
60880362a9 No longer use the special _xp platform tools since we no longer support XP 2018-03-13 23:53:33 +01:00
91651fc98b Drop Windows XP support 2018-03-13 23:40:07 +01:00
4243c5c222 Added pagent ssh auth support (#1391)
(and some comments on the user-profile.cmd file)

Inspired by the comments from https://github.com/cmderdev/cmder/issues/193 and my personal need to use pageant instead of OpenSSH authentication agents (which is more Window user-friendly), I have used this approach which works as expected.

Keeping the spirit of the current scripts, I left it disabled, and with some comments explaining what they all do.
2017-07-24 23:15:17 +02:00
d8444dae97 Set history_io=3 in default Clink settings
Currently the "history" command in Cmder prints commands without any index associated with any command, so you can copy/paste a command or use "!!" to execute a command from the history but, unlike BASH, you can't do "!<command_index>".

"cat" has a switch, "-n", which prints line numbers of the file being printed. This, in conjunction with "history_io=3" in Clink settings (to read/write history when editing a command") works just like BASH, i.e., you can use the index printed next to a command in the history to execute that command as "!<command_index>".
2017-03-17 10:59:12 +08:00
0a5d1ac156 Use cat -n for printing history to show cmd index
Currently the "history" command in Cmder prints commands without any index associated with any command, so you can copy/paste a command or use "!!" to execute a command from the history but, unlike BASH, you can't do "!<command_index>".

"cat" has a switch, "-n", which prints line numbers of the file being printed. This, in conjunction with "history_io=3" in Clink settings (to read/write history when editing a command") works just like BASH, i.e., you can use the index printed next to a command in the history to execute that command as "!<command_index>".
2017-03-17 10:26:57 +08:00
66 changed files with 6029 additions and 4060 deletions

163
.github/ISSUE_TEMPLATE/bug-report.yml vendored Normal file
View File

@ -0,0 +1,163 @@
name: "🐞 Bug report (encountered problems/errors)"
description: Something is not working as it should
title: "[Bug] "
labels: "🐛 Type: Bug"
body:
- type: markdown
attributes:
value: |
Thank you for reporting a bug for the Cmder project!
------------------------------------------------------------------
Please make sure you read and follow the following instructions carefully before reporting bugs, and/or requesting new features.
- You can find the version of Cmder.exe and ConEmu.exe binaries using Right Click → Properties → Details menu.
- type: textarea
id: version
attributes:
label: Version Information
description: |
Please write your Cmder and ConEmu version below. If applicable, write down your Windows edition too.
**👉 See:** [How to find out which Cmder version I'm using](https://github.com/cmderdev/cmder/wiki/Cmder-troubleshooting)
placeholder: |
Cmder version:
Operating system:
value: |
Cmder version:
Operating system:
render: markdown
validations:
required: true
- type: dropdown
id: edition
attributes:
label: Cmder Edition
description: What edition of Cmder are you running?
options:
- Cmder Full (with Git)
- Cmder Mini
- N/A
validations:
required: true
- type: markdown
attributes:
value: |
Make sure that you have:
- Read both the README.md and the Wiki:
| **README.md** | **Wiki** |
| ------------- | -------- |
| 🌐 [Open Link](https://github.com/cmderdev/cmder/blob/master/README.md) | 🌐 [Open Link](https://github.com/cmderdev/cmder/wiki) |
(What you may be asking here could already be explained there!)
- Searched for existing issues (including the **closed** ones) for similar problems here:
🗃 https://github.com/cmderdev/cmder/issues?q=is:issue
- Please understand that Cmder uses ConEmu as the default underlying Terminal Emulator.
If your issue is regarding the **Terminal Emulator**, please visit the ConEmu issues page:
https://github.com/Maximus5/ConEmu/issues?q=is:issue
If there isn't an existing issue, you may open a new one there.
(We don't resolve issues regarding ConEmu here, so, please make sure you open the issue in the correct place.)
more info: https://conemu.github.io/en/ThirdPartyProblems.html
- If you are having an issue with any of the **upstream technologies** that are used by Cmder, please make sure that the issue is reproducible _only_ when used in combination with Cmder.
We may not directly address the issues related to the following tools:
- **[Clink](https://github.com/chrisant996/clink)**, the default shell in Cmder
- **[ConEmu](https://github.com/Maximus5/ConEmu)**, the terminal emulator
- **[Git/MinGW](https://github.com/git-for-windows/git)**, which also provide *NIX tools (such as `ls`, `mv`, `cp`, etc)
- **[clink-completions](https://github.com/vladimir-kotikov/clink-completions)**, which provides autocompletion for clink
We'll try our best to help you -- but we recommend creating an issue specifically at each of the corresponding repositories for the best result.
**👉 Note:** Try to reproduce the bug you're reporting, on a stand-alone edition of each tool, without using Cmder. If the bug applies when the mentioned tools are NOT used within Cmder, there's a good chance that you should open the bug at the corresponding repo instead.
- Lastly, have a look at the official documentation for Cmder over our website, and our wiki.
Read more about Cmder on ConEmu docs:
https://conemu.github.io/en/cmder.html
#### Prerequisites before submitting an issue
- We do not support any versions older than the current release series, if you are using an older Cmder please update to the latest version first.
- Verify that the issue is not already fixed and is reproducible in the **[latest official Cmder version](https://github.com/cmderdev/cmder/releases).**
- Check the **[current issues list](https://github.com/cmderdev/cmder/issues?q=is%3Aissue)** and perform a **search of the issue tracker (including closed ones)** to avoid posting a duplicate bug report.
- Make sure this is not a support request or question, both of which are better suited for either the **[discussions section](https://github.com/cmderdev/cmder/discussions)**, or the **[questions section](https://github.com/cmderdev/cmder/issues/new?template=question.yml)**.
- Verify that the **[wiki](https://github.com/cmderdev/cmder/wiki)** did not contain a suitable solution either.
Thank you for making sure you are opening a new valid issue! ♥
- type: textarea
id: description
attributes:
label: Description of the issue
description: Provide a clear and concise description of the problem here. Explain the actual behavior vs the expected behavior.
validations:
required: true
- type: textarea
id: reproduction
attributes:
label: How to reproduce
description: Please provide reliable steps to reproduce the problem.
placeholder: |
1. In this environment...
2. With this config...
3. Run '...'
4. See error...
validations:
required: false
- type: textarea
id: notes
attributes:
label: Additional context
description: Add screenshots, etc. (Anything that will provide more context about the problem)
validations:
required: false
- type: checkboxes
id: checklist
attributes:
label: Checklist
description: Please check all boxes that apply
options:
- label: I have read the documentation.
required: true
- label: I have searched for similar issues and found none that describe my issue.
required: true
- label: I have reproduced the issue on the latest version of Cmder.
required: true
- label: I am certain my issues are not related to ConEmu, Clink, or other third-party tools that Cmder uses.
required: true
- type: markdown
attributes:
value: |
### Some tips on how to write a good bug report with the required information.
- Make sure the description is worded well enough to be understood, and with as much context and examples as possible.
- Post a screenshot or the command that triggered the problem, if applicable.
- Use the *Preview* tab to see how your issue will actually look like, before sending it.
⚠ If for some reason you can not see the text you just wrote, make sure you've read the instructions clearly
- Avoid using ambiguous phrases like: doesn't work, there's a problem, etc.
Help us reproduce the issue by explaining what went wrong, and what did you expect to happen.
- Please keep the ticket language to English only here.
We can't process your issue if it's written in Russian or Chinese as we can't understand them.
- You can find the version of Cmder.exe and ConEmu.exe binaries using Right Click → Properties → Details menu.
- Put an `x` into all the boxes `[ ]` relevant to your issue (correct example: `[x]` -- not like this: `[ x]` or `[x ]`).
- Any text that is between the comment tags will get ignored, e.g.: `<!-- this will NOT work -- >`
You need to write your text either outside the tags, or the line below it.
- ⚠ Read the following page to avoid posting a bad issue: https://conemu.github.io/en/BadIssue.html
Failure to follow these guidelines may result in your issue getting closed. So please follow it carefully!

9
.github/ISSUE_TEMPLATE/config.yml vendored Normal file
View File

@ -0,0 +1,9 @@
blank_issues_enabled: false
contact_links:
- name: 📄 Wiki
url: "https://github.com/cmderdev/cmder/wiki"
about: "Consult the wiki first, it might already contain the information you are looking for"
- name: 💬 Discussions
url: "https://github.com/cmderdev/cmder/discussions"
about: "Please ask questions related to usage/setup/support/non-issue development discussion in the Discussions section"

View File

@ -0,0 +1,84 @@
name: "⭐ Feature request (request for new functionality)"
description: Help make Cmder even better
title: "[Feature request] "
labels: "🛠 Type: Feature Request"
body:
- type: markdown
attributes:
value: |
Thank you for helping to improve the Cmder project!
------------------------------------------------------------------
Please make sure you read and follow the following instructions carefully before reporting bugs, and/or requesting new features.
Make sure that you have:
- Searched for existing issues (including the **closed** ones) for similar feature requests here:
🗃 https://github.com/cmderdev/cmder/issues?q=is:issue
- If you are opening the feature request regarding any of the **upstream technologies** that are used by Cmder, please open the feature request at the corresponding upstream repos instead:
- **[Clink](https://github.com/chrisant996/clink)**, the default shell in Cmder
- **[ConEmu](https://github.com/Maximus5/ConEmu)**, the terminal emulator
- **[Git/MinGW](https://github.com/git-for-windows/git)**, which also provide *NIX tools (such as `ls`, `mv`, `cp`, etc)
- **[clink-completions](https://github.com/vladimir-kotikov/clink-completions)**, which provides autocompletion for clink
- If you would like to ask for guides on how to integrate Cmder with your favorite IDE of choice, or how to perform a specific task with Cmder, make sure you visit our label section first.
You may already have an answer under the Guides or Questions section.
For a list of labels, visit **[🌐 Labels](https://github.com/cmderdev/cmder/labels)**.
(Be sure to also check “Closed” issues in the labels section!)
- If you have a request to provide auto-complete support for a new tool, please post your request here instead:
https://github.com/vladimir-kotikov/clink-completions/issues
Thank you for making the Cmder project even better! ♥
- type: textarea
id: description
attributes:
label: Suggestion
description: Describe the feature
validations:
required: true
- type: textarea
id: usecase
attributes:
label: Use case
description: Include a usage example of the feature
validations:
required: false
- type: textarea
id: notes
attributes:
label: Extra info/examples/attachments
description: Extra information, similar tools, etc. If the feature is currently possible with a workaround
validations:
required: false
- type: checkboxes
id: checklist
attributes:
label: Checklist
description: Please check all boxes that apply
options:
- label: I have read the documentation and made sure this feature doesn't already exist.
required: true
- label: I have searched for similar issues and found none that describe my feature request.
required: true
- type: markdown
attributes:
value: |
### Some tips on how to write a better feature request
- Make sure the description is worded well enough to be understood, and with as much context and examples as possible.
- Use the *Preview* tab to see how your issue will actually look like, before sending it.
⚠ If for some reason you can not see the text you just wrote, make sure you've read the instructions clearly
- Please keep the ticket language to English only here.
We can't process your issue if it's written in Russian or Chinese as we can't understand them.

45
.github/ISSUE_TEMPLATE/question.yml vendored Normal file
View File

@ -0,0 +1,45 @@
name: "❓ Question"
description: Something is unclear or needs to be discussed
title: "Question: "
labels: "❔ Type: Question"
body:
- type: markdown
attributes:
value: |
Before you ask your question, please make sure you read and follow the following instructions carefully.
- Read both the README.md and the Wiki, as well as the existing issues:
| **README.md** | **Wiki** | **Issues** |
| ------------- | -------- | ---------- |
| 🌐 [Open Link](https://github.com/cmderdev/cmder/blob/master/README.md) | 🌐 [Open Link](https://github.com/cmderdev/cmder/wiki) | 🗃 [Open Link](https://github.com/cmderdev/cmder/issues?q=is:issue) |
(What you may be asking here could already be explained there!)
- If you would like to ask for guides on how to integrate Cmder with your favorite IDE of choice, or how to perform a specific task with Cmder, make sure you visit our label section first.
You may already have an answer under the [💬 Guides](https://github.com/cmderdev/cmder/issues?q=label%3A%22%F0%9F%92%AC+Type%3A+Guide%22), [📖 Documentation](https://github.com/cmderdev/cmder/issues?q=label%3A%22%F0%9F%93%96+Documentation%22) or [❔ Questions](https://github.com/cmderdev/cmder/issues?q=is%3Aissue+label%3A%22%E2%9D%94+Type%3A+Question%22) section.
For a list of labels, visit **[Labels](https://github.com/cmderdev/cmder/labels)**.
(Be sure to also check “Closed” issues in the labels section!)
- type: textarea
id: description
attributes:
label: Question
description: What would you to ask about Cmder?
validations:
required: true
- type: checkboxes
id: checklist
attributes:
label: Checklist
description: Please check all boxes that apply
options:
- label: I have read the documentation and made sure what I'm looking for isn't present, or is unclear.
required: true
- label: I have searched for similar issues, and either this question wasn't asked before, or I didn't find any that describe my question.
required: true

11
.github/dependabot.yml vendored Normal file
View File

@ -0,0 +1,11 @@
# To get started with Dependabot version updates, you'll need to specify which
# package ecosystems to update and where the package manifests are located.
# Please see the documentation for all configuration options:
# https://docs.github.com/github/administering-a-repository/configuration-options-for-dependency-updates
version: 2
updates:
- package-ecosystem: "github-actions" # See documentation for possible values
directory: "/" # Location of package manifests
schedule:
interval: "weekly"

19
.github/stale.yml vendored Normal file
View File

@ -0,0 +1,19 @@
# Number of days of inactivity before an issue becomes stale
daysUntilStale: 30
# Number of days of inactivity before a stale issue is closed
daysUntilClose: 7
# Issues with these labels will never be considered stale
exemptLabels:
- "📌 Pinned"
# Label to use when marking an issue as stale
staleLabel: "👀 Awaiting Response"
# Comment to post when marking an issue as stale. Set to `false` to disable
markComment: >
This issue has been automatically marked as stale because it has not had
any recent activity. It will be closed in a week if no further activity occurs.
Thank you for your contribution(s).
# Comment to post when closing a stale issue. Set to `false` to disable
closeComment: >
This issue has been automatically closed due to it not having any
activity since it was marked as stale.
Thank you for your contribution(s).

33
.github/workflows/branches.yml vendored Normal file
View File

@ -0,0 +1,33 @@
name: Update branches
# Controls when the action will run.
on:
# Triggers the workflow on push events for the development branch
push:
branches: [ master ]
# Allows you to run this workflow manually from the Actions tab
workflow_dispatch:
# A workflow run is made up of one or more jobs that can run sequentially or in parallel
jobs:
# This job updates the development branch with the master branch
update-development:
# The type of runner that the job will run on
runs-on: ubuntu-latest
# Steps represent a sequence of tasks that will be executed as part of the job
steps:
# Checks-out the repository under $GITHUB_WORKSPACE, so the job can access it
- uses: actions/checkout@v3
with:
fetch-depth: 0 # fetch all history for all branches and tags
# Runs a single command using the runners shell
- name: Merge master into development
run: |
git config user.name "${{ github.actor }}"
git config user.email "${{ github.actor }}@users.noreply.github.com"
git checkout development
git merge --no-ff master
git push origin development

88
.github/workflows/build.yml vendored Normal file
View File

@ -0,0 +1,88 @@
#---------------------------------#
# general configuration #
#---------------------------------#
name: Build Cmder
# Controls when the action will run. Triggers the workflow on push or pull request events but only for the main branch
on:
push:
branches: [ "master" ]
tags:
- "v*"
pull_request:
branches: [ "master" ]
#---------------------------------#
# environment configuration #
#---------------------------------#
env:
# Path to the root of the Cmder project.
CMDER_ROOT: ${{ github.workspace }}
permissions:
contents: read
# A workflow run is made up of one or more jobs that can run sequentially or in parallel
jobs:
build:
name: Build Project
runs-on: windows-latest
steps:
- name: Check out repository code (Action from GitHub)
uses: actions/checkout@v3
with:
fetch-depth: 0
- name: Add MSBuild to PATH
uses: microsoft/setup-msbuild@v1
- name: Build Cmder Launcher
shell: pwsh
working-directory: scripts
run: .\build.ps1 -Compile -verbose
- name: Pack the built files
shell: pwsh
working-directory: scripts
run: .\pack.ps1 -verbose
- name: Upload artifact (cmder.zip)
uses: actions/upload-artifact@v3
with:
path: build/cmder.zip
name: cmder.zip
if-no-files-found: error
- name: Upload artifact (cmder.7z)
uses: actions/upload-artifact@v3
with:
path: build/cmder.7z
name: cmder.7z
- name: Upload artifact (cmder_mini.zip)
uses: actions/upload-artifact@v3
with:
path: build/cmder_mini.zip
name: cmder_mini.zip
- name: Upload artifact (hashes.txt)
uses: actions/upload-artifact@v3
with:
path: build/hashes.txt
name: hashes.txt
- name: Create Release
uses: softprops/action-gh-release@v1
with:
files: |
build/cmder.zip
build/cmder.7z
build/cmder_mini.zip
build/hashes.txt
draft: true
generate_release_notes: true
if: startsWith(github.ref, 'refs/tags/')

68
.github/workflows/codeql.yml vendored Normal file
View File

@ -0,0 +1,68 @@
# For most projects, this workflow file will not need changing; you simply need
# to commit it to your repository.
#
# You may wish to alter this file to override the set of languages analyzed,
# or to provide custom queries or build logic.
#
# ******** NOTE ********
# We have attempted to detect the languages in your repository. Please check
# the `language` matrix defined below to confirm you have the correct set of
# supported CodeQL languages.
#
name: "CodeQL"
on:
push:
branches: [ "master" ]
pull_request:
# The branches below must be a subset of the branches above
branches: [ "master" ]
schedule:
- cron: '30 19 * * 0'
jobs:
analyze:
name: Analyze
runs-on: windows-latest
permissions:
actions: read
contents: read
security-events: write
strategy:
fail-fast: false
matrix:
language: [ 'cpp' ]
# CodeQL supports [ 'cpp', 'csharp', 'go', 'java', 'javascript', 'python', 'ruby' ]
# Use only 'java' to analyze code written in Java, Kotlin or both
# Use only 'javascript' to analyze code written in JavaScript, TypeScript or both
# Learn more about CodeQL language support at https://aka.ms/codeql-docs/language-support
steps:
- name: Checkout repository
uses: actions/checkout@v3
# Initializes the CodeQL tools for scanning.
- name: Initialize CodeQL
uses: github/codeql-action/init@v2
with:
languages: ${{ matrix.language }}
# If you wish to specify custom queries, you can do so here or in a config file.
# By default, queries listed here will override any specified in a config file.
# Prefix the list here with "+" to use these queries and those in the config file.
# Details on CodeQL's query packs refer to : https://docs.github.com/en/code-security/code-scanning/automatically-scanning-your-code-for-vulnerabilities-and-errors/configuring-code-scanning#using-queries-in-ql-packs
# queries: security-extended,security-and-quality
- name: Add MSBuild to PATH
uses: microsoft/setup-msbuild@v1
- name: Build Cmder Launcher
shell: pwsh
working-directory: scripts
run: .\build.ps1 -Compile -verbose
- name: Perform CodeQL Analysis
uses: github/codeql-action/analyze@v2
with:
category: "/language:${{matrix.language}}"

42
.github/workflows/tests.yml vendored Normal file
View File

@ -0,0 +1,42 @@
name: Run Tests
on:
push:
branches:
- master
pull_request:
branches:
- master
defaults:
run:
shell: cmd
permissions:
contents: read
concurrency:
group: '${{ github.workflow }} @ ${{ github.event.pull_request.head.label || github.head_ref || github.ref }}'
cancel-in-progress: true
jobs:
tests:
runs-on: windows-latest
continue-on-error: false
steps:
- uses: actions/checkout@v3
- name: Initialize vendors
shell: pwsh
working-directory: scripts
run: .\build.ps1 -verbose
- name: Testing Clink Shell
run: |
cmd /c vendor\init.bat /v /d /t
- name: Testing PowerShell
run: |
PowerShell.exe -ExecutionPolicy Bypass -NoLogo -NoProfile -Command "Invoke-Expression '. ''vendor\profile.ps1'''"
- name: Testing Bash
run: |
bash vendor/cmder.sh

65
.github/workflows/vendor.yml vendored Normal file
View File

@ -0,0 +1,65 @@
name: Update Vendor
on:
workflow_dispatch:
schedule:
# At 13:37 UTC every day.
- cron: '37 13 * * *'
defaults:
run:
shell: pwsh
permissions:
contents: read
jobs:
vendor:
runs-on: windows-latest
continue-on-error: false
timeout-minutes: 15
permissions:
contents: write
pull-requests: write
steps:
- uses: actions/checkout@v3
with:
fetch-depth: 0
- id: make-changes
name: Checking for updates
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
$currentVersion = (Get-Content .\vendor\sources.json | ConvertFrom-Json)
. .\scripts\update.ps1 -verbose
Set-GHVariable -Name COUNT_UPDATED -Value $count
$newVersion = (Get-Content .\vendor\sources.json | ConvertFrom-Json)
$listUpdated = ""
$updateMessage = "| Name | Old Version | New Version |`n| :--- | ---- | ---- |`n"
foreach ($s in $newVersion) {
$oldVersion = ($currentVersion | Where-Object {$_.name -eq $s.name}).version
if ($s.version -ne $oldVersion) {
$repoUrl = ($repoUrl = $s.Url.Replace("/archive/", "/releases/")).Substring(0, $repoUrl.IndexOf("/releases/")) + "/releases"
$listUpdated += "$($s.name) v$($s.version), "
$updateMessage += "| **[$($s.name)]($repoUrl)** | $oldVersion | **$($s.version)** |`n"
}
}
if ($count -eq 0) { return }
Set-GHVariable -Name LIST_UPDATED -Value $listUpdated.Trim(', ')
echo "UPDATE_MESSAGE<<<EOF`n$updateMessage`n<EOF" | Out-File -FilePath $env:GITHUB_ENV -Append -Encoding utf8
- uses: peter-evans/create-pull-request@v5
if: env.COUNT_UPDATED > 0
with:
title: 'Updates to `${{ env.COUNT_UPDATED }}` vendored dependencies'
body: |
### Automatically updated `${{ env.COUNT_UPDATED }}` dependencies:
${{ env.UPDATE_MESSAGE }}
---
Please verify and then **Merge** the pull request to update.
commit-message: '⬆️ Update dependencies (${{ env.LIST_UPDATED }})'
branch: update-vendor
base: master

31
.gitignore vendored
View File

@ -1,20 +1,33 @@
## Those files should be taken from their repositary
vendor/*/*
!vendor/*
!vendor/psmodules/PsGet
bin/*
!bin/Readme.md
opt/*
!opt/Readme.md
vendor/*/*
!vendor/bin/*
!vendor/lib/*
!vendor/*
!vendor/psmodules/*
vendor/git-for-windows
config/*
!config/Readme.md
!config/profile.d/README.md
config_user/*
config/.history
Thumbs.db
*.exe
*.dll
build/
Version v*
/Version *
*.bak
config/user-*
config/settings
config/aliases
config/profile.d
.github_changelog_generator
launcher/.vs
launcher/src/version.rc2
.vs/*
.vscode
.idea

File diff suppressed because it is too large Load Diff

View File

@ -1,17 +1,17 @@
# How to contribute
Unfortunately we all can't work on cmder every day of the year, so I have decided to write some guidelines for contributing.
Unfortunately we all can't work on Cmder every day of the year, so I have decided to write some guidelines for contributing.
If you follow them your contribution will likely be pulled in quicker.
## Getting Started
* Fork the repository on GitHub (It's that easy)
* Create a feature branch based on the development branch.
* Create a feature branch based on the `master` branch.
## Making Changes
* Make changes in your seperate branch.
* Make changes in your separate branch.
* Check for unnecessary whitespace with `git diff --check` before committing.
* Make sure your commit messages are easy to understand
* Squash your 'Correcting mistakes' commits if you have a lot of them. (See the 'Squashing Commits' link below)
@ -35,4 +35,4 @@ If you follow them your contribution will likely be pulled in quicker.
* [Squashing Commits](http://gitready.com/advanced/2009/02/10/squashing-commits-with-rebase.html)
* [General GitHub documentation](http://help.github.com/)
* [GitHub pull request documentation](http://help.github.com/send-pull-requests/)
* [GitHub pull request documentation](http://help.github.com/articles/creating-a-pull-request/)

View File

@ -4,8 +4,17 @@ SET CMDER_ROOT=%~dp0
:: Remove Trailing '\'
@if "%CMDER_ROOT:~-1%" == "\" SET CMDER_ROOT=%CMDER_ROOT:~0,-1%
if not exist "%CMDER_ROOT%\config\user_ConEmu.xml" (
if not exist "%CMDER_ROOT%\config" mkdir "%CMDER_ROOT%\config" 2>nul
copy "%CMDER_ROOT%\vendor\ConEmu.xml.default" "%CMDER_ROOT%\config\user_ConEmu.xml" 1>nul
if %errorlevel% neq 0 (
echo ERROR: CMDER Initialization has Failed
exit /b 1
)
)
if exist "%~1" (
start %~dp0/vendor/conemu-maximus5/ConEmu.exe /Icon "%CMDER_ROOT%\icons\cmder.ico" /Title Cmder /LoadCfgFile "%~1"
) else (
start %~dp0/vendor/conemu-maximus5/ConEmu.exe /Icon "%CMDER_ROOT%\icons\cmder.ico" /Title Cmder /LoadCfgFile "%CMDER_ROOT%\config\ConEmu.xml"
start %~dp0/vendor/conemu-maximus5/ConEmu.exe /Icon "%CMDER_ROOT%\icons\cmder.ico" /Title Cmder /LoadCfgFile "%CMDER_ROOT%\config\user_ConEmu.xml"
)

287
README.md
View File

@ -1,14 +1,16 @@
# Cmder
[![Join the chat at https://gitter.im/cmderdev/cmder](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/cmderdev/cmder?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) [![Build Status](https://ci.appveyor.com/api/projects/status/github/cmderdev/cmder?branch=master&svg=true)](https://ci.appveyor.com/project/MartiUK/cmder)
[![Join the chat at https://gitter.im/cmderdev/cmder](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/cmderdev/cmder?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) [![Build Status](https://ci.appveyor.com/api/projects/status/github/cmderdev/cmder?branch=master&svg=true)](https://ci.appveyor.com/project/cmderdev/cmder) [![Build Status](https://github.com/cmderdev/cmder/actions/workflows/build.yml/badge.svg)](https://github.com/cmderdev/cmder/actions/workflows/build.yml)
Cmder is a **software package** created out of pure frustration over absence of usable console emulator on Windows. It is based on [ConEmu](https://conemu.github.io/) with *major* config overhaul, comes with a Monokai color scheme, amazing [clink](https://github.com/mridgers/clink) (further enhanced by [clink-completions](https://github.com/vladimir-kotikov/clink-completions)) and a custom prompt layout.
Cmder is a **software package** created out of pure frustration over absence of usable console emulator on Windows. It is based on [ConEmu](https://conemu.github.io/) with *major* config overhaul, comes with a Monokai color scheme, amazing [clink](https://chrisant996.github.io/clink/) (further enhanced by [clink-completions](https://github.com/vladimir-kotikov/clink-completions)) and a custom prompt layout.
![Cmder Screenshot](http://i.imgur.com/g1nNf0I.png)
## Why use it
The main advantage of Cmder is portability. It is designed to be totally self-contained with no external dependencies, which makes it great for **USB Sticks** or **cloud storage**. So you can carry your console, aliases and binaries (like wget, curl and git) with you anywhere.
The main advantage of Cmder is portability. It is designed to be totally self-contained with no external dependencies, which makes it great for **USB Sticks** or **cloud storage**. So you can carry your console, aliases and binaries (like `wget`, `curl` and `git`) with you anywhere.
The Cmder's user interface is also designed to be more eye pleasing, and you can compare the main differences between Cmder and ConEmu [here](https://conemu.github.io/en/cmder.html).
## Installation
### Single User Portable Config
@ -16,35 +18,49 @@ The main advantage of Cmder is portability. It is designed to be totally self-co
1. Download the [latest release](https://github.com/cmderdev/cmder/releases/)
2. Extract the archive. *Note: This path should not be `C:\Program Files` or anywhere else that would require Administrator access for modifying configuration files*
3. (optional) Place your own executable files into the `%cmder_root%\bin` folder to be injected into your PATH.
4. Run Cmder.exe
4. Run `Cmder.exe`
### Shared Cmder install with Non-Portable Individual User Config
1. Download the [latest release](https://github.com/cmderdev/cmder/releases/)
2. Extract the archive to a shared location.
3. (optional) Place your own executable files into the `%cmder_root%\bin` folder to be injected into your PATH.
4. (optional) Create `%userprofile%\cmder_config\bin` folder to be injected into individual users PATH. Default is to auto create this on first run.
5. (optional) Place your own executable files into the `%userprofile%\cmder_config\bin` folder to be injected into your PATH.
6. Run Cmder.exe with "/C" command line argument. Example: `cmder.exe /C %userprofile%\cmder_config`
3. (optional) Place your own executable files and custom app folders into the `%cmder_root%\bin`. See: [bin/README.md](./bin/Readme.md)
- This folder to be injected into your PATH by default.
- See `/max_depth [1-5]` in 'Command Line Arguments for `init.bat`' table to add subdirectories recursively.
4. (optional) Place your own custom app folders into the `%cmder_root%\opt`. See: [opt/README.md](./opt/Readme.md)
- This folder will NOT be injected into your PATH so you have total control of what gets added.
5. Run `Cmder.exe` with `/C` command line argument. Example: `cmder.exe /C %userprofile%\cmder_config`
* This will create the following directory structure if it is missing.
```
c:\users\[username]\cmder_config
├───bin
───config
└───profile.d
───config
└───profile.d
└───opt
```
- (optional) Place your own executable files and custom app folders into `%userprofile%\cmder_config\bin`.
- This folder to be injected into your PATH by default.
- See `/max_depth [1-5]` in 'Command Line Arguments for `init.bat`' table to add subdirectories recursively.
- (optional) Place your own custom app folders into the `%user_profile%\cmder_config\opt`.
- This folder will NOT be injected into your PATH so you have total control of what gets added.
* Both the shared install and the individual user config locations can contain a full set of init and profile.d scripts enabling shared config with user overrides. See below.
## Cmder.exe Command Line Arguments
| Argument | Description |
| ------------------- | ----------------------------------------------------------------------- |
| /C [user_root_path] | Individual user Cmder root folder. Example: %userprofile%\cmder_config |
| /SINGLE | Start Cmder is single mode. |
| /START [start_path] | Folder path to start in. |
| /TASK [task_name] | Task to start after launch. |
| ------------------------- | ----------------------------------------------------------------------- |
| `/C [user_root_path]` | Individual user Cmder root folder. Example: `%userprofile%\cmder_config` |
| `/M` | Use `conemu-%computername%.xml` for ConEmu settings storage instead of `user_conemu.xml` |
| `/REGISTER [ALL, USER]` | Register a Windows Shell Menu shortcut. |
| `/UNREGISTER [ALL, USER]` | Un-register a Windows Shell Menu shortcut. |
| `/SINGLE` | Start Cmder in single mode. |
| `/START [start_path]` | Folder path to start in. |
| `/TASK [task_name]` | Task to start after launch. |
| `/X [ConEmu extras pars]` | Forwards parameters to ConEmu |
## Context Menu Integration
@ -55,7 +71,7 @@ So you've experimented with Cmder a little and want to give it a shot in a more
1. Open a terminal as an Administrator
2. Navigate to the directory you have placed Cmder
3. Execute `.\cmder.exe /REGISTER ALL`
_If you get a message "Access Denied" ensure you are executing the command in an **Administrator** prompt._
_If you get an "Access Denied" message, make sure you are executing the command in an **Administrator** prompt._
In a file explorer window right click in or on a directory to see "Cmder Here" in the context menu.
@ -79,7 +95,7 @@ In a file explorer window right click in or on a directory to see "Cmder Here" i
* <kbd>Ctrl</kbd> + <kbd>R</kbd> : History search
* <kbd>Shift</kbd> + Mouse : Select and copy text from buffer
(Some shortcuts are not yet documented, though they exist - please document them here)
_(Some shortcuts are not yet documented, though they exist - please document them here)_
## Features
@ -88,20 +104,24 @@ You can open multiple tabs each containing one of the following shells:
| Task | Shell | Description |
| ---- | ----- | ----------- |
| Cmder | cmd.exe | Windows 'cmd.exe' shell enhanced with Git, Git aware prompt, Clink(GNU Readline), and Aliases. |
| Cmder as Admin | cmd.exe | Administrative Windows 'cmd.exe' Cmder shell. |
| PowerShell | powershell.exe | Windows PowerShell enhanced with Git and Git aware prompt . |
| PowerShell as Admin | powershell.exe | Administrative Windows 'powershell.exe' Cmder shell. |
| Bash | bash.exe | Unix/Linux like bash shell running on Windows. |
| Bash as Admin | bash.exe | Administrative Unix/Linux like bash shell running on Windows. |
| Mintty | bash.exe | Unix/Linux like bash shell running on Windows. See below for Mintty configuration differences |
| Mintty as Admin | bash.exe | Administrative Unix/Linux like bash shell running on Windows. See below for Mintty configuration differences |
| Cmder | `cmd.exe` | Windows `cmd.exe` shell enhanced with Git, Git aware prompt, Clink (GNU Readline), and Aliases. |
| Cmder as Admin | `cmd.exe` | Administrative Windows `cmd.exe` Cmder shell. |
| PowerShell | `powershell.exe` | Windows PowerShell enhanced with Git and Git aware prompt . |
| PowerShell as Admin | `powershell.exe` | Administrative Windows `powershell.exe` Cmder shell. |
| Bash | `bash.exe` | Unix/Linux like bash shell running on Windows. |
| Bash as Admin | `bash.exe` | Administrative Unix/Linux like bash shell running on Windows. |
| Mintty | `bash.exe` | Unix/Linux like bash shell running on Windows. See below for Mintty configuration differences |
| Mintty as Admin | `bash.exe` | Administrative Unix/Linux like bash shell running on Windows. See below for Mintty configuration differences |
Cmder, PowerShell, and Bash tabs all run on top of the Windows Console API and work as you might expect in Cmder with access to use ConEmu's color schemes, key bindings and other settings defined in the ConEmu Settings dialog.
Mintty tabs use a program called 'mintty' as the terminal that is not based on the Windows Console API so some differences in functionality are normal, as a result mintty specific config is done via the '[%USERPROFILE%|$HOME]/.minttyrc' file.
⚠ *Note:* Only the full edition of Cmder comes with a pre-installed bash, using a vendored [git-for-windows](https://gitforwindows.org/) installation. The pre-configured Bash tabs may not work on Cmder mini edition without additional configuration.
Mintty differs from the other tabs in that it supports xterm/xterm-256color TERM types, and does not work with ConEmu settings like color schemes and key bindings. For more on Mintty and its config click [here](https://github.com/mintty/mintty).
You may however, choose to use an external installation of bash, such as Microsoft's [Subsystem for Linux](https://docs.microsoft.com/en-us/windows/wsl/install-win10) (called WSL) or the [Cygwin](https://cygwin.com/) project which provides POSIX support on windows.
⚠ *Note:* Mintty tabs use a program called 'mintty' as the terminal emulator that is not based on the Windows Console API, rather it's rendered graphically by ConEmu. Mintty differs from the other tabs in that it supports xterm/xterm-256color TERM types, and does not work with ConEmu settings like color schemes and key bindings. As such, some differences in functionality are to be expected, such as Cmder not being able to apply a system-wide configuration to it.
As a result mintty specific config is done via the `[%USERPROFILE%|$HOME]/.minttyrc` file. You may read more about Mintty and its config file [here](https://github.com/mintty/mintty).
An example of setting Cmder portable terminal colors for mintty:
@ -111,10 +131,32 @@ From a bash/mintty shell:
cd $CMDER_ROOT/vendor
git clone https://github.com/karlin/mintty-colors-solarized.git
cd mintty-colors-solarized/
echo source \$CMDER_ROOT/vendor/mintty-colors-solarized/mintty-solarized-dark.sh>>$CMDER_ROOT/config/user-profile.sh
echo source \$CMDER_ROOT/vendor/mintty-colors-solarized/mintty-solarized-dark.sh>>$CMDER_ROOT/config/user_profile.sh
```
### Changing Cmder Default 'cmd.exe' Shell Startup Behaviour Using Task Arguments
You may find some Monokai color schemes for mintty to match Cmder [here](https://github.com/oumu/mintty-color-schemes/blob/master/base16-monokai-mod.minttyrc).
### Changing Cmder Default `cmd.exe` Prompt Config File
The default Cmder shell `cmd::Cmder` prompt is customized using `Clink` and is configured by editing a config file that exists in one of two locations:
- Single User Portable Config `%CMDER_ROOT%\config\cmder_prompt_config.lua`
- Shared Cmder install with Non-Portable Individual User Config `%CMDER_USER_CONFIG%\cmder_prompt_config.lua`
If your Cmder setup does not have this file create it from `%CMDER_ROOT%\vendor\cmder_prompt_config.lua.default`
Customizations include:
- Colors.
- Single/Multi-line.
- Full path/Folder only.
- `[user]@[host]` to the beginning of the prompt.
- `~` for home directory.
- `λ` symbol
Documentation is in the file for each setting.
### Changing Cmder Default `cmd.exe` Shell Startup Behaviour Using Task Arguments
1. Press <kbd>Win</kbd> + <kbd>Alt</kbd> + <kbd>T</kbd>
1. Click either:
@ -132,135 +174,210 @@ echo source \$CMDER_ROOT/vendor/mintty-colors-solarized/mintty-solarized-dark.sh
| Argument | Description | Default |
| ----------------------------- | ---------------------------------------------------------------------------------------------- | ------------------------------------- |
| /c [user cmder root] | Enables user bin and config folders for 'Cmder as admin' sessions due to non-shared environment. | not set |
| /d | Enables debug output. | not set |
| /git_install_root [file path] | User specified Git installation root path. | '%CMDER_ROOT%\vendor\Git-for-Windows' |
| /home [home folder] | User specified folder path to set `%HOME%` environment variable. | '%userprofile%' |
| /max_depth [1-5] | Define max recurse depth when adding to the path for `%cmder_root%\bin` and `%cmder_user_bin%` | 1 |
| /svn_ssh [path to ssh.exe] | Define %SVN_SSH% so we can use git svn with ssh svn repositories. | '%GIT_INSTALL_ROOT%\bin\ssh.exe' |
| /user_aliases [file path] | File path pointing to user aliases. | '%CMDER_ROOT%\config\user-liases.cmd' |
| /v | Enables verbose output. | not set |
| `/c [user cmder root]` | Enables user bin and config folders for 'Cmder as admin' sessions due to non-shared environment. | not set |
| `/d` | Enables debug output. | not set |
| `/f` | Enables Cmder Fast Init Mode. This disables some features, see pull request [#1492](https://github.com/cmderdev/cmder/pull/1942) for more details. | not set |
| `/t` | Enables Cmder Timed Init Mode. This displays the time taken run init scripts | not set |
| `/git_install_root [file path]` | User specified Git installation root path. | `%CMDER_ROOT%\vendor\Git-for-Windows` |
| `/home [home folder]` | User specified folder path to set `%HOME%` environment variable. | `%userprofile%` |
| `/max_depth [1-5]` | Define max recurse depth when adding to the path for `%cmder_root%\bin` and `%cmder_user_bin%` | 1 |
| `/nix_tools [0-2]` | Define how `*nix` tools are added to the path. Prefer Windows Tools: 1, Prefer *nix Tools: 2, No `/usr/bin` in `%PATH%`: 0 | 1 |
| `/svn_ssh [path to ssh.exe]` | Define `%SVN_SSH%` so we can use git svn with ssh svn repositories. | `%GIT_INSTALL_ROOT%\bin\ssh.exe` |
| `/user_aliases [file path]` | File path pointing to user aliases. | `%CMDER_ROOT%\config\user_aliases.cmd` |
| `/v` | Enables verbose output. | not set |
| (custom arguments) | User defined arguments processed by `cexec`. Type `cexec /?` for more usage. | not set |
### Cmder Shell User Config
Single user portable configuration is possible using the cmder specific shell config files. Edit the below files to add your own configuration:
Single user portable configuration is possible using the Cmder specific shell config files. Edit the below files to add your own configuration:
| Shell | Cmder Portable User Config |
| ------------- | ----------------------------------------- |
| Cmder | %CMDER_ROOT%\\config\\user-profile.cmd |
| PowerShell | $ENV:CMDER_ROOT\\config\\user-profile.ps1 |
| Bash/Mintty | $CMDER_ROOT/config/user-profile.sh |
| Cmder | `%CMDER_ROOT%\config\user_profile.cmd` |
| PowerShell | `$ENV:CMDER_ROOT\config\user_profile.ps1` |
| Bash/Mintty | `$CMDER_ROOT/config/user_profile.sh` |
Note: Bash and Mintty sessions will also source the '$HOME/.bashrc' file if it exists after it sources '$CMDER_ROOT/config/user-profile.sh'.
**Note:** Bash and Mintty sessions will also source the `$HOME/.bashrc` file if it exists after it sources `$CMDER_ROOT/config/user_profile.sh`.
You can write *.cmd|*.bat, *.ps1, and *.sh scripts and just drop them in the %CMDER_ROOT%\config\profile.d folder to add startup config to Cmder.
You can write `*.cmd|*.bat`, `*.ps1`, and `*.sh` scripts and just drop them in the `%CMDER_ROOT%\config\profile.d` folder to add startup config to Cmder.
| Shell | Cmder 'Profile.d' Scripts |
| Shell | Cmder `Profile.d` Scripts |
| ------------- | -------------------------------------------------- |
| Cmder | %CMDER_ROOT%\\config\\profile.d\\\*.bat and *.cmd |
| PowerShell | $ENV:CMDER_ROOT\\config\\profile.d\\\*.ps1 |
| Bash/Mintty | $CMDER_ROOT/config/profile.d/*.sh |
| Cmder | `%CMDER_ROOT%\config\profile.d\*.bat and *.cmd` |
| PowerShell | `$ENV:CMDER_ROOT\config\profile.d\*.ps1` |
| Bash/Mintty | `$CMDER_ROOT/config/profile.d/*.sh` |
#### Git Status Opt-Out
To disable Cmder prompt git status globally add the following to `~/.gitconfig` or locally for a single repo `[repo]/.git/config` and start a new session.
*Note: This configuration is not portable*
```
[cmder]
status = false # Opt out of Git status for 'ALL' Cmder supported shells.
cmdstatus = false # Opt out of Git status for 'Cmd.exe' shells.
psstatus = false # Opt out of Git status for 'Powershell.exe and 'Pwsh.exe' shells.
shstatus = false # Opt out of Git status for 'bash.exe' shells.
```
### Aliases
#### Cmder(Cmd.exe) Aliases
#### Cmder(`Cmd.exe`) Aliases
You can define simple aliases for `cmd.exe` sessions with a command like `alias name=command`. Cmd.exe aliases support optional parameters through the `$1-9` or the `$*` special characters so the alias `vi=vim.exe $*` typed as `vi [filename]` will open `[filename]` in `vim.exe`.
Cmd.exe aliases can also be more complex. See: [DOSKEY.EXE documentation](http://www.microsoft.com/resources/documentation/windows/xp/all/proddocs/en-us/doskey.mspx?mfr=true) for additional details on complex aliases/macros for 'cmd.exe'
Cmd.exe aliases can also be more complex. See: [DOSKEY.EXE documentation](https://docs.microsoft.com/en-us/windows-server/administration/windows-commands/doskey) for additional details on complex aliases/macros for `cmd.exe`
Aliases defined using the `alias.bat` command will automatically be saved in the `%CMDER_ROOT%\config\user-aliases.cmd` file
Aliases defined using the `alias.bat` command will automatically be saved in the `%CMDER_ROOT%\config\user_aliases.cmd` file
To make an alias and/or any other profile settings permanent add it to one of the following:
Note: These are loaded in this order by '$CMDER_ROOT/vendor/init.bat'. Anyhing stored in '%CMDER_ROOT%' will be a portable setting and will follow cmder to another machine.
Note: These are loaded in this order by `$CMDER_ROOT/vendor/init.bat`. Anything stored in `%CMDER_ROOT%` will be a portable setting and will follow Cmder to another machine.
* '%CMDER_ROOT%\\config\\profile.d\\\*.cmd and \*.bat'
* '%CMDER_ROOT%\\config\\user-aliases.cmd'
* '%CMDER_ROOT%\\config\\user-profile.cmd'
* `%CMDER_ROOT%\config\profile.d\*.cmd` and `\*.bat`
* `%CMDER_ROOT%\config\user_aliases.cmd`
* `%CMDER_ROOT%\config\user_profile.cmd`
#### Bash.exe|Mintty.exe Aliases
Bash shells support simple and complex aliases with optional parameters natively so they work a little different. Typing `alias name=command` will create an alias only for the current running session.
To make an alias and/or any other profile settings permanent add it to one of the following:
Note: These are loaded in this order by '$CMDER_ROOT/vendor/git-for-windows/etc/profile.d/cmder.sh'. Anyhing stored in '$CMDER_ROOT' will be a portable setting and will follow cmder to another machine.
Note: These are loaded in this order by `$CMDER_ROOT/vendor/git-for-windows/etc/profile.d/cmder.sh`. Anything stored in `$CMDER_ROOT` will be a portable setting and will follow Cmder to another machine.
* '$CMDER_ROOT/config/profile.d/*.sh'
* '$CMDER_ROOT/config/user-profile.sh'
* '$HOME/.bashrc'
* `$CMDER_ROOT/config/profile.d/*.sh`
* `$CMDER_ROOT/config/user_profile.sh`
* `$HOME/.bashrc`
If you add bash aliases to `$CMDER_ROOT/config/user-profile.sh` they will be portable and follow your Cmder folder if you copy it to another machine. `$HOME/.bashrc` defined aliases are not portable.
If you add bash aliases to `$CMDER_ROOT/config/user_profile.sh` they will be portable and follow your Cmder folder if you copy it to another machine. `$HOME/.bashrc` defined aliases are not portable.
#### PowerShell.exe Aliases
PowerShell has native simple alias support, for example `[new-alias | set-alias] alias command`, so complex aliases with optional parameters are not supported in PowerShell sessions. Type `get-help [new-alias|set-alias] -full` for help on PowerShell aliases.
To make an alias and/or any other profile settings permanent add it to one of the following:
Note: These are loaded in this order by '$ENV:CMDER_ROOT\\vendor\\user-profile.ps1'. Anyhing stored in '$ENV:CMDER_ROOT' will be a portable setting and will follow cmder to another machine.
Note: These are loaded in this order by `$ENV:CMDER_ROOT\vendor\user_profile.ps1`. Anything stored in `$ENV:CMDER_ROOT` will be a portable setting and will follow Cmder to another machine.
* '$ENV:CMDER_ROOT\\config\\profile.d\\\*.ps1'
* '$ENV:CMDER_ROOT\\config\\user-profile.ps1'
* `$ENV:CMDER_ROOT\config\profile.d\*.ps1`
* `$ENV:CMDER_ROOT\config\user_profile.ps1`
### SSH Agent
To start the vendored SSH agent simply call `start-ssh-agent`, which is in the `vendor/git-for-windows/cmd` folder.
If you want to run SSH agent on startup, include the line `@call "%GIT_INSTALL_ROOT%/cmd/start-ssh-agent.cmd"` in `%CMDER_ROOT%/config/user-profile.cmd` (usually just uncomment it).
If you want to run SSH agent on startup, include the line `@call "%GIT_INSTALL_ROOT%/cmd/start-ssh-agent.cmd"` in `%CMDER_ROOT%/config/user_profile.cmd` (usually just uncomment it).
### Vendored Git
Cmder is by default shipped with a vendored Git installation. On each instance of launching Cmder, an attempt is made to locate any other user provided Git binaries. Upon finding a `git.exe` binary, Cmder further compares its version against the vendored one _by executing_ it. The vendored `git.exe` binary is _only_ used when it is more recent than the user-installed one.
You may use your favorite version of Git by including its path in the `%PATH%` enviroment variable. Moreover, the **Mini** edition of Cmder (found on the [downloads page](https://github.com/cmderdev/cmder/releases)) excludes any vendored Git binaries.
You may use your favorite version of Git by including its path in the `%PATH%` environment variable. Moreover, the **Mini** edition of Cmder (found on the [downloads page](https://github.com/cmderdev/cmder/releases)) excludes any vendored Git binaries.
### Using external Cygwin/Babun, MSys2, or Git for Windows SDK with Cmder.
### Using external Cygwin/Babun, MSys2, WSL, or Git for Windows SDK with Cmder.
1. Setup a new task by pressing '<kbd>Win</kbd> +<kbd>Alt</kbd> + <kbd>T</kbd>'.
1. Click the '+' button to add a task.
You may run bash (the default shell used on Linux, macOS and GNU/Hurd) externally on Cmder, using the following instructions:
1. Setup a new task by pressing <kbd>Win</kbd> +<kbd>Alt</kbd> + <kbd>T</kbd>.
1. Click the `+` button to add a task.
1. Name the new task in the top text box.
1. Provide task parameters, this is optional.
1. Add ```cmd /c "[path_to_external_env]\bin\bash --login -i" -new_console``` to the `Commands` text box.
1. Add `cmd /c "[path_to_external_env]\bin\bash --login -i" -new_console` to the `Commands` text box.
Recommended Optional Steps:
**Recommended Optional Steps:**
Copy the 'vendor/cmder_exinit' file to the Cygwin/Babun, MSys2, or Git for Windows SDK environments ```/etc/profile.d/``` folder to use portable settings in the $CMDER_ROOT/config folder.
Copy the `vendor/cmder_exinit` file to the Cygwin/Babun, MSys2, or Git for Windows SDK environments `/etc/profile.d/` folder to use portable settings in the `$CMDER_ROOT/config` folder.
Note: MinGW could work if the init scripts include profile.d but this has not been tested.
Note: MinGW could work if the init scripts include `profile.d` but this has not been tested.
The destination file extension depends on the shell you use in that environment. For example:
* bash - Copy to /etc/profile.d/cmder_exinit.sh
* zsh - Copy to /etc/profile.d/cmder_exinit.zsh
* bash - Copy to `/etc/profile.d/cmder_exinit.sh`
* zsh - Copy to `/etc/profile.d/cmder_exinit.zsh`
Uncomment and edit the below line in the script to use Cmder config even when launched from outside Cmder.
Uncomment and edit the line below in the script to use Cmder config even when launched from outside Cmder.
```
# CMDER_ROOT=${USERPROFILE}/cmder # This is not required if launched from Cmder.
```
### Customizing user sessions using `init.bat` custom arguments.
You can pass custom arguments to `init.bat` and use `cexec.cmd` in your `user_profile.cmd` to evaluate these
arguments then execute commands based on a particular flag being detected or not.
`init.bat` creates two shortcuts for using `cexec.cmd` in your profile scripts.
#### `%ccall%` - Evaluates flags, runs commands if found, and returns to the calling script and continues.
```
ccall=call C:\Users\user\cmderdev\vendor\bin\cexec.cmd
```
Example: `%ccall% /startnotepad start notepad.exe`
#### `%cexec%` - Evaluates flags, runs commands if found, and does not return to the calling script.
```
cexec=C:\Users\user\cmderdev\vendor\bin\cexec.cmd
```
Example: `%cexec% /startnotepad start notepad.exe`
It is useful when you have multiple tasks to execute `cmder` and need it to initialize
the session differently depending on the task chosen.
To conditionally start `notepad.exe` when you start a specific `cmder` task:
* Press <kbd>win</kbd>+<kbd>alt</kbd>+<kbd>t</kbd>
* Click `+` to add a new task.
* Add the below to the `Commands` block:
```batch
cmd.exe /k ""%ConEmuDir%\..\init.bat" /startnotepad"
```
* Add the below to your `%cmder_root%\config\user_profile.cmd`
```batch
%ccall% "/startNotepad" "start" "notepad.exe"`
```
To see detailed usage of `cexec`, type `cexec /?` in Cmder.
### Integrating Cmder with [Windows Terminal](https://github.com/cmderdev/cmder/wiki/Seamless-Windows-Terminal-Integration), [VS Code](https://github.com/cmderdev/cmder/wiki/Seamless-VS-Code-Integration), and your favorite IDEs
Cmder by default comes with a vendored ConEmu installation as the underlying terminal emulator, as stated [here](https://conemu.github.io/en/cmder.html).
However, Cmder can in fact run in a variety of other terminal emulators, and even integrated IDEs. Assuming you have the latest version of Cmder, follow the following instructions to get Cmder working with your own terminal emulator.
For instructions on how to integrate Cmder with your IDE, please read our [Wiki section](https://github.com/cmderdev/cmder/wiki#cmder-integration).
## Upgrading
The process of upgrading Cmder depends on the version/build you are currently running
The process of upgrading Cmder depends on the version/build you are currently running.
If you have a `[cmder_root]/config/user-conemu.xml`, you are running a newer version of Cmder, follow the below process:
If you have a `[cmder_root]/config/user[-|_]conemu.xml`, you are running a newer version of Cmder, follow the below process:
1. Exit all Cmder sessions and relaunch `[cmder_root]/cmder.exe`, this backs up your existing `[cmder_root]/vendor/conemu-maximus5/conemu.xml` to `[cmder_root]/config/user-conemu.xml`.
1. Exit all Cmder sessions and relaunch `[cmder_root]/cmder.exe`, this backs up your existing `[cmder_root]/vendor/conemu-maximus5/conemu.xml` to `[cmder_root]/config/user[-|_]conemu.xml`.
* The `[cmder_root]/config/user-conemu.xml` contains any custom settings you have made using the 'Setup Tasks' settings dialog.
* The `[cmder_root]/config/user[-|_]conemu.xml` contains any custom settings you have made using the 'Setup Tasks' settings dialog.
2. Exit all Cmder sessions and backup any files you have manually edited under `[cmder_root]/vendor`.
* Editing files under `[cmder_root]/vendor` is not recommended since you will need to re-apply these changes after any upgrade. All user customizations should go in '[cmder_root]/config' folder.
* Editing files under `[cmder_root]/vendor` is not recommended since you will need to re-apply these changes after any upgrade. All user customizations should go in `[cmder_root]/config` folder.
3. Delete the `[cmder_root]/vendor` folder.
4. Extract the new `cmder.zip` or `cmder_mini.zip` into `[cmder_root]/` overwriting all files when prompted.
If you do not have a `[cmder_root]/config/user-conemu.xml`, you are running an older version of cmder, follow the below process:
If you do not have a `[cmder_root]/config/user[-|_]conemu.xml`, you are running an older version of cmder, follow the below process:
1. Exit all Cmder sessions and backup `[cmder_root]/vendor/conemu-maximus5/conemu.xml` to `[cmder_root]/config/user-conemu.xml`.
1. Exit all Cmder sessions and backup `[cmder_root]/vendor/conemu-maximus5/conemu.xml` to `[cmder_root]/config/user[-|_]conemu.xml`.
2. Backup any files you have manually edited under `[cmder_root]/vendor`.
* Editing files under `[cmder_root]/vendor` is not recommended since you will need to re-apply these changes after any upgrade. All user customizations should go in '[cmder_root]/config' folder.
* Editing files under `[cmder_root]/vendor` is not recommended since you will need to re-apply these changes after any upgrade. All user customizations should go in `[cmder_root]/config` folder.
3. Delete the `[cmder_root]/vendor` folder.
4. Extract the new `cmder.zip` or `cmder_mini.zip` into `[cmder_root]/` overwriting all files when prompted.
@ -269,7 +386,11 @@ If you do not have a `[cmder_root]/config/user-conemu.xml`, you are running an o
You can download builds of the current development branch by going to AppVeyor via the following link:
[![AppVeyor](https://ci.appveyor.com/api/projects/status/github/cmderdev/cmder?svg=True)](https://ci.appveyor.com/project/MartiUK/cmder/branch/master/artifacts)
[![AppVeyor](https://ci.appveyor.com/api/projects/status/github/cmderdev/cmder?svg=True)](https://ci.appveyor.com/project/cmderdev/cmder/branch/master/artifacts)
The latest download builds by GitHub Actions can be downloaded from the link below:
[![Build Status](https://github.com/cmderdev/cmder/actions/workflows/build.yml/badge.svg)](https://github.com/cmderdev/cmder/actions/workflows/build.yml)
## License

View File

@ -1,60 +0,0 @@
#---------------------------------#
# general configuration #
#---------------------------------#
version: 1.0.{build}-{branch}
# branches to build
branches:
# blacklist
except:
- gh-pages
#---------------------------------#
# environment configuration #
#---------------------------------#
# Operating system (build VM template)
os: Visual Studio 2017
#---------------------------------#
# build configuration #
#---------------------------------#
build_script:
- ps: cd scripts; .\build.ps1 -Compile -verbose
after_build:
- ps: .\pack.ps1 -verbose
# Disable test search, since we don't have any.
test: off
#---------------------------------#
# artifacts #
#---------------------------------#
artifacts:
- path: build\cmder.zip
name: cmderzip
- path: build\cmder.7z
name: cmder7z
- path: build\cmder_mini.zip
name: cmdermini
- path: build\hashes.txt
name: hashes
#---------------------------------#
# notifications #
#---------------------------------#
notifications:
# Webhook
- provider: Webhook
url: https://webhooks.gitter.im/e/d673abb1b2e659dcd625
on_build_success: true
on_build_failure: true
on_build_status_changed: true

View File

@ -3,12 +3,14 @@
All config files must be in this folder. If there is no option to set this folder
directly, it has to be hardlinked.
* `user-aliases.cmd`: aliases in cmd; called from vendor\init.bat; autocreated from
`vendor\user-aliases.cmd.example`.
* `user_aliases.cmd`: aliases in cmd; called from vendor\init.bat; autocreated from
`vendor\user_aliases.cmd.default`.
* `*.lua`: clink completions and prompt filters; autoloaded after all
prompt filter and clink completions are initialized; add your own.
* `user-profile.{sh|cmd|ps1}`: startup files for bash|cmd|powershell tasks; called from their
respective startup scripts in `vendor\`; autocreated on first start of such a task.
* `user_profile.{sh|cmd|ps1}`: startup files for bash|cmd|powershell tasks; called from their
respective startup scripts in `vendor\`; autocreated from
`vendor\user_profile.{sh|cmd|ps1}.default` on first start of such a task.
* `.history`: the current commandline history; autoupdated on close.
* `settings`: settings for readline; overwritten on update.
* `ConEmu.xml`: settings from ConEmu (=the UI of cmder -> Preferences); overwritten on update.
* `user-ConEmu.xml`: settings from ConEmu the UI of Cmder. ;
Do not edit this file directly it is overwritten on each cmder.exe launch.

View File

@ -0,0 +1,3 @@
## Profile.d Folder
* Files in this folder named `*.{sh|cmd|ps1}`: Will be executed by the appropriate shell when starting the shell.

View File

@ -1,4 +1,4 @@

Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio 14
VisualStudioVersion = 14.0.23107.0
@ -9,12 +9,18 @@ Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Win32 = Debug|Win32
Release|Win32 = Release|Win32
Debug|x64 = Debug|x64
Release|x64 = Release|x64
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{4A8485A5-B7DD-4C44-B7F6-3E2765DD0CD3}.Debug|Win32.ActiveCfg = Debug|Win32
{4A8485A5-B7DD-4C44-B7F6-3E2765DD0CD3}.Debug|Win32.Build.0 = Debug|Win32
{4A8485A5-B7DD-4C44-B7F6-3E2765DD0CD3}.Release|Win32.ActiveCfg = Release|Win32
{4A8485A5-B7DD-4C44-B7F6-3E2765DD0CD3}.Release|Win32.Build.0 = Release|Win32
{4A8485A5-B7DD-4C44-B7F6-3E2765DD0CD3}.Debug|x64.ActiveCfg = Debug|x64
{4A8485A5-B7DD-4C44-B7F6-3E2765DD0CD3}.Debug|x64.Build.0 = Debug|x64
{4A8485A5-B7DD-4C44-B7F6-3E2765DD0CD3}.Release|x64.ActiveCfg = Release|x64
{4A8485A5-B7DD-4C44-B7F6-3E2765DD0CD3}.Release|x64.Build.0 = Release|x64
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE

View File

@ -1,4 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="Debug|Win32">
@ -9,25 +9,47 @@
<Configuration>Release</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Debug|x64">
<Configuration>Debug</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|x64">
<Configuration>Release</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
</ItemGroup>
<PropertyGroup Label="Globals">
<ProjectGuid>{4A8485A5-B7DD-4C44-B7F6-3E2765DD0CD3}</ProjectGuid>
<Keyword>Win32Proj</Keyword>
<RootNamespace>CmderLauncher</RootNamespace>
<WindowsTargetPlatformVersion>10.0</WindowsTargetPlatformVersion>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries>
<PlatformToolset>v141_xp</PlatformToolset>
<PlatformToolset>v143</PlatformToolset>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries>
<PlatformToolset>v141_xp</PlatformToolset>
<WholeProgramOptimization>true</WholeProgramOptimization>
<CharacterSet>Unicode</CharacterSet>
<PlatformToolset>v143</PlatformToolset>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries>
<PlatformToolset>v143</PlatformToolset>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries>
<WholeProgramOptimization>true</WholeProgramOptimization>
<CharacterSet>Unicode</CharacterSet>
<PlatformToolset>v143</PlatformToolset>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings">
@ -38,6 +60,12 @@
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<PropertyGroup Label="UserMacros" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<LinkIncremental>true</LinkIncremental>
@ -47,6 +75,14 @@
<LinkIncremental>false</LinkIncremental>
<TargetName>Cmder</TargetName>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<LinkIncremental>true</LinkIncremental>
<TargetName>Cmder</TargetName>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<LinkIncremental>false</LinkIncremental>
<TargetName>Cmder</TargetName>
</PropertyGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<ClCompile>
<PrecompiledHeader>
@ -59,7 +95,11 @@
<Link>
<SubSystem>Windows</SubSystem>
<GenerateDebugInformation>true</GenerateDebugInformation>
<!-- <AdditionalDependencies>comctl32.lib;shlwapi.lib;%(AdditionalDependencies)</AdditionalDependencies> -->
</Link>
<Manifest>
<AdditionalManifestFiles>src/app.manifest %(AdditionalManifestFiles)</AdditionalManifestFiles>
</Manifest>
<ResourceCompile>
<PreprocessorDefinitions>_USING_V110_SDK71_;%(PreprocessorDefinitions)</PreprocessorDefinitions>
</ResourceCompile>
@ -82,13 +122,63 @@
<GenerateDebugInformation>true</GenerateDebugInformation>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<OptimizeReferences>true</OptimizeReferences>
<!-- <AdditionalDependencies>comctl32.lib;shlwapi.lib;%(AdditionalDependencies)</AdditionalDependencies> -->
</Link>
<Manifest>
<AdditionalManifestFiles>src/app.manifest %(AdditionalManifestFiles)</AdditionalManifestFiles>
</Manifest>
<PostBuildEvent>
<Command>copy "$(TargetPath)" "$(SolutionDir)..\$(TargetFileName)"</Command>
</PostBuildEvent>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<ClCompile>
<PrecompiledHeader>
</PrecompiledHeader>
<WarningLevel>Level3</WarningLevel>
<Optimization>Disabled</Optimization>
<PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<SDLCheck>true</SDLCheck>
</ClCompile>
<Link>
<SubSystem>Windows</SubSystem>
<GenerateDebugInformation>true</GenerateDebugInformation>
</Link>
<Manifest>
<AdditionalManifestFiles>src/app.manifest %(AdditionalManifestFiles)</AdditionalManifestFiles>
</Manifest>
<ResourceCompile>
<PreprocessorDefinitions>_USING_V110_SDK71_;%(PreprocessorDefinitions)</PreprocessorDefinitions>
</ResourceCompile>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<ClCompile>
<WarningLevel>Level3</WarningLevel>
<PrecompiledHeader>
</PrecompiledHeader>
<Optimization>MinSpace</Optimization>
<FunctionLevelLinking>true</FunctionLevelLinking>
<IntrinsicFunctions>false</IntrinsicFunctions>
<PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<SDLCheck>true</SDLCheck>
<FavorSizeOrSpeed>Size</FavorSizeOrSpeed>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
</ClCompile>
<Link>
<SubSystem>Windows</SubSystem>
<GenerateDebugInformation>true</GenerateDebugInformation>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<OptimizeReferences>true</OptimizeReferences>
</Link>
<Manifest>
<AdditionalManifestFiles>src/app.manifest %(AdditionalManifestFiles)</AdditionalManifestFiles>
</Manifest>
<PostBuildEvent>
<Command>copy $(TargetPath) $(SolutionDir)..\$(TargetFileName)</Command>
</PostBuildEvent>
</ItemDefinitionGroup>
<ItemGroup>
<ResourceCompile Include="src\Resource.rc">
<ResourceCompile Include="src\resource.rc">
<FileType>RC</FileType>
</ResourceCompile>
</ItemGroup>

View File

@ -9,6 +9,8 @@
#include <iostream>
#pragma comment(lib, "Shlwapi.lib")
#pragma comment(lib, "comctl32.lib")
#pragma warning( disable : 4091 )
#ifndef UNICODE
#error "Must be compiled with unicode support."
@ -16,11 +18,11 @@
#define USE_TASKBAR_API (_WIN32_WINNT >= _WIN32_WINNT_WIN7)
#define XP (_WIN32_WINNT < _WIN32_WINNT_VISTA)
#define MB_TITLE L"Cmder Launcher"
#define SHELL_MENU_REGISTRY_PATH_BACKGROUND L"Directory\\Background\\shell\\Cmder"
#define SHELL_MENU_REGISTRY_PATH_LISTITEM L"Directory\\shell\\Cmder"
#define SHELL_MENU_REGISTRY_DRIVE_PATH_BACKGROUND L"Drive\\Background\\shell\\Cmder"
#define SHELL_MENU_REGISTRY_DRIVE_PATH_LISTITEM L"Drive\\shell\\Cmder"
#define streqi(a, b) (_wcsicmp((a), (b)) == 0)
@ -30,6 +32,39 @@
#define FAIL_ON_ERROR(x) { DWORD ec; if ((ec = (x)) != ERROR_SUCCESS) { ShowErrorAndExit(ec, __WFUNCTION__, __LINE__); } }
void TaskDialogOpen( PCWSTR mainStr, PCWSTR contentStr )
{
HRESULT hr = NULL;
TASKDIALOGCONFIG tsk = {sizeof(tsk)};
HWND hOwner = NULL;
HINSTANCE hInstance = GetModuleHandle(NULL);
PCWSTR tskTitle = MAKEINTRESOURCE(IDS_TITLE);
tsk.hInstance = hInstance;
tsk.pszMainIcon = MAKEINTRESOURCE(IDI_CMDER);
tsk.pszWindowTitle = tskTitle;
tsk.pszMainInstruction = mainStr;
tsk.pszContent = contentStr;
TASKDIALOG_BUTTON btns[1] = {
{ IDOK, L"OK" }
};
tsk.dwFlags = TDF_ALLOW_DIALOG_CANCELLATION|TDF_ENABLE_HYPERLINKS;
tsk.pButtons = btns;
tsk.cButtons = _countof(btns);
tsk.hwndParent = hOwner;
int selectedButtonId = IDOK;
hr = TaskDialogIndirect( &tsk, &selectedButtonId, NULL, NULL );
}
void ShowErrorAndExit(DWORD ec, const wchar_t * func, int line)
{
wchar_t * buffer;
@ -70,7 +105,7 @@ bool FileExists(const wchar_t * filePath)
return false;
}
void StartCmder(std::wstring path = L"", bool is_single_mode = false, std::wstring taskName = L"", std::wstring cfgRoot = L"")
void StartCmder(std::wstring path = L"", bool is_single_mode = false, std::wstring taskName = L"", std::wstring title = L"", std::wstring iconPath = L"", std::wstring cfgRoot = L"", bool use_user_cfg = true, std::wstring conemu_args = L"")
{
#if USE_TASKBAR_API
wchar_t appId[MAX_PATH] = { 0 };
@ -87,10 +122,18 @@ void StartCmder(std::wstring path = L"", bool is_single_mode = false, std::wstr
wchar_t userConfigDirPath[MAX_PATH] = { 0 };
wchar_t userBinDirPath[MAX_PATH] = { 0 };
wchar_t userProfiledDirPath[MAX_PATH] = { 0 };
wchar_t userProfilePath[MAX_PATH] = { 0 };
wchar_t legacyUserProfilePath[MAX_PATH] = { 0 };
wchar_t userAliasesPath[MAX_PATH] = { 0 };
wchar_t legacyUserAliasesPath[MAX_PATH] = { 0 };
wchar_t args[MAX_PATH * 2 + 256] = { 0 };
wchar_t userConEmuCfgPath[MAX_PATH] = { 0 };
std::wstring cmderStart = path;
std::wstring cmderTask = taskName;
std::wstring cmderTitle = title;
std::wstring cmderConEmuArgs = conemu_args;
std::copy(cfgRoot.begin(), cfgRoot.end(), userConfigDirPath);
userConfigDirPath[cfgRoot.length()] = 0;
@ -103,15 +146,65 @@ void StartCmder(std::wstring path = L"", bool is_single_mode = false, std::wstr
PathRemoveFileSpec(exeDir);
if (PathFileExists(iconPath.c_str()))
{
std::copy(iconPath.begin(), iconPath.end(), icoPath);
icoPath[iconPath.length()] = 0;
}
else
{
PathCombine(icoPath, exeDir, L"icons\\cmder.ico");
}
PathCombine(configDirPath, exeDir, L"config");
/*
Convert legacy user-profile.cmd to new name user_profile.cmd
*/
PathCombine(legacyUserProfilePath, configDirPath, L"user-profile.cmd");
if (PathFileExists(legacyUserProfilePath))
{
PathCombine(userProfilePath, configDirPath, L"user_profile.cmd");
char *lPr = (char *)malloc(MAX_PATH);
char *pR = (char *)malloc(MAX_PATH);
size_t i;
wcstombs_s(&i, lPr, (size_t)MAX_PATH,
legacyUserProfilePath, (size_t)MAX_PATH);
wcstombs_s(&i, pR, (size_t)MAX_PATH,
userProfilePath, (size_t)MAX_PATH);
rename(lPr, pR);
}
/*
Convert legacy user-aliases.cmd to new name user_aliases.cmd
*/
PathCombine(legacyUserAliasesPath, configDirPath, L"user-aliases.cmd");
if (PathFileExists(legacyUserAliasesPath))
{
PathCombine(userAliasesPath, configDirPath, L"user_aliases.cmd");
char *lPr = (char *)malloc(MAX_PATH);
char *pR = (char *)malloc(MAX_PATH);
size_t i;
wcstombs_s(&i, lPr, (size_t)MAX_PATH,
legacyUserAliasesPath, (size_t)MAX_PATH);
wcstombs_s(&i, pR, (size_t)MAX_PATH,
userAliasesPath, (size_t)MAX_PATH);
rename(lPr, pR);
}
/*
Was /c [path] specified?
*/
if (wcscmp(userConfigDirPath, L"") == 0)
{
// No - It wasn't.
PathCombine(userConfigDirPath, exeDir, L"config");
}
else
{
// Yes - It was.
PathCombine(userBinDirPath, userConfigDirPath, L"bin");
SHCreateDirectoryEx(0, userBinDirPath, 0);
@ -120,123 +213,240 @@ void StartCmder(std::wstring path = L"", bool is_single_mode = false, std::wstr
PathCombine(userProfiledDirPath, userConfigDirPath, L"profile.d");
SHCreateDirectoryEx(0, userProfiledDirPath, 0);
/*
Convert legacy user-profile.cmd to new name user_profile.cmd
*/
PathCombine(legacyUserProfilePath, userConfigDirPath, L"user-profile.cmd");
if (PathFileExists(legacyUserProfilePath))
{
PathCombine(userProfilePath, userConfigDirPath, L"user_profile.cmd");
char *lPr = (char *)malloc(MAX_PATH);
char *pR = (char *)malloc(MAX_PATH);
size_t i;
wcstombs_s(&i, lPr, (size_t)MAX_PATH,
legacyUserProfilePath, (size_t)MAX_PATH);
wcstombs_s(&i, pR, (size_t)MAX_PATH,
userProfilePath, (size_t)MAX_PATH);
rename(lPr, pR);
}
/*
Convert legacy user-aliases.cmd to new name user_aliases.cmd
*/
PathCombine(legacyUserAliasesPath, userConfigDirPath, L"user-aliases.cmd");
if (PathFileExists(legacyUserAliasesPath))
{
PathCombine(userAliasesPath, userConfigDirPath, L"user_aliases.cmd");
char *lPr = (char *)malloc(MAX_PATH);
char *pR = (char *)malloc(MAX_PATH);
size_t i;
wcstombs_s(&i, lPr, (size_t)MAX_PATH,
legacyUserAliasesPath, (size_t)MAX_PATH);
wcstombs_s(&i, pR, (size_t)MAX_PATH,
userAliasesPath, (size_t)MAX_PATH);
rename(lPr, pR);
}
}
// Set path to vendored ConEmu config file
PathCombine(cfgPath, exeDir, L"vendor\\conemu-maximus5\\ConEmu.xml");
// Set path to Cmder default ConEmu config file
PathCombine(defaultCfgPath, exeDir, L"config\\ConEmu.xml");
PathCombine(defaultCfgPath, exeDir, L"vendor\\ConEmu.xml.default");
// Check for machine-specific then user config source file.
PathCombine(cpuCfgPath, userConfigDirPath, L"ConEmu-%COMPUTERNAME%.xml");
ExpandEnvironmentStrings(cpuCfgPath, cpuCfgPath, sizeof(cpuCfgPath) / sizeof(cpuCfgPath[0]));
// Set path to Cmder user ConEmu config file
PathCombine(userCfgPath, userConfigDirPath, L"user-ConEmu.xml");
if (PathFileExists(cpuCfgPath)) {
if (PathFileExists(cfgPath)) {
if ( PathFileExists(cpuCfgPath) || use_user_cfg == false ) // config/ConEmu-%COMPUTERNAME%.xml file exists or /m was specified on command line, use machine specific config.
{
if (cfgRoot.length() == 0) // '/c [path]' was NOT specified
{
if (PathFileExists(cfgPath)) // vendor/conemu-maximus5/ConEmu.xml file exists, copy vendor/conemu-maximus5/ConEmu.xml to config/ConEmu-%COMPUTERNAME%.xml.
{
if (!CopyFile(cfgPath, cpuCfgPath, FALSE))
{
MessageBox(NULL,
(GetLastError() == ERROR_ACCESS_DENIED)
? L"Failed to copy ConEmu.xml file to ConEmu-%COMPUTERNAME%.xml backup location! Restart Cmder as administrator."
: L"Failed to copy ConEmu.xml file to ConEmu-%COMPUTERNAME%.xml backup location!", MB_TITLE, MB_ICONSTOP);
? L"Failed to copy vendor/conemu-maximus5/ConEmu.xml file to config/ConEmu-%COMPUTERNAME%.xml! Access Denied."
: L"Failed to copy vendor/conemu-maximus5/ConEmu.xml file to config/ConEmu-%COMPUTERNAME%.xml!", MB_TITLE, MB_ICONSTOP);
exit(1);
}
}
else
else // vendor/conemu-maximus5/ConEmu.xml config file does not exist, copy config/ConEmu-%COMPUTERNAME%.xml to vendor/conemu-maximus5/ConEmu.xml file
{
if (!CopyFile(cpuCfgPath, cfgPath, FALSE))
{
MessageBox(NULL,
(GetLastError() == ERROR_ACCESS_DENIED)
? L"Failed to copy ConEmu-%COMPUTERNAME%.xml file to vendored ConEmu.xml location! Restart Cmder as administrator."
: L"Failed to copy ConEmu-%COMPUTERNAME%.xml file to vendored ConEmu.xml location!", MB_TITLE, MB_ICONSTOP);
? L"Failed to copy config/ConEmu-%COMPUTERNAME%.xml file to vendor/conemu-maximus5/ConEmu.xml! Access Denied."
: L"Failed to copy config/ConEmu-%COMPUTERNAME%.xml file to vendor/conemu-maximus5/ConEmu.xml!", MB_TITLE, MB_ICONSTOP);
exit(1);
}
}
}
else // '/c [path]' was specified, don't copy anything and use existing conemu-%COMPUTERNAME%.xml to start comemu.
{
if (use_user_cfg == false && PathFileExists(cfgPath) && !PathFileExists(cpuCfgPath)) // vendor/conemu-maximus5/ConEmu.xml file exists, copy vendor/conemu-maximus5/ConEmu.xml to config/ConEmu-%COMPUTERNAME%.xml.
{
if (!CopyFile(cfgPath, cpuCfgPath, FALSE))
{
MessageBox(NULL,
(GetLastError() == ERROR_ACCESS_DENIED)
? L"Failed to copy vendor/conemu-maximus5/ConEmu.xml file to config/ConEmu-%COMPUTERNAME%.xml! Access Denied."
: L"Failed to copy vendor/conemu-maximus5/ConEmu.xml file to config/ConEmu-%COMPUTERNAME%.xml!", MB_TITLE, MB_ICONSTOP);
exit(1);
}
}
PathCombine(userConEmuCfgPath, userConfigDirPath, L"ConEmu-%COMPUTERNAME%.xml");
ExpandEnvironmentStrings(userConEmuCfgPath, userConEmuCfgPath, sizeof(userConEmuCfgPath) / sizeof(userConEmuCfgPath[0]));
}
else if (PathFileExists(userCfgPath)) {
if (PathFileExists(cfgPath)) {
}
else if (PathFileExists(userCfgPath)) // config/user_conemu.xml exists, use it.
{
if (cfgRoot.length() == 0) // '/c [path]' was NOT specified
{
if (PathFileExists(cfgPath)) // vendor/conemu-maximus5/ConEmu.xml exists, copy vendor/conemu-maximus5/ConEmu.xml to config/user_conemu.xml.
{
if (!CopyFile(cfgPath, userCfgPath, FALSE))
{
MessageBox(NULL,
(GetLastError() == ERROR_ACCESS_DENIED)
? L"Failed to copy ConEmu.xml file to backup location! Restart Cmder as administrator."
: L"Failed to copy ConEmu.xml file to backup location!", MB_TITLE, MB_ICONSTOP);
? L"Failed to copy vendor/conemu-maximus5/ConEmu.xml file to config/user-conemu.xml! Access Denied."
: L"Failed to copy vendor/conemu-maximus5/ConEmu.xml file to config/user-conemu.xml!", MB_TITLE, MB_ICONSTOP);
exit(1);
}
}
else
else // vendor/conemu-maximus5/ConEmu.xml does not exist, copy config/user-conemu.xml to vendor/conemu-maximus5/ConEmu.xml
{
if (!CopyFile(userCfgPath, cfgPath, FALSE))
{
MessageBox(NULL,
(GetLastError() == ERROR_ACCESS_DENIED)
? L"Failed to copy ConEmu.xml file to vendored ConEmu.xml location! Restart Cmder as administrator."
: L"Failed to copy ConEmu.xml file to vendored ConEmu.xml location!", MB_TITLE, MB_ICONSTOP);
? L"Failed to copy config/user-conemu.xml file to vendor/conemu-maximus5/ConEmu.xml! Access Denied."
: L"Failed to copy config/user-conemu.xml file to vendor/conemu-maximus5/ConEmu.xml!", MB_TITLE, MB_ICONSTOP);
exit(1);
}
}
}
else if (PathFileExists(cfgPath)) {
else // '/c [path]' was specified, don't copy anything and use existing user_conemu.xml to start comemu.
{
PathCombine(userConEmuCfgPath, userConfigDirPath, L"user-ConEmu.xml");
}
}
else if (cfgRoot.length() == 0) // '/c [path]' was NOT specified
{
if (PathFileExists(cfgPath)) // vendor/conemu-maximus5/ConEmu.xml exists, copy vendor/conemu-maximus5/ConEmu.xml to config/user_conemu.xml
{
if (!CopyFile(cfgPath, userCfgPath, FALSE))
{
MessageBox(NULL,
(GetLastError() == ERROR_ACCESS_DENIED)
? L"Failed to copy ConEmu.xml file to user-conemu.xml backup location! Restart Cmder as administrator."
: L"Failed to copy ConEmu.xml file to user-conemu.xml backup location!", MB_TITLE, MB_ICONSTOP);
? L"Failed to copy vendor/conemu-maximus5/ConEmu.xml file to config/user-conemu.xml! Access Denied."
: L"Failed to copy vendor/conemu-maximus5/ConEmu.xml file to config/user-conemu.xml!", MB_TITLE, MB_ICONSTOP);
exit(1);
}
else // vendor/ConEmu.xml.default config exists, copy Cmder vendor/ConEmu.xml.default file to vendor/conemu-maximus5/ConEmu.xml.
{
if (!CopyFile(defaultCfgPath, cfgPath, FALSE))
{
MessageBox(NULL,
(GetLastError() == ERROR_ACCESS_DENIED)
? L"Failed to copy vendor/ConEmu.xml.default file to vendor/conemu-maximus5/ConEmu.xml! Access Denied."
: L"Failed to copy vendor/ConEmu.xml.default file to vendor/conemu-maximus5/ConEmu.xml!", MB_TITLE, MB_ICONSTOP);
exit(1);
}
}
}
else {
if (!CopyFile(defaultCfgPath, cfgPath, FALSE))
{
MessageBox(NULL,
(GetLastError() == ERROR_ACCESS_DENIED)
? L"Failed to copy Cmder default ConEmu.xml file to vendored ConEmu.xml location! Restart Cmder as administrator."
: L"Failed to copy Cmder default ConEmu.xml file to vendored ConEmu.xml location!", MB_TITLE, MB_ICONSTOP);
? L"Failed to copy vendor/ConEmu.xml.default file to vendor/conemu-maximus5/ConEmu.xml! Access Denied."
: L"Failed to copy vendor/ConEmu.xml.default file to vendor/conemu-maximus5/ConEmu.xml!", MB_TITLE, MB_ICONSTOP);
exit(1);
}
}
}
else if (PathFileExists(cfgPath)) // vendor/conemu-maximus5/ConEmu.xml exists, copy vendor/conemu-maximus5/ConEmu.xml to config/user_conemu.xml
{
if (!CopyFile(cfgPath, userCfgPath, FALSE))
{
MessageBox(NULL,
(GetLastError() == ERROR_ACCESS_DENIED)
? L"Failed to copy vendor/conemu-maximus5/ConEmu.xml file to config/user-conemu.xml! Access Denied."
: L"Failed to copy vendor/conemu-maximus5/ConEmu.xml file to config/user-conemu.xml!", MB_TITLE, MB_ICONSTOP);
exit(1);
}
PathCombine(userConEmuCfgPath, userConfigDirPath, L"user-ConEmu.xml");
}
else // '/c [path]' was specified and 'vendor/ConEmu.xml.default' config exists, copy Cmder 'vendor/ConEmu.xml.default' file to '[user specified path]/config/user_ConEmu.xml'.
{
if ( ! CopyFile(defaultCfgPath, userCfgPath, FALSE))
{
MessageBox(NULL,
(GetLastError() == ERROR_ACCESS_DENIED)
? L"Failed to copy vendor/ConEmu.xml.default file to [user specified path]/config/user_ConEmu.xml! Access Denied."
: L"Failed to copy vendor/ConEmu.xml.default file to [user specified path]/config/user_ConEmu.xml!", MB_TITLE, MB_ICONSTOP);
exit(1);
}
PathCombine(userConEmuCfgPath, userConfigDirPath, L"user-ConEmu.xml");
}
SYSTEM_INFO sysInfo;
GetNativeSystemInfo(&sysInfo);
if (sysInfo.wProcessorArchitecture == PROCESSOR_ARCHITECTURE_AMD64) {
if (sysInfo.wProcessorArchitecture == PROCESSOR_ARCHITECTURE_AMD64)
{
PathCombine(conEmuPath, exeDir, L"vendor\\conemu-maximus5\\ConEmu64.exe");
}
else {
else
{
PathCombine(conEmuPath, exeDir, L"vendor\\conemu-maximus5\\ConEmu.exe");
}
if (streqi(cmderStart.c_str(), L""))
swprintf_s(args, L"%s /Icon \"%s\"", args, icoPath);
if (!streqi(cmderStart.c_str(), L""))
{
TCHAR buff[MAX_PATH];
const DWORD ret = GetEnvironmentVariable(L"USERPROFILE", buff, MAX_PATH);
cmderStart = buff;
swprintf_s(args, L"%s /dir \"%s\"", args, cmderStart.c_str());
}
if (is_single_mode)
{
if (!streqi(cmderTask.c_str(), L"")) {
swprintf_s(args, L"%s /single /Icon \"%s\" /Title Cmder /dir \"%s\" /run {%s}", args, icoPath, cmderStart.c_str(), cmderTask.c_str());
}
else {
swprintf_s(args, L"%s /single /Icon \"%s\" /Title Cmder /dir \"%s\"", args, icoPath, cmderStart.c_str());
}
}
else
{
if (!streqi(cmderTask.c_str(), L"")) {
swprintf_s(args, L"/Icon \"%s\" /Title Cmder /dir \"%s\" /run {%s}", icoPath, cmderStart.c_str(), cmderTask.c_str());
}
else {
swprintf_s(args, L"%s /Icon \"%s\" /Title Cmder /dir \"%s\"", args, icoPath, cmderStart.c_str());
}
swprintf_s(args, L"%s /single", args);
}
if (!streqi(cmderTitle.c_str(), L""))
{
swprintf_s(args, L"%s /title \"%s\"", args, cmderTitle.c_str());
}
if (cfgRoot.length() != 0)
{
swprintf_s(args, L"%s -loadcfgfile \"%s\"", args, userConEmuCfgPath);
}
if (!streqi(cmderConEmuArgs.c_str(), L""))
{
swprintf_s(args, L"%s %s", args, cmderConEmuArgs.c_str());
}
// The `/run` arg and its value MUST be the last arg of ConEmu
// see : https://conemu.github.io/en/ConEmuArgs.html
// > This must be the last used switch (excepting -new_console and -cur_console)
if (!streqi(cmderTask.c_str(), L""))
{
swprintf_s(args, L"%s /run {%s}", args, cmderTask.c_str());
}
SetEnvironmentVariable(L"CMDER_ROOT", exeDir);
if (wcscmp(userConfigDirPath, configDirPath) != 0)
@ -301,8 +511,10 @@ HKEY GetRootKey(std::wstring opt)
return root;
}
void RegisterShellMenu(std::wstring opt, wchar_t* keyBaseName)
void RegisterShellMenu(std::wstring opt, wchar_t* keyBaseName, std::wstring cfgRoot, bool single)
{
wchar_t userConfigDirPath[MAX_PATH] = { 0 };
// First, get the paths we will use
wchar_t exePath[MAX_PATH] = { 0 };
@ -311,7 +523,23 @@ void RegisterShellMenu(std::wstring opt, wchar_t* keyBaseName)
GetModuleFileName(NULL, exePath, sizeof(exePath));
wchar_t commandStr[MAX_PATH + 20] = { 0 };
swprintf_s(commandStr, L"\"%s\" \"%%V\"", exePath);
wchar_t baseCommandStr[MAX_PATH + 20] = { 0 };
if (!single) {
swprintf_s(baseCommandStr, L"\"%s\"", exePath);
}
else {
swprintf_s(baseCommandStr, L"\"%s\" /single", exePath);
}
if (cfgRoot.length() == 0) // '/c [path]' was NOT specified
{
swprintf_s(commandStr, L"%s \"%%V\"", baseCommandStr);
}
else {
std::copy(cfgRoot.begin(), cfgRoot.end(), userConfigDirPath);
userConfigDirPath[cfgRoot.length()] = 0;
swprintf_s(commandStr, L"%s /c \"%s\" \"%%V\"", baseCommandStr, userConfigDirPath);
}
// Now that we have `commandStr`, it's OK to change `exePath`...
PathRemoveFileSpec(exePath);
@ -344,11 +572,8 @@ void UnregisterShellMenu(std::wstring opt, wchar_t* keyBaseName)
HKEY root = GetRootKey(opt);
HKEY cmderKey;
FAIL_ON_ERROR(RegCreateKeyEx(root, keyBaseName, 0, NULL, REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, &cmderKey, NULL));
#if XP
FAIL_ON_ERROR(SHDeleteKey(cmderKey, NULL));
#else
FAIL_ON_ERROR(RegDeleteTree(cmderKey, NULL));
#endif
RegDeleteKeyEx(root, keyBaseName, KEY_ALL_ACCESS, NULL);
RegCloseKey(cmderKey);
RegCloseKey(root);
}
@ -358,12 +583,15 @@ struct cmderOptions
std::wstring cmderCfgRoot = L"";
std::wstring cmderStart = L"";
std::wstring cmderTask = L"";
std::wstring cmderTitle = L"Cmder";
std::wstring cmderIcon = L"";
std::wstring cmderRegScope = L"USER";
std::wstring cmderConEmuArgs = L"";
bool cmderSingle = false;
bool cmderUserCfg = true;
bool registerApp = false;
bool unRegisterApp = false;
bool error = false;
};
cmderOptions GetOption()
@ -376,8 +604,9 @@ cmderOptions GetOption()
for (int i = 1; i < argCount; i++)
{
// MessageBox(NULL, szArgList[i], L"Arglist contents", MB_OK);
// MessageBox(NULL, szArgList[i], L"Arglist contents", MB_OK);
if (cmderOptions.error == false) {
if (_wcsicmp(L"/c", szArgList[i]) == 0)
{
TCHAR userProfile[MAX_PATH];
@ -388,20 +617,28 @@ cmderOptions GetOption()
cmderOptions.cmderCfgRoot = cmderCfgRoot;
if (szArgList[i + 1] != NULL && szArgList[i + 1][0] != '/') {
if (szArgList[i + 1] != NULL && szArgList[i + 1][0] != '/')
{
cmderOptions.cmderCfgRoot = szArgList[i + 1];
i++;
}
}
else if (_wcsicmp(L"/start", szArgList[i]) == 0)
{
int len = wcslen(szArgList[i + 1]);
if (wcscmp(&szArgList[i + 1][len - 1], L"\"") == 0)
{
szArgList[i + 1][len - 1] = '\0';
}
if (PathFileExists(szArgList[i + 1]))
{
cmderOptions.cmderStart = szArgList[i + 1];
i++;
}
else {
MessageBox(NULL, szArgList[i + 1], L"/START - Folder doses not exist!", MB_OK);
else
{
MessageBox(NULL, szArgList[i + 1], L"/START - Folder does not exist!", MB_OK);
}
}
else if (_wcsicmp(L"/task", szArgList[i]) == 0)
@ -409,10 +646,24 @@ cmderOptions GetOption()
cmderOptions.cmderTask = szArgList[i + 1];
i++;
}
else if (_wcsicmp(L"/title", szArgList[i]) == 0)
{
cmderOptions.cmderTitle = szArgList[i + 1];
i++;
}
else if (_wcsicmp(L"/icon", szArgList[i]) == 0)
{
cmderOptions.cmderIcon = szArgList[i + 1];
i++;
}
else if (_wcsicmp(L"/single", szArgList[i]) == 0)
{
cmderOptions.cmderSingle = true;
}
else if (_wcsicmp(L"/m", szArgList[i]) == 0)
{
cmderOptions.cmderUserCfg = false;
}
else if (_wcsicmp(L"/register", szArgList[i]) == 0)
{
cmderOptions.registerApp = true;
@ -439,20 +690,64 @@ cmderOptions GetOption()
}
}
}
else if (cmderOptions.cmderStart == L"" && PathFileExists(szArgList[i]))
/* Used for passing arguments to conemu prog */
else if (_wcsicmp(L"/x", szArgList[i]) == 0)
{
cmderOptions.cmderConEmuArgs = szArgList[i + 1];
i++;
}
/* Bare double dash, remaining commandline is for conemu */
else if (_wcsicmp(L"--", szArgList[i]) == 0)
{
std::wstring cmdline = std::wstring(GetCommandLineW());
auto doubledash = cmdline.find(L" -- ");
if (doubledash != std::string::npos)
{
cmderOptions.cmderConEmuArgs = cmdline.substr(doubledash + 4);
}
break;
}
else if (cmderOptions.cmderStart == L"")
{
int len = wcslen(szArgList[i]);
if (wcscmp(&szArgList[i][len - 1], L"\"") == 0)
{
szArgList[i][len - 1] = '\0';
}
if (PathFileExists(szArgList[i]))
{
cmderOptions.cmderStart = szArgList[i];
i++;
}
else {
MessageBox(NULL, L"Unrecognized parameter.\n\nValid options:\n\n /c [CMDER User Root Path]\n\n /task [ConEmu Task Name]\n\n [/start [Start in Path] | [Start in Path]]\n\n /single\n\nor\n\n /register [USER | ALL]\n\nor\n\n /unregister [USER | ALL]\n", MB_TITLE, MB_OK);
else
{
cmderOptions.error = true;
}
}
else
{
cmderOptions.error = true;
}
}
}
if (cmderOptions.error == true)
{
wchar_t validOptions[512];
HMODULE hMod = GetModuleHandle(NULL);
LoadString(hMod, IDS_SWITCHES, validOptions, 512);
// display list of valid options on unrecognized parameter
TaskDialogOpen( L"Unrecognized parameter.", validOptions );
}
LocalFree(szArgList);
return cmderOptions;
}
int APIENTRY _tWinMain(_In_ HINSTANCE hInstance,
_In_opt_ HINSTANCE hPrevInstance,
_In_ LPTSTR lpCmdLine,
@ -464,14 +759,19 @@ int APIENTRY _tWinMain(_In_ HINSTANCE hInstance,
cmderOptions cmderOptions = GetOption();
if (cmderOptions.registerApp == true ) {
RegisterShellMenu(cmderOptions.cmderRegScope, SHELL_MENU_REGISTRY_PATH_BACKGROUND);
RegisterShellMenu(cmderOptions.cmderRegScope, SHELL_MENU_REGISTRY_PATH_LISTITEM);
if (cmderOptions.registerApp == true)
{
RegisterShellMenu(cmderOptions.cmderRegScope, SHELL_MENU_REGISTRY_PATH_BACKGROUND, cmderOptions.cmderCfgRoot, cmderOptions.cmderSingle);
RegisterShellMenu(cmderOptions.cmderRegScope, SHELL_MENU_REGISTRY_PATH_LISTITEM, cmderOptions.cmderCfgRoot, cmderOptions.cmderSingle);
RegisterShellMenu(cmderOptions.cmderRegScope, SHELL_MENU_REGISTRY_DRIVE_PATH_BACKGROUND, cmderOptions.cmderCfgRoot, cmderOptions.cmderSingle);
RegisterShellMenu(cmderOptions.cmderRegScope, SHELL_MENU_REGISTRY_DRIVE_PATH_LISTITEM, cmderOptions.cmderCfgRoot, cmderOptions.cmderSingle);
}
else if (cmderOptions.unRegisterApp == true)
{
UnregisterShellMenu(cmderOptions.cmderRegScope, SHELL_MENU_REGISTRY_PATH_BACKGROUND);
UnregisterShellMenu(cmderOptions.cmderRegScope, SHELL_MENU_REGISTRY_PATH_LISTITEM);
UnregisterShellMenu(cmderOptions.cmderRegScope, SHELL_MENU_REGISTRY_DRIVE_PATH_BACKGROUND);
UnregisterShellMenu(cmderOptions.cmderRegScope, SHELL_MENU_REGISTRY_DRIVE_PATH_LISTITEM);
}
else if (cmderOptions.error == true)
{
@ -479,7 +779,7 @@ int APIENTRY _tWinMain(_In_ HINSTANCE hInstance,
}
else
{
StartCmder(cmderOptions.cmderStart, cmderOptions.cmderSingle, cmderOptions.cmderTask, cmderOptions.cmderCfgRoot);
StartCmder(cmderOptions.cmderStart, cmderOptions.cmderSingle, cmderOptions.cmderTask, cmderOptions.cmderTitle, cmderOptions.cmderIcon, cmderOptions.cmderCfgRoot, cmderOptions.cmderUserCfg, cmderOptions.cmderConEmuArgs);
}
return 0;

Binary file not shown.

54
launcher/src/app.manifest Normal file
View File

@ -0,0 +1,54 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0" xmlns:asmv3="urn:schemas-microsoft-com:asm.v3">
<!-- Project description definition -->
<description>Cmder Console Emulator</description>
<!-- Project dependency definition -->
<dependency>
<dependentAssembly>
<assemblyIdentity
type="win32"
name="Microsoft.Windows.Common-Controls"
version="6.0.0.0" processorArchitecture="*"
publicKeyToken="6595b64144ccf1df"
language="*" />
</dependentAssembly>
</dependency>
<!-- Win32 User Account Control definition -->
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
<security>
<requestedPrivileges>
<requestedExecutionLevel
level="asInvoker"
uiAccess="false" />
</requestedPrivileges>
</security>
</trustInfo>
<!-- Required for appcompat behaviour -->
<compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1">
<application>
<!-- Windows Vista -->
<supportedOS Id="{e2011457-1546-43c5-a5fe-008deee3d3f0}"/>
<!-- Windows 7 -->
<supportedOS Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}"/>
<!-- Windows 8 -->
<supportedOS Id="{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}"/>
<!-- Windows 8.1 -->
<supportedOS Id="{1f676c76-80e1-4239-95bb-83d0f6d0da78}"/>
<!-- Windows 10 and Windows 11 -->
<supportedOS Id="{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}"/>
</application>
</compatibility>
<!-- Add DPI awareness -->
<asmv3:application>
<asmv3:windowsSettings xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">
<dpiAware>true/pm</dpiAware>
</asmv3:windowsSettings>
</asmv3:application>
</assembly>

Binary file not shown.

109
launcher/src/resource.rc Normal file
View File

@ -0,0 +1,109 @@
/* _
___ _ __ ___ __| | ___ _ __
/ __| '_ ` _ \ / _` |/ _ \ '__|
| (__| | | | | | (_| | __/ |
\___|_| |_| |_|\__,_|\___|_|
=============================================================================
The Cmder Console Emulator Project
*/
#include "resource.h"
#include "version.rc2"
#include "strings.rc2"
#define APSTUDIO_READONLY_SYMBOLS
/////////////////////////////////////////////////////////////////////////////
//
// Generated from the TEXTINCLUDE 2 resource.
//
#include "winres.h"
/////////////////////////////////////////////////////////////////////////////
#undef APSTUDIO_READONLY_SYMBOLS
/////////////////////////////////////////////////////////////////////////////
// English (United States) resources
#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)
LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
#ifdef APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
//
// TEXTINCLUDE
//
1 TEXTINCLUDE
BEGIN
"resource.h\0"
END
2 TEXTINCLUDE
BEGIN
"#include ""winres.h""\r\n"
"\0"
END
3 TEXTINCLUDE
BEGIN
"\r\n"
"\0"
END
#endif // APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
//
// Icon
//
// Icon with lowest ID value placed first to ensure application icon
// remains consistent on all systems.
IDI_CMDER ICON "..\\..\\icons\\cmder.ico"
#endif // English (United States) resources
/////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////
//
// Version
//
VS_VERSION_INFO VERSIONINFO
FILEVERSION CMDER_MAJOR_VERSION,CMDER_MINOR_VERSION,CMDER_REVISION_VERSION,CMDER_BUILD_VERSION
PRODUCTVERSION CMDER_MAJOR_VERSION,CMDER_MINOR_VERSION,CMDER_REVISION_VERSION,CMDER_BUILD_VERSION
FILEFLAGSMASK VS_FFI_FILEFLAGSMASK
FILEFLAGS (CMDER_DEBUGFLAG | CMDER_BUILDFLAGS)
FILEOS VOS_NT_WINDOWS32
FILETYPE VFT_APP
FILESUBTYPE VFT2_UNKNOWN
BEGIN
BLOCK "StringFileInfo"
BEGIN
BLOCK "100904b0"
BEGIN
VALUE "CompanyName", CMDER_COMPANY_NAME_STR "\0"
VALUE "FileDescription", CMDER_FILE_DESCRIPTION_STR "\0"
VALUE "FileVersion", CMDER_VERSION_STR "\0"
VALUE "InternalName", CMDER_INTERNAL_NAME_STR "\0"
VALUE "LegalCopyright", "Copyright (C) " CMDER_COPYRIGHT_YEAR_STR " " CMDER_COMPANY_NAME_STR "\0"
VALUE "OriginalFilename", CMDER_ORIGINAL_FILENAME_STR "\0"
VALUE "ProductName", CMDER_PRODUCT_NAME_STR "\0"
VALUE "ProductVersion", CMDER_VERSION_STR "\0"
END
END
BLOCK "VarFileInfo"
BEGIN
VALUE "Translation", 0x1009, 1200
END
END
/////////////////////////////////////////////////////////////////////////////
#ifndef APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
//
// Generated from the TEXTINCLUDE 3 resource.
//
/////////////////////////////////////////////////////////////////////////////
#endif // not APSTUDIO_INVOKED

12
launcher/src/strings.rc2 Normal file
View File

@ -0,0 +1,12 @@
/////////////////////////////////////////////////////////////////////////////
// Corresponding ids should be defined in `resource.h` file.
STRINGTABLE
{
IDS_TITLE "Cmder Launcher"
IDS_SWITCHES L"Valid options:\n\n /c [CMDER User Root Path]\n /task [ConEmu Task Name]\n /icon [CMDER Icon Path]\n [/start [Start in Path] | [Start in Path]]\n /single\n /m\n /x [ConEmu extra arguments]\n\nor, either:\n /register [USER | ALL]\n /unregister [USER | ALL]"
}
/////////////////////////////////////////////////////////////////////////////

View File

@ -0,0 +1,27 @@
/**
* WARNING: do NOT modify this file! the content of this file should be
* automatically genereted before AppVeyor builds using the
* respective .ps1 Powershell scripts.
*
*/
/////////////////////////////////////////////////////////////////////////////
// Define the version numbers and build information manually here:
#define CMDER_MAJOR_VERSION {Cmder-Major-Version}
#define CMDER_MINOR_VERSION {Cmder-Minor-Version}
#define CMDER_REVISION_VERSION {Cmder-Revision-Version}
#define CMDER_BUILD_VERSION {Cmder-Build-Version}
#define CMDER_VERSION_STR {Cmder-Version-Str}
#define CMDER_PRODUCT_NAME_STR "Cmder"
#define CMDER_FILE_DESCRIPTION_STR "Cmder: Lovely Console Emulator."
#define CMDER_INTERNAL_NAME_STR "Cmder"
#define CMDER_ORIGINAL_FILENAME_STR "Cmder.exe"
#define CMDER_COMPANY_NAME_STR "Samuel Vasko"
#define CMDER_COPYRIGHT_YEAR_STR "2016"
#define CMDER_DEBUGFLAG 0x0L // set to 0x1L to enable debug mode
#define CMDER_BUILDFLAGS 0x0L
/////////////////////////////////////////////////////////////////////////////

5
opt/Readme.md Normal file
View File

@ -0,0 +1,5 @@
## Bin
This folder is for optional user packages and will not be automatically injected into the PATH.
Use `%lib_path% enhance_path "%cmder_root%\[path to folder]"` in `%cmder_root%\config\user_profile.cmd` or `%cmder_root%\config\profile.d\*.cmd` to add to the path.

View File

@ -2,12 +2,16 @@ launcher
.gitignore
.gitattributes
.git
*.rb
.github
.vs
.vscode
.idea
*.md
build
scripts
config\.history
packignore
icons\Thumbs.db
Thumbs.db
icons\cmder_icon.psd
icons\icon_16*.png
icons\icon_32*.png
@ -19,4 +23,5 @@ appveyor.yml
vendor\cmder.sh
vendor\git-prompt.sh
config\user-*
.github_changelog_generator
clink_history*
*.log

View File

@ -11,11 +11,15 @@
.EXAMPLE
.\build.ps1
Executes the default build for Cmder; Conemu, clink. This is equivalent to the "minimum" style package in the releases
Executes the default build for Cmder; ConEmu, clink. This is equivalent to the "minimum" style package in the releases
.EXAMPLE
.\build.ps1 -Compile
Recompile the launcher executable if you have the requisite build tools for C++ installed.
.EXAMPLE
.\build.ps1 -Compile -NoVendor
Skip all downloads and only build launcher.
.EXAMPLE
.\build -verbose
@ -29,7 +33,7 @@
Samuel Vasko, Jack Bennett
Part of the Cmder project.
.LINK
http://cmder.net/ - Project Home
http://cmder.app/ - Project Home
#>
[CmdletBinding(SupportsShouldProcess = $true)]
Param(
@ -38,37 +42,65 @@ Param(
# -whatif switch to not actually make changes
# Path to the vendor configuration source file
[string]$sourcesPath = "..\vendor\sources.json",
[string]$sourcesPath = "$PSScriptRoot\..\vendor\sources.json",
# Vendor folder location
[string]$saveTo = "..\vendor\",
[string]$saveTo = "$PSScriptRoot\..\vendor\",
# Launcher folder location
[string]$launcher = "..\launcher",
[string]$launcher = "$PSScriptRoot\..\launcher",
# Config folder location
[string]$config = "..\config",
[string]$config = "$PSScriptRoot\..\config",
# New launcher if you have MSBuild tools installed
# Using this option will skip all downloads, if you only need to build launcher
[switch]$noVendor,
# Build launcher if you have MSBuild tools installed
[switch]$Compile
)
# Get the scripts and cmder root dirs we are building in.
$ScriptRoot = Split-Path -Parent -Path $MyInvocation.MyCommand.Definition
$cmder_root = $ScriptRoot.replace("\scripts","")
$cmder_root = Resolve-Path "$PSScriptRoot\.."
# Dot source util functions into this scope
. ".\utils.ps1"
. "$PSScriptRoot\utils.ps1"
$ErrorActionPreference = "Stop"
Push-Location -Path $saveTo
$sources = Get-Content $sourcesPath | Out-String | Convertfrom-Json
if ($Compile) {
# Check for requirements
Ensure-Executable "msbuild"
# Get the version string
$version = Get-VersionStr
Push-Location -Path $launcher
Create-RC $version ($launcher + '\src\version.rc2')
Write-Verbose "Building the launcher..."
# Referene: https://docs.microsoft.com/visualstudio/msbuild/msbuild-command-line-reference
msbuild CmderLauncher.vcxproj /t:Clean,Build /p:configuration=Release /m
if ($LastExitCode -ne 0) {
throw "MSBuild failed to build the launcher executable."
}
Pop-Location
}
if (-not $noVendor) {
# Check for requirements
Ensure-Exists $sourcesPath
Ensure-Executable "7z"
# Get the vendor sources
$sources = Get-Content $sourcesPath | Out-String | ConvertFrom-Json
Push-Location -Path $saveTo
New-Item -Type Directory -Path (Join-Path $saveTo "/tmp/") -ErrorAction SilentlyContinue >$null
$vend = $pwd
# Preserve modified (by user) ConEmu setting file
if ($config -ne "") {
$ConEmuXml = Join-Path $saveTo "conemu-maximus5\ConEmu.xml"
@ -76,20 +108,21 @@ if ($config -ne "") {
$ConEmuXmlSave = Join-Path $config "ConEmu.xml"
Write-Verbose "Backup '$ConEmuXml' to '$ConEmuXmlSave'"
Copy-Item $ConEmuXml $ConEmuXmlSave
} else { $ConEmuXml = "" }
} else { $ConEmuXml = "" }
}
else { $ConEmuXml = "" }
}
else { $ConEmuXml = "" }
# Kill ssh-agent.exe if it is running from the $env:cmder_root we are building
foreach ($ssh_agent in $(get-process ssh-agent -erroraction silentlycontinue)) {
if ([string]$($ssh_agent.path) -match [string]$cmder_root.replace('\','\\')) {
write-verbose $("Stopping " + $ssh_agent.path + "!")
stop-process $ssh_agent.id
foreach ($ssh_agent in $(Get-Process ssh-agent -ErrorAction SilentlyContinue)) {
if ([string]$($ssh_agent.path) -Match [string]$cmder_root.replace('\', '\\')) {
Write-Verbose $("Stopping " + $ssh_agent.path + "!")
Stop-Process $ssh_agent.id
}
}
$vend = $pwd
foreach ($s in $sources) {
Write-Verbose "Getting $($s.name) from URL $($s.url)"
Write-Verbose "Getting vendored $($s.name) $($s.version)..."
# We do not care about the extensions/type of archive
$tempArchive = "tmp/$($s.name).tmp"
@ -99,44 +132,50 @@ foreach ($s in $sources) {
Download-File -Url $s.url -File $vend\$tempArchive -ErrorAction Stop
Extract-Archive $tempArchive $s.name
if ((Get-Childitem $s.name).Count -eq 1) {
if ((Get-ChildItem $s.name).Count -eq 1) {
Flatten-Directory($s.name)
}
# Write current version to .cmderver file, for later.
"$($s.version)" | Out-File "$($s.name)/.cmderver"
}
# Restore user configuration
# Restore ConEmu user configuration
if ($ConEmuXml -ne "") {
Write-Verbose "Restore '$ConEmuXmlSave' to '$ConEmuXml'"
Copy-Item $ConEmuXmlSave $ConEmuXml
}
Pop-Location
if($Compile) {
Push-Location -Path $launcher
msbuild CmderLauncher.vcxproj /p:configuration=Release
if ($LastExitCode -ne 0) {
throw "msbuild failed to build the executable."
}
Pop-Location
} else {
Write-Warning "You are not building a launcher, Use -Compile"
Write-Warning "This cannot be a release. Test build only!"
}
# Put vendor\cmder.sh in /etc/profile.d so it runs when we start bash or mintty
if ( (Test-Path $($SaveTo + "git-for-windows/etc/profile.d") ) ) {
write-verbose "Adding cmder.sh /etc/profile.d"
Copy-Item $($SaveTo + "cmder.sh") $($SaveTo + "git-for-windows/etc/profile.d/cmder.sh")
if ( (Test-Path $($saveTo + "git-for-windows/etc/profile.d") ) ) {
Write-Verbose "Adding cmder.sh /etc/profile.d"
Copy-Item $($saveTo + "cmder.sh") $($saveTo + "git-for-windows/etc/profile.d/cmder.sh")
}
# Replace /etc/profile.d/git-prompt.sh with cmder lambda prompt so it runs when we start bash or mintty
if ( !(Test-Path $($SaveTo + "git-for-windows/etc/profile.d/git-prompt.sh.bak") ) ) {
write-verbose "Replacing /etc/profile.d/git-prompt.sh with our git-prompt.sh"
Move-Item $($SaveTo + "git-for-windows/etc/profile.d/git-prompt.sh") $($SaveTo + "git-for-windows/etc/profile.d/git-prompt.sh.bak")
Copy-Item $($SaveTo + "git-prompt.sh") $($SaveTo + "git-for-windows/etc/profile.d/git-prompt.sh")
if ( !(Test-Path $($saveTo + "git-for-windows/etc/profile.d/git-prompt.sh.bak") ) ) {
Write-Verbose "Replacing /etc/profile.d/git-prompt.sh with our git-prompt.sh"
Move-Item $($saveTo + "git-for-windows/etc/profile.d/git-prompt.sh") $($saveTo + "git-for-windows/etc/profile.d/git-prompt.sh.bak")
Copy-Item $($saveTo + "git-prompt.sh") $($saveTo + "git-for-windows/etc/profile.d/git-prompt.sh")
}
Write-Verbose "All good and done!"
Pop-Location
}
if (-not $Compile -or $noVendor) {
Write-Warning "You are not building the full project, Use -Compile without -noVendor"
Write-Warning "This cannot be a release. Test build only!"
return
}
Write-Verbose "Successfully built Cmder v$version!"
if ( $Env:APPVEYOR -eq 'True' ) {
Add-AppveyorMessage -Message "Building Cmder v$version was successful." -Category Information
}
if ( $Env:GITHUB_ACTIONS -eq 'true' ) {
Write-Output "::notice title=Build Complete::Building Cmder v$version was successful."
}
Write-Host -ForegroundColor green "All good and done!"

View File

@ -1,6 +1,6 @@
<#
.Synopsis
Pack cmder
Pack Cmder
.DESCRIPTION
Use this script to pack cmder into release archives
@ -11,7 +11,7 @@
Creates default archives for cmder
.EXAMPLE
.\build -verbose
.\pack.ps1 -verbose
Creates default archives for cmder with plenty of information
.NOTES
@ -29,30 +29,48 @@ Param(
# -whatif switch to not actually make changes
# Path to the vendor configuration source file
[string]$cmderRoot = "..",
[string]$cmderRoot = "$PSScriptRoot\..",
# Vendor folder locaton
[string]$saveTo = "..\build"
[string]$saveTo = "$PSScriptRoot\..\build"
)
$cmderRoot = Resolve-Path $cmderRoot
. "$PSScriptRoot\utils.ps1"
$ErrorActionPreference = "Stop"
Ensure-Executable "7z"
$targets = @{
"cmder.zip" = $null;
"cmder.7z" = $null;
"cmder_mini.zip" = "-x!`"vendor\git-for-windows`"";
"cmder.7z" = "-t7z -m0=lzma2 -mx=9 -mfb=64 -md=32m -ms=on -myx=7 -mqs=on";
"cmder.zip" = "-mm=Deflate -mfb=128 -mpass=3";
"cmder_mini.zip" = "-xr!`"vendor\git-for-windows`"";
}
Delete-Existing "..\Version*"
Delete-Existing "..\build\*"
Push-Location -Path $cmderRoot
$version = Invoke-Expression "git describe --abbrev=0 --tags"
Delete-Existing "$cmderRoot\Version*"
Delete-Existing "$cmderRoot\build\*"
if (-not (Test-Path -PathType container $saveTo)) {
(New-Item -ItemType Directory -Path $saveTo) | Out-Null
}
$saveTo = Resolve-Path $saveTo
$version = Get-VersionStr
(New-Item -ItemType file "$cmderRoot\Version $version") | Out-Null
if ($PSCmdlet.MyInvocation.BoundParameters["Verbose"].IsPresent) {
Write-Verbose "Packing Cmder $version in $saveTo..."
$excluded = (Get-Content -Path "$cmderRoot\packignore") -Split [System.Environment]::NewLine | Where-Object { $_ }
Get-ChildItem $cmderRoot -Force -Exclude $excluded
}
foreach ($t in $targets.GetEnumerator()) {
Create-Archive $cmderRoot "$saveTo\$($t.Name)" $t.Value
Create-Archive "$cmderRoot" "$saveTo\$($t.Name)" $t.Value
$hash = (Digest-Hash "$saveTo\$($t.Name)")
Add-Content -path "$saveTo\hashes.txt" -value ($t.Name + ' ' + $hash)
}
Pop-Location

272
scripts/update.ps1 Normal file
View File

@ -0,0 +1,272 @@
<#
.Synopsis
Update Cmder vendored dependencies
.DESCRIPTION
This script updates dependencies to the latest version in vendor/sources.json file.
You will need to make this script executable by setting your Powershell Execution Policy to Remote signed
Then unblock the script for execution with UnblockFile .\build.ps1
.EXAMPLE
.\build.ps1
Updates the dependency sources in the default location, the vendor/sources.json file.
.EXAMPLE
.\build -verbose
Updates the dependency sources and see what's going on.
.EXAMPLE
.\build.ps1 -SourcesPath '~/custom/vendors.json'
Specify the path to update dependency sources file at.
.NOTES
AUTHORS
David Refoua <David@Refoua.me>
Part of the Cmder project.
.LINK
http://cmder.app/ - Project Home
#>
[CmdletBinding(SupportsShouldProcess = $true)]
Param(
# CmdletBinding will give us;
# -verbose switch to turn on logging and
# -whatif switch to not actually make changes
# Path to the vendor configuration source file
[string]$sourcesPath = "$PSScriptRoot\..\vendor\sources.json"
)
# Get the root directory of the cmder project.
$cmder_root = Resolve-Path "$PSScriptRoot\.."
# Dot source util functions into this scope
. "$PSScriptRoot\utils.ps1"
$ErrorActionPreference = "Stop"
# Attempts to match the current link with the new link, returning the count of matching characters.
function Match-Filenames {
param (
$url,
$downloadUrl,
$fromEnd
)
$filename = [System.IO.Path]::GetFileName($url)
$filenameDownload = [System.IO.Path]::GetFileName($downloadUrl)
$position = 0
if ([String]::IsNullOrEmpty($filename) -or [String]::IsNullOrEmpty($filenameDownload)) {
throw "Either one or both filenames are empty!"
}
if ($fromEnd) {
$arr = $filename -split ""
[array]::Reverse($arr)
$filename = $arr -join ''
$arr = $filenameDownload -split ""
[array]::Reverse($arr)
$filenameDownload = $arr -join ''
}
while ($filename.Substring($position, 1) -eq $filenameDownload.Substring($position, 1)) {
$position++
if ( ($position -ge $filename.Length) -or ($position -ge $filenameDownload.Length) ) {
break
}
}
return $position
}
# Uses the GitHub api in order to fetch the current download links for the latest releases of the repo.
function Fetch-DownloadUrl {
param (
[Parameter(Mandatory = $true)]
$urlStr
)
$url = [uri] $urlStr
if ((-not $url) -or ($null -eq $url) -or ($url -eq '')) {
throw "Failed to parse url: $urlStr"
}
if (-not ("http", "https" -contains $url.Scheme)) {
throw "unknown source scheme: $($url.Scheme)"
}
if (-not ($url.Host -ilike "*github.com")) {
throw "unknown source domain: $($url.Host)"
}
$p = $url.Segments.Split([Environment]::NewLine)
$headers = @{}
if ($env:GITHUB_TOKEN) {
$headers["Authorization"] = "token $($env:GITHUB_TOKEN)"
}
# Api server for GitHub
$urlHost = "api.github.com"
# Path for releases end-point
$urlPath = [IO.Path]::Combine('repos', $p[1], $p[2], 'releases').Trim('/')
$apiUrl = [uri] (New-Object System.UriBuilder -ArgumentList $url.Scheme, $urlHost, -1, $urlPath).Uri
$info = Invoke-RestMethod -Uri $apiUrl -Headers $headers
$downloadLinks = (New-Object System.Collections.Generic.List[System.Object])
$charCount = 0
if (-not ($info -is [array])) {
throw "The response received from API server is invalid"
}
:loop foreach ($i in $info) {
if (-not ($i.assets -is [array])) {
continue
}
foreach ($a in $i.assets) {
if ([String]::IsNullOrEmpty($a.browser_download_url)) {
continue
}
# Skip some download links as we're not interested in them
if ( $a.browser_download_url -ilike "*_symbols*" ) {
continue
}
$score = Match-Filenames $url $a.browser_download_url
# Skip links that don't match or are less similar
if ( ($score -eq 0) -or ($score -lt $charCount) ) {
continue
}
# If we reach the same download link as we have
if ( $score -eq [System.IO.Path]::GetFileName($url).Length ) {
}
$charCount = $score
$downloadLinks.Add($a.browser_download_url)
}
# If at least one download link was found, don't continue with older releases
if ( $downloadLinks.Length -gt 0 ) {
break :loop
}
}
# Special case for archive downloads of repository
if (($null -eq $downloadLinks) -or (-not $downloadLinks)) {
if ((($p | ForEach-Object { $_.Trim('/') }) -contains "archive") -and $info[0].tag_name) {
for ($i = 0; $i -lt $p.Length; $i++) {
if ($p[$i].Trim('/') -eq "archive") {
$p[$i + 1] = $info[0].tag_name + ".zip"
$downloadLinks = $url.Scheme + "://" + $url.Host + ($p -join '')
return $downloadLinks
}
}
}
return ''
}
$temp = $downloadLinks | Where-Object { (Match-Filenames $url $_) -eq $charCount }
$downloadLinks = (New-Object System.Collections.Generic.List[System.Object])
$charCount = 0
foreach ($l in $temp) {
$score = Match-Filenames $url $l true
if ( ($score -eq 0) -or ($score -lt $charCount) ) {
continue
}
$charCount = $score
}
$downloadLinks = $temp | Where-Object { (Match-Filenames $url $_ true) -eq $charCount }
if (($null -eq $downloadLinks) -or (-not $downloadLinks)) {
throw "No suitable download links matched for the url!"
}
if (-not($downloadLinks -is [String])) {
throw "Found multiple matches for the same url:`n" + $downloadLinks
}
return $downloadLinks
}
$count = 0
# Read the current sources content
$sources = Get-Content $sourcesPath | Out-String | ConvertFrom-Json
foreach ($s in $sources) {
Write-Verbose "Updating sources link for $($s.name)..."
Write-Verbose "Old Link: $($s.url)"
$downloadUrl = Fetch-DownloadUrl $s.url
if (($null -eq $downloadUrl) -or ($downloadUrl -eq '')) {
Write-Verbose "No new links were found"
continue
}
Write-Verbose "Link: $downloadUrl"
$url = [uri] $downloadUrl
$version = ''
if (($url.Segments[-3] -eq "download/") -and ($url.Segments[-2].StartsWith("v"))) {
$version = $url.Segments[-2].TrimStart('v').TrimEnd('/')
}
if (($url.Segments[-2] -eq "archive/")) {
$version = [System.IO.Path]::GetFileNameWithoutExtension($url.Segments[-1].TrimStart('v').TrimEnd('/'))
}
if ($version -eq '') {
throw "Unable to extract version from url string"
}
Write-Verbose "Version: $version"
if ( $s.version -ne $version ) {
# if ( ([System.Version] $s.version) -gt ([System.Version] $version) ) {
# throw "The current version $($s.version) is already newer than the found version $version!"
# }
$count++
}
$s.url = $downloadUrl
$s.version = $version
}
$sources | ConvertTo-Json | Set-Content $sourcesPath
if ($count -eq 0) {
Write-Host -ForegroundColor yellow "No new releases were found."
return
}
if ($Env:APPVEYOR -eq 'True') {
Add-AppveyorMessage -Message "Successfully updated $count dependencies." -Category Information
}
if ($Env:GITHUB_ACTIONS -eq 'true') {
Write-Output "::notice title=Task Complete::Successfully updated $count dependencies."
}
Write-Host -ForegroundColor green "Successfully updated $count dependencies."

View File

@ -9,13 +9,13 @@ function Ensure-Exists($path) {
function Ensure-Executable($command) {
try { Get-Command $command -ErrorAction Stop > $null }
catch {
If( ($command -eq "7z") -and (Test-Path "$env:programfiles\7-zip\7z.exe") ){
set-alias -Name "7z" -Value "$env:programfiles\7-zip\7z.exe" -Scope script
if( ($command -eq "7z") -and (Test-Path "$env:programfiles\7-zip\7z.exe") ){
Set-Alias -Name "7z" -Value "$env:programfiles\7-zip\7z.exe" -Scope script
}
ElseIf( ($command -eq "7z") -and (Test-Path "$env:programw6432\7-zip\7z.exe") ) {
set-alias -Name "7z" -Value "$env:programw6432\7-zip\7z.exe" -Scope script
elseif( ($command -eq "7z") -and (Test-Path "$env:programw6432\7-zip\7z.exe") ) {
Set-Alias -Name "7z" -Value "$env:programw6432\7-zip\7z.exe" -Scope script
}
Else {
else {
Write-Error "Missing $command! Ensure it is installed and on in the PATH"
exit 1
}
@ -23,35 +23,42 @@ function Ensure-Executable($command) {
}
function Delete-Existing($path) {
Write-Verbose "Remove $path"
Remove-Item -Recurse -force $path -ErrorAction SilentlyContinue
if (Test-Path $path) {
Write-Verbose "Remove existing $path"
}
Remove-Item -Recurse -Force $path -ErrorAction SilentlyContinue
}
function Extract-Archive($source, $target) {
Write-Verbose $("Extracting Archive '$cmder_root\vendor\" + $source.replace('/','\') + " to '$cmder_root\vendor\$target'")
Invoke-Expression "7z x -y -o`"$($target)`" `"$source`" > `$null"
if ($lastexitcode -ne 0) {
Write-Error "Extracting of $source failied"
if ($LastExitCode -ne 0) {
Write-Error "Extracting of $source failed"
}
Remove-Item $source
}
function Create-Archive($source, $target, $params) {
$command = "7z a -x@`"$source\packignore`" $params $target $source > `$null"
Write-Verbose "Running: $command"
$command = "7z a -x@`"$source\packignore`" $params `"$target`" `"*`" > `$null"
Write-Verbose "Creating Archive from '$source' in '$target' with parameters '$params'"
Push-Location $source
Invoke-Expression $command
if ($lastexitcode -ne 0) {
Write-Error "Compressing $source failied"
Pop-Location
if ($LastExitCode -ne 0) {
Write-Error "Compressing $source failed"
}
}
# If directory contains only one child directory
# Flatten it instead
function Flatten-Directory($name) {
$child = (Get-Childitem $name)[0]
Rename-Item $name -NewName "$($name)_moving"
Move-Item -Path "$($name)_moving\$child" -Destination $name
Remove-Item -Recurse "$($name)_moving"
$name = Resolve-Path $name
$moving = "$($name)_moving"
Rename-Item $name -NewName $moving
Write-Verbose "Flattening the '$name' directory..."
$child = (Get-ChildItem $moving)[0] | Resolve-Path
Move-Item -Path $child -Destination $name
Remove-Item -Recurse $moving
}
function Digest-Hash($path) {
@ -62,6 +69,102 @@ function Digest-Hash($path) {
return Invoke-Expression "md5sum $path"
}
function Set-GHVariable {
param(
[Parameter(Mandatory = $true)]
[string]$Name,
[Parameter(Mandatory = $true)]
[string]$Value
)
Write-Verbose "Setting CI variable $Name to $Value" -Verbose
if ($env:GITHUB_ENV) {
Write-Output "$Name=$Value" | Out-File -FilePath $env:GITHUB_ENV -Append -Encoding utf8
}
}
function Get-GHTempPath {
$temp = [System.IO.Path]::GetTempPath()
if ($env:RUNNER_TEMP) {
$temp = $env:RUNNER_TEMP
}
Write-Verbose "Get CI Temp path: $temp" -Verbose
return $temp
}
function Get-VersionStr {
# Clear existing variable
if ($string) { Clear-Variable -name string }
# Determine if git is available
if (Get-Command "git.exe" -ErrorAction SilentlyContinue) {
# Determine if the current directory is a git repository
$GitPresent = Invoke-Expression "git rev-parse --is-inside-work-tree" -ErrorAction SilentlyContinue
if ( $GitPresent -eq 'true' ) {
$string = Invoke-Expression "git describe --abbrev=0 --tags"
}
}
# Fallback used when Git is not available
if ( -not($string) ) {
$string = Parse-Changelog ($PSScriptRoot + '\..\' + 'CHANGELOG.md')
}
# Add build number, if AppVeyor is present
if ( $Env:APPVEYOR -eq 'True' ) {
$string = $string + '.' + $Env:APPVEYOR_BUILD_NUMBER
}
elseif ( $Env:GITHUB_ACTIONS -eq 'true' ) {
$string = $string + '.' + $Env:GITHUB_RUN_NUMBER
}
# Remove starting 'v' characters
$string = $string -replace '^v+','' # normalize version string
return $string
}
function Parse-Changelog($file) {
# Define the regular expression to match the version string from changelog
[regex]$regex = '^## \[(?<version>[\w\-\.]+)\]\([^\n()]+\)\s+\([^\n()]+\)$';
# Find the first match of the version string which means the latest version
$version = Select-String -Path $file -Pattern $regex | Select-Object -First 1 | ForEach-Object { $_.Matches.Groups[1].Value }
return $version
}
function Create-RC($string, $path) {
$version = $string + '.0.0.0.0' # padding for version string
if ( !(Test-Path "$path.sample") ) {
throw "Invalid path provided for resources file."
}
$resource = Get-Content -Path "$path.sample"
$pattern = @( "Cmder-Major-Version", "Cmder-Minor-Version", "Cmder-Revision-Version", "Cmder-Build-Version" )
$index = 0
# Replace all non-numeric characters to dots and split to array
$version = $version -replace '[^0-9]+','.' -split '\.'
foreach ($fragment in $version) {
if ( !$fragment ) { break }
elseif ($index -le $pattern.length) {
$resource = $resource.Replace( "{" + $pattern[$index++] + "}", $fragment )
}
}
# Add the version string
$resource = $resource.Replace( "{Cmder-Version-Str}", '"' + $string + '"' )
# Write the results
Set-Content -Path $path -Value $resource
}
function Register-Cmder() {
[CmdletBinding()]
Param
@ -121,9 +224,24 @@ function Download-File {
$Url,
$File
)
# I think this is the problem
$File = $File -Replace "/", "\"
Write-Verbose "Downloading from $Url to $File"
[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
$useBitTransfer = $null -ne (Get-Module -Name BitsTransfer -ListAvailable) -and ($PSVersionTable.PSVersion.Major -le 5)
$File = $File -replace "/", "\"
try {
if ($useBitTransfer) {
Start-BitsTransfer -Source $Url -Destination $File -DisplayName "Downloading '$Url' to $File"
return
}
}
catch {
Write-Error "Failed to download file using BITS, reason: $_`nUsing fallback method instead...`n" -ErrorAction:Continue
}
Write-Verbose "Downloading from $Url to $File`n"
$wc = New-Object System.Net.WebClient
if ($env:https_proxy) {
$wc.proxy = (New-Object System.Net.WebProxy($env:https_proxy))

View File

@ -59,6 +59,7 @@
<value name="FadeInactive" type="hex" data="01"/>
<value name="FadeInactiveLow" type="hex" data="00"/>
<value name="FadeInactiveHigh" type="hex" data="c8"/>
<value name="ComSpec.UncPaths" type="hex" data="01"/>
<value name="ConVisible" type="hex" data="00"/>
<value name="ConInMode" type="dword" data="ffffffff"/>
<value name="UseInjects" type="hex" data="01"/>
@ -484,7 +485,7 @@
<value name="DndRKey" type="hex" data="a2"/>
<value name="WndDragKey" type="dword" data="00121101"/>
<key name="Tasks" modified="2018-02-22 06:02:12" build="171109">
<value name="Count" type="long" data="8"/>
<value name="Count" type="long" data="9"/>
<key name="Task1" modified="2018-02-22 06:02:12" build="171109">
<value name="Name" type="string" data="{cmd::Cmder as Admin}"/>
<value name="GuiArgs" type="string" data=" /icon &quot;%CMDER_ROOT%\icons\cmder.ico&quot;"/>
@ -504,20 +505,20 @@
<value name="Flags" type="dword" data="00000000"/>
</key>
<key name="Task3" modified="2018-02-22 06:05:13" build="171109">
<value name="Name" type="string" data="{Powershell::PowerShell as Admin}"/>
<value name="Name" type="string" data="{PowerShell::PowerShell as Admin}"/>
<value name="Hotkey" type="dword" data="00000000"/>
<value name="GuiArgs" type="string" data=" /icon &quot;%CMDER_ROOT%\icons\cmder.ico&quot;"/>
<value name="Cmd1" type="string" data="*PowerShell -ExecutionPolicy Bypass -NoLogo -NoProfile -NoExit -Command &quot;Invoke-Expression '. ''%ConEmuDir%\..\profile.ps1'''&quot;"/>
<value name="Cmd1" type="string" data="*PowerShell -ExecutionPolicy Bypass -NoLogo -NoProfile -NoExit -Command &quot;Invoke-Expression 'Import-Module ''%ConEmuDir%\..\profile.ps1'''&quot;"/>
<value name="Active" type="long" data="0"/>
<value name="Count" type="long" data="1"/>
<value name="Flags" type="dword" data="00000000"/>
</key>
<key name="Task4" modified="2018-02-22 06:05:13" build="171109">
<value name="Name" type="string" data="{Powershell::Powershell}"/>
<value name="Name" type="string" data="{PowerShell::PowerShell}"/>
<value name="Hotkey" type="dword" data="00000000"/>
<value name="GuiArgs" type="string" data=" /icon &quot;%CMDER_ROOT%\icons\cmder.ico&quot;"/>
<value name="Cmd1" type="string" data="PowerShell -ExecutionPolicy Bypass -NoLogo -NoProfile -NoExit -Command &quot;Invoke-Expression '. ''%ConEmuDir%\..\profile.ps1'''&quot;"/>
<value name="Cmd2" type="string" data="%CMDER_ROOT%\vendor\git-for-windows\git-bash.exe"/>
<value name="Cmd1" type="string" data="PowerShell -ExecutionPolicy Bypass -NoLogo -NoProfile -NoExit -Command &quot;Invoke-Expression 'Import-Module ''%ConEmuDir%\..\profile.ps1'''&quot;"/>
<value name="Cmd2" type="string" data="&quot;%CMDER_ROOT%\vendor\git-for-windows\git-bash.exe&quot;"/>
<value name="Active" type="long" data="0"/>
<value name="Count" type="long" data="1"/>
<value name="Flags" type="dword" data="00000000"/>
@ -527,7 +528,7 @@
<value name="Flags" type="dword" data="00000000"/>
<value name="Hotkey" type="dword" data="00000000"/>
<value name="GuiArgs" type="string" data="/icon &quot;%ConEmuDir%\..\git-for-windows\usr\share\git\git-for-windows.ico&quot;"/>
<value name="Cmd1" type="string" data="*%ConEmuDir%\..\git-for-windows\usr\bin\mintty.exe /bin/bash -l"/>
<value name="Cmd1" type="string" data="*&quot;%ConEmuDir%\..\git-for-windows\usr\bin\mintty.exe&quot; /bin/bash -l"/>
<value name="Active" type="long" data="0"/>
<value name="Count" type="long" data="1"/>
</key>
@ -536,10 +537,10 @@
<value name="Flags" type="dword" data="00000000"/>
<value name="Hotkey" type="dword" data="00000000"/>
<value name="GuiArgs" type="string" data="/icon &quot;%ConEmuDir%\..\git-for-windows\usr\share\git\git-for-windows.ico&quot;"/>
<value name="Cmd1" type="string" data="%ConEmuDir%\..\git-for-windows\usr\bin\mintty.exe /bin/bash -l"/>
<value name="Cmd1" type="string" data="&quot;%ConEmuDir%\..\git-for-windows\usr\bin\mintty.exe&quot; /bin/bash -l"/>
<value name="Active" type="long" data="0"/>
<value name="Count" type="long" data="1"/>
<value name="Cmd2" type="string" data="%CMDER_ROOT%vendor\git-for-windows\usr\bin\mintty.exe /bin/bash -l"/>
<value name="Cmd2" type="string" data="&quot;%CMDER_ROOT%vendor\git-for-windows\usr\bin\mintty.exe&quot; /bin/bash -l"/>
</key>
<key name="Task7" modified="2018-02-22 06:05:13" build="171109">
<value name="Name" type="string" data="{bash::bash as Admin}"/>
@ -548,14 +549,23 @@
<value name="GuiArgs" type="string" data=" /icon &quot;%CMDER_ROOT%\icons\cmder.ico&quot;"/>
<value name="Active" type="long" data="0"/>
<value name="Count" type="long" data="1"/>
<value name="Cmd1" type="string" data="*cmd /c &quot;%ConEmuDir%\..\git-for-windows\bin\bash --login -i&quot;"/>
<value name="Cmd1" type="string" data="*set &quot;PATH=%ConEmuDir%\..\git-for-windows\usr\bin;%PATH%&quot; &amp; %ConEmuDir%\..\git-for-windows\git-cmd.exe --no-cd --command=%ConEmuBaseDirShort%\conemu-msys2-64.exe &quot;%ConEmuDir%\..\git-for-windows\usr\bin\bash.exe&quot; --login -i"/>
</key>
<key name="Task8" modified="2018-02-22 06:05:13" build="171109">
<value name="Name" type="string" data="{bash::bash}"/>
<value name="Flags" type="dword" data="00000000"/>
<value name="Hotkey" type="dword" data="00000000"/>
<value name="GuiArgs" type="string" data=" /icon &quot;%CMDER_ROOT%\icons\cmder.ico&quot;"/>
<value name="Cmd1" type="string" data="cmd /c &quot;%ConEmuDir%\..\git-for-windows\bin\bash --login -i&quot;"/>
<value name="Cmd1" type="string" data="set &quot;PATH=%ConEmuDir%\..\git-for-windows\usr\bin;%PATH%&quot; &amp; %ConEmuDir%\..\git-for-windows\git-cmd.exe --no-cd --command=%ConEmuBaseDirShort%\conemu-msys2-64.exe &quot;%ConEmuDir%\..\git-for-windows\usr\bin\bash.exe&quot; --login -i"/>
<value name="Active" type="long" data="0"/>
<value name="Count" type="long" data="1"/>
</key>
<key name="Task9" modified="2018-03-23 23:26:53" build="180318">
<value name="Name" type="string" data="{WSL::bash}"/>
<value name="Flags" type="dword" data="00000000"/>
<value name="Hotkey" type="dword" data="00000000"/>
<value name="GuiArgs" type="string" data='-icon "%USERPROFILE%\AppData\Local\lxss\bash.ico"'/>
<value name="Cmd1" type="string" data='set "PATH=%ConEmuBaseDirShort%\wsl;%PATH%" &amp; %ConEmuBaseDirShort%\conemu-cyg-64.exe --wsl -cur_console:pm:/mnt'/>
<value name="Active" type="long" data="0"/>
<value name="Count" type="long" data="1"/>
</key>

View File

@ -2,7 +2,7 @@
if "%ALIASES%" == "" (
set ALIASES="%CMDER_ROOT%\config\user-aliases.cmd"
set ALIASES="%CMDER_ROOT%\config\user_aliases.cmd"
)
setlocal enabledelayedexpansion
@ -22,10 +22,15 @@ goto parseargument
if /i "%currentarg%" equ "/f" (
set ALIASES=%~2
set _f=%~2
shift
goto :do_shift
) else if /i "%currentarg%" == "/reload" (
goto :p_reload
) else if "%currentarg%" equ "/H" (
goto :p_help
) else if "%currentarg%" equ "/h" (
goto :p_help
) else if "%currentarg%" equ "/?" (
goto :p_help
) else if /i "%currentarg%" equ "/d" (
@ -40,7 +45,7 @@ goto parseargument
) else if "%currentarg%" neq "" (
if "%~2" equ "" (
:: Show the specified alias
doskey /macros | findstr /b %currentarg%= && exit /b
doskey /macros | %WINDIR%\System32\findstr /b %currentarg%= && exit /b
echo insufficient parameters.
goto :p_help
) else (
@ -48,9 +53,10 @@ goto parseargument
set _x=%*
)
)
rem #endregion parseargument
if "%ALIASES%" neq "%CMDER_ROOT%\config\user-aliases.cmd" (
if "%ALIASES%" neq "%CMDER_ROOT%\config\user_aliases.cmd" (
set _x=!_x:/f "%ALIASES%" =!
if not exist "%ALIASES%" (
@ -64,16 +70,16 @@ if "%ALIASES%" neq "%CMDER_ROOT%\config\user-aliases.cmd" (
)
:: validate alias
for /f "delims== tokens=1,* usebackq" %%G in (`echo "%_x%"`) do (
for /f "delims== tokens=1,* usebackq" %%G in (`echo "!_x!"`) do (
set alias_name=%%G
set alias_value=%%H
)
:: leading quotes added while validating
set alias_name=%alias_name:~1%
set alias_name=!alias_name:~1!
:: trailing quotes added while validating
set alias_value=%alias_value:~0,-1%
set alias_value=!alias_value:~0,-1!
::remove spaces
set _temp=%alias_name: =%
@ -85,7 +91,7 @@ if not ["%_temp%"] == ["%alias_name%"] (
)
:: replace already defined alias
findstr /b /v /i "%alias_name%=" "%ALIASES%" >> "%ALIASES%.tmp"
%WINDIR%\System32\findstr /b /l /v /i "%alias_name%=" "%ALIASES%" >> "%ALIASES%.tmp"
echo %alias_name%=%alias_value% >> "%ALIASES%.tmp" && type "%ALIASES%.tmp" > "%ALIASES%" & @del /f /q "%ALIASES%.tmp"
doskey /macrofile="%ALIASES%"
endlocal
@ -93,7 +99,8 @@ exit /b
:p_del
set del_alias=%~1
findstr /b /v /i "%del_alias%=" "%ALIASES%" >> "%ALIASES%.tmp"
%WINDIR%\System32\findstr /b /l /v /i "%del_alias%=" "%ALIASES%" >> "%ALIASES%.tmp"
type "%ALIASES%".tmp > "%ALIASES%" & @del /f /q "%ALIASES%.tmp"
doskey %del_alias%=
doskey /macrofile="%ALIASES%"
@ -105,27 +112,38 @@ echo Aliases reloaded
exit /b
:p_show
doskey /macros|findstr /v /r "^;=" | sort
doskey /macros|%WINDIR%\System32\findstr /v /r "^;=" | sort
exit /b
:p_help
echo.Usage:
echo.
echo. alias [options] [alias=full command]
echo. alias [options] [alias=alias command]
echo.
echo.Options:
echo.
echo. Note: Options MUST precede the alias definition.
echo.
echo. /d [alias] Delete an [alias].
echo. /f [macrofile] Path to the [macrofile] you want to store the new alias in.
echo. Default: %cmder_root%\config\user-aliases.cmd
echo. Default: %cmder_root%\config\user_aliases.cmd
echo. /reload Reload the aliases file. Can be used with /f argument.
echo. Default: %cmder_root%\config\user-aliases.cmd
echo. Default: %cmder_root%\config\user_aliases.cmd
echo.
echo. If alias is called with no parameters, it will display the list of existing aliases.
echo. If alias is called with no parameters, it will display the list of existing
echo. aliases.
echo.
echo. In the alias command, you can use the following notations:
echo.
echo. ^^^^^^^^%% - %% signs in env vars must be escaped if preserving the variable
echo. in he alias is desired. Variables in aliases surrounded by double
echo. quotes only require '^^%%' vs '^^^^^^^^%%'
echo. $* - allows the alias to assume all the parameters of the supplied
echo. command.
echo. $1-$9 - Allows you to separate parameter by number, much like %%1 in
echo. batch.
echo. $T - Command separator, allowing you to string several commands
echo. together into one alias.
echo.
echo. In the command, you can use the following notations:
echo. $* allows the alias to assume all the parameters of the supplied command.
echo. $1-$9 Allows you to seperate parameter by number, much like %%1 in batch.
echo. $T is the command seperator, allowing you to string several commands together into one alias.
echo. For more information, read DOSKEY /?
exit /b

133
vendor/bin/cexec.cmd vendored Normal file
View File

@ -0,0 +1,133 @@
@echo off
if "%~1" equ "" goto :wrongSyntax
if not defined CMDER_USER_FLAGS (
:: in case nothing was passed to %CMDER_USER_FLAGS%
set "CMDER_USER_FLAGS= "
)
set "feNot=false"
goto :parseArgument
:doShift
shift
:parseArgument
set "currenArgu=%~1"
if /i "%currenArgu%" equ "/setPath" (
set ccall=call "%~dp0cexec.cmd"
set cexec="%~dp0cexec.cmd"
) else if /i "%currenArgu%" == "/?" (
goto :help
) else if /i "%currenArgu%" equ "/help" (
goto :help
) else if /i "%currenArgu%" equ "/h" (
goto :help
) else if /i "%currenArgu%" equ "NOT" (
set "feNot=true"
goto :doShift
) else (
if "%~1" equ "" goto :wrongSyntax
if "%~2" equ "" goto :wrongSyntax
set "feFlagName=%~1"
set "feCommand=%~2"
if not "%~3" equ "" (
set "feParam=%~3"
)
goto :detect
)
:detect
:: to avoid erroneous deteciton like "/do" "/doNOT", which both have a "/do"
:: we added a space after the flag name, like "/do ", which won't match "/doN"
set "feFlagName=%feFlagName% "
:: echo.
:: echo %CMDER_USER_FLAGS%
:: echo %feNOT%
:: echo %feFlagName%
:: echo %feCommand%
:: echo %feParam%
:: echo.
echo %CMDER_USER_FLAGS% | %WINDIR%\System32\find /i "%feFlagName%">nul
if "%ERRORLEVEL%" == "0" (
if "%feNOT%" == "false" (
endlocal && call %feCommand% %feParam%
exit /b 0
)
) else (
if "%feNOT%" == "true" (
endlocal && call %feCommand% %feParam%
exit /b 0
)
)
endlocal
exit /b 1
:wrongSyntax
echo The syntax of the command is incorrect.
echo.
echo use /? for help
echo.
endlocal
exit /b
:help
echo.
echo CExec - Conditional Exec
echo.
echo Handles with custom arguments for cmder's init.bat.
echo written by xiazeyu, inspired DRSDavidSoft.
echo.
echo Usage:
echo.
echo cexec /setPath [NOT] flagName command/program [parameters]
echo.
echo /setPath Generate a global variables %%ccall%% and %%cexec%% for
echo quicker use. Following arguments will be ignored.
echo.
echo NOT Specifies that cexec should carry out
echo the command only if the flag is missing.
echo.
echo /[flagName] Specifies which flag name is to detect. It's recommended
echo to use a pair of double quotation marks to wrap
echo your flag name to avoid exceed expectation.
echo.
echo command/program Specifies the command to carry out if the
echo argument name is detected. It's recommended to
echo use a pair of double quotation marks to
echo wrap your command to avoid exceed expectation.
echo.
echo parameters These are the parameters passed to the command/program.
echo It's recommended to use a pair of double quotation marks
echo to wrap your flag name to avoid exceed expectation.
echo.
echo Examples:
echo.
echo These examples are expected to be written in %cmder_root%/config/user-profile.cmd
echo CExec evaluates the environment variable "CMDER_USER_FLAGS" and conditionally
echo caries out actions based on flags that are passed.
echo.
echo Case 1:
echo.
echo The following command in `user_profile.cmd` would execute "notepad.exe" and continue running the `user_profile.cmd`
echo.
echo "%ccall%" "/startNotepad" "start" "notepad.exe"
echo.
echo If you pass parameter to init.bat like:
echo.
echo init.bat /startNotepad
echo.
echo Case 2:
echo.
echo The following command in `user_profile.cmd` would execute "notepad.exe" and stop running the `user_profile.cmd`
echo.
echo "%cexec%" NOT "/dontStartNotepad" "start" "notepad.exe"
echo.
echo UNLESS you pass parameter to init.bat like:
echo.
echo init.bat /dontStartNotepad
echo.
endlocal
exit /b

61
vendor/bin/cmder_diag.cmd vendored Normal file
View File

@ -0,0 +1,61 @@
@echo off
(echo.
echo ------------------------------------
echo set
echo ------------------------------------
set
echo.
echo ------------------------------------
echo where git
echo ------------------------------------
where git
echo.
echo ------------------------------------
echo where clink
echo ------------------------------------
where clink
echo.
echo ------------------------------------
echo systeminfo
echo ------------------------------------
systeminfo
echo ------------------------------------
echo dir "%cmder_root%"
echo ------------------------------------
dir "%cmder_root%"
echo.
echo ------------------------------------
echo dir "%cmder_root%\vendor"
echo ------------------------------------
dir "%cmder_root%\vendor"
echo.
echo ------------------------------------
echo dir /s "%cmder_root%\bin"
echo ------------------------------------
dir /s "%cmder_root%\bin"
echo.
echo ------------------------------------
echo dir /s "%cmder_root%\config"
echo ------------------------------------
dir /s "%cmder_root%\config"
echo.
echo ------------------------------------
echo Make sure you sanitize this output of private data prior to posting it online for review by the CMDER Team!
echo ------------------------------------
) > "%temp%\cmder_diag_cmd.log"
type "%temp%\cmder_diag_cmd.log"
echo.
echo Above output was saved in "%temp%\cmder_diag_cmd.log"

64
vendor/bin/cmder_diag.ps1 vendored Normal file
View File

@ -0,0 +1,64 @@
if (test-path $env:temp\cmder_diag_ps.log) {
remove-item $env:temp\cmder_diag_ps.log
}
$cmder_diag = {
""
"------------------------------------"
"get-childitem env:"
"------------------------------------"
get-childitem env: | ft -autosize -wrap 2>&1
""
"------------------------------------"
"get-command git -all -ErrorAction SilentlyContinue"
"------------------------------------"
get-command git -all -ErrorAction SilentlyContinue
""
"------------------------------------"
"get-command clink -all -ErrorAction SilentlyContinue"
"------------------------------------"
get-command clink -all -ErrorAction SilentlyContinue
""
"------------------------------------"
"systeminfo"
"------------------------------------"
systeminfo 2>&1
"------------------------------------"
"get-childitem '$env:CMDER_ROOT'"
"------------------------------------"
get-childitem "$env:CMDER_ROOT" |ft LastWriteTime,mode,length,FullName
""
"------------------------------------"
"get-childitem '$env:CMDER_ROOT/vendor'"
"------------------------------------"
get-childitem "$env:CMDER_ROOT/vendor" |ft LastWriteTime,mode,length,FullName
""
"------------------------------------"
"get-childitem -s '$env:CMDER_ROOT/bin'"
"------------------------------------"
get-childitem -s "$env:CMDER_ROOT/bin" |ft LastWriteTime,mode,length,FullName
""
"------------------------------------"
"get-childitem -s '$env:CMDER_ROOT/config'"
"------------------------------------"
get-childitem -s "$env:CMDER_ROOT/config" |ft LastWriteTime,mode,length,FullName
""
"------------------------------------"
"Make sure you sanitize this output of private data prior to posting it online for review by the CMDER Team!"
"------------------------------------"
}
& $cmder_diag | out-file -filePath $env:temp\cmder_diag_ps.log
get-content "$env:temp\cmder_diag_ps.log"
write-host ""
write-host Above output was saved in "$env:temp\cmder_diag_ps.log"

61
vendor/bin/cmder_diag.sh vendored Normal file
View File

@ -0,0 +1,61 @@
#!/usr/bin/env bash
[[ -f "$TEMP/cmder_diag_sh.log" ]] && rm -f "$TEMP/cmder_diag_sh.log"
(echo ''
echo ------------------------------------
echo env
echo ------------------------------------
env 2>&1
echo ''
echo ------------------------------------
echo which git
echo ------------------------------------
which git 2>&1
echo ''
echo ------------------------------------
echo which clink
echo ------------------------------------
which clink 2>&1
echo ''
echo ------------------------------------
echo systeminfo
echo ------------------------------------
systeminfo 2>&1
echo ------------------------------------
echo ls -la "$CMDER_ROOT"
echo ------------------------------------
ls -la "$CMDER_ROOT" 2>&1
echo ''
echo ------------------------------------
echo ls -la "$CMDER_ROOT/vendor"
echo ------------------------------------
ls -la "$CMDER_ROOT/vendor" 2>&1
echo ''
echo ------------------------------------
echo ls -la /s "$CMDER_ROOT/bin"
echo ------------------------------------
ls -laR /s "$CMDER_ROOT/bin" 2>&1
echo ''
echo ------------------------------------
echo ls -la /s "$CMDER_ROOT/config"
echo ------------------------------------
ls -laR /s "$CMDER_ROOT/config" 2>&1
echo ''
echo ------------------------------------
echo Make sure you sanitize this output of private data prior to posting it online for review by the CMDER Team!
echo ------------------------------------
) > "$TEMP/cmder_diag_sh.log"
cat "$TEMP/cmder_diag_sh.log"
echo ''
echo Above output was saved in "$TEMP/cmder_diag_sh.log"

13
vendor/bin/cmder_shell.cmd vendored Normal file
View File

@ -0,0 +1,13 @@
@echo off
set CMDER_ROOT=%~dp0..\..\
if "%cmder_init%" == "1" (
"%CMDER_ROOT%\vendor\clink\clink.bat" inject -q --profile "%CMDER_ROOT%\config" --scripts "%CMDER_ROOT%\vendor"
) else (
set cmder_init=1
)
pushd "%CMDER_ROOT%"
call "%CMDER_ROOT%\vendor\init.bat" /f
popd

6
vendor/bin/excd.cmd vendored Normal file
View File

@ -0,0 +1,6 @@
@if "%~1"=="/?" (@cd %*)
@set excd=%*
@set excd=%excd:"=%
@if "%excd:~0,1%"=="~" (@set excd=%userprofile%\%excd:~1%)
@if not "%~1"=="/d" (@set excd_param="/d") else (@set excd_param=)
@cd %excd_param% "%excd%"

22
vendor/bin/timer.cmd vendored Normal file
View File

@ -0,0 +1,22 @@
@echo off
set start=%~1
set end=%~2
set options="tokens=1-4 delims=:.,"
for /f %options% %%a in ("%start%") do set start_h=%%a&set /a start_m=100%%b %% 100&set /a start_s=100%%c %% 100&set /a start_ms=100%%d %% 100
for /f %options% %%a in ("%end%") do set end_h=%%a&set /a end_m=100%%b %% 100&set /a end_s=100%%c %% 100&set /a end_ms=100%%d %% 100
set /a hours=%end_h%-%start_h%
set /a mins=%end_m%-%start_m%
set /a secs=%end_s%-%start_s%
set /a ms=%end_ms%-%start_ms%
if %ms% lss 0 set /a secs = %secs% - 1 & set /a ms = 100%ms%
if %secs% lss 0 set /a mins = %mins% - 1 & set /a secs = 60%secs%
if %mins% lss 0 set /a hours = %hours% - 1 & set /a mins = 60%mins%
if %hours% lss 0 set /a hours = 24%hours%
if 1%ms% lss 100 set ms=0%ms%
:: Mission accomplished
set /a totalsecs = %hours%*3600 + %mins%*60 + %secs%
echo Elapsed Time: %hours%:%mins%:%secs%.%ms% (%totalsecs%.%ms%s total)

31
vendor/bin/vscode_init.cmd vendored Normal file
View File

@ -0,0 +1,31 @@
@echo off
rem Find root dir
if not defined CMDER_ROOT (
for /f "delims=" %%i in ("%~dp0\..\..") do (
set "cmder_root=%%~fi"
)
)
if defined cmder_user_bin (
set CMDER_VSCODE_INIT_ARGS=%cmder_user_bin%\vscode_init_args.cmd
) else (
set CMDER_VSCODE_INIT_ARGS=%CMDER_ROOT%\bin\vscode_init_args.cmd
)
if not exist "%CMDER_VSCODE_INIT_ARGS%" (
echo Creating initial "%CMDER_VSCODE_INIT_ARGS%"...
copy "%CMDER_ROOT%\vendor\bin\vscode_init_args.cmd.default" "%CMDER_VSCODE_INIT_ARGS%"
) else (
call "%CMDER_VSCODE_INIT_ARGS%"
)
IF [%1] == [] (
REM -- manually opened console (Ctrl + Shift + `) --
CALL "%~dp0..\init.bat"
) ELSE (
REM -- task --
CALL cmd %*
exit
)

58
vendor/bin/vscode_init_args.cmd.default vendored Normal file
View File

@ -0,0 +1,58 @@
@echo off
rem Below are the default Cmder session settings:
rem
rem See "%CMDER_ROOT%\README.md" for details on these settings.
rem
rem `Cmder.exe` Arguments:
rem ----------------------
rem
rem `/c [cmder_user_cfg_root]
rem set cmder_user_bin=[cmder_user_cfg_root]\bin
rem set cmder_user_config=[cmder_user_cfg_root]\config
rem
rem `init.bat` Arguments
rem --------------------
rem
rem `/d`
rem debug_output=0
rem
rem `/v`
rem verbose_output=0
rem
rem `/f`
rem fast_init=0
rem
rem `/nix_tools`
rem nix_tools=1
rem
rem `/t`
rem time_init=0
rem
rem `/max_depth`
rem max_depth=1
rem
rem `/user_aliases`
rem user_aliases=
rem
rem `/git_install_root`
rem GIT_INSTALL_ROOT=
rem
rem `/home`
rem HOME=
rem
rem `/svn_ssh`
rem SVN_SSH=
echo Applying Cmder VSCode settings from '%~0'...
if defined CMDER_CONFIGURED (
rem Set Cmder settings here for when VSCode is launched inside Cmder.
set verbose_output=1
) else (
rem Set Cmder settings here for when VSCode is launched from outside Cmder.
set verbose_output=1
)
rem Set all required Cmder VSCode terminal environment settings above this line.
echo Applying Cmder VSCode settings is complete!

454
vendor/clink.lua vendored
View File

@ -3,7 +3,12 @@
-- !!! THIS FILE IS OVERWRITTEN WHEN CMDER IS UPDATED
-- !!! Use "%CMDER_ROOT%\config\<whatever>.lua" to add your lua startup scripts
-- luacheck: globals clink
-- luacheck: globals CMDER_SESSION
-- luacheck: globals uah_color cwd_color lamb_color clean_color dirty_color conflict_color unknown_color
-- luacheck: globals prompt_homeSymbol prompt_lambSymbol prompt_type prompt_useHomeSymbol prompt_useUserAtHost
-- luacheck: globals prompt_singleLine prompt_includeVersionControl
-- luacheck: globals prompt_overrideGitStatusOptIn prompt_overrideSvnStatusOptIn
-- luacheck: globals clink io.popenyield os.isdir settings.get
-- At first, load the original clink.lua file
-- this is needed as we set the script path to this dir and therefore the original
@ -13,6 +18,82 @@ dofile(clink_lua_file)
-- now add our own things...
local function get_uah_color()
return uah_color or "\x1b[1;33;49m" -- Green = uah = [user]@[hostname]
end
local function get_cwd_color()
return cwd_color or "\x1b[1;32;49m" -- Yellow cwd = Current Working Directory
end
local function get_lamb_color()
return lamb_color or "\x1b[1;30;49m" -- Light Grey = Lambda Color
end
local function get_clean_color()
return clean_color or "\x1b[37;1m" -- White, Bold
end
local function get_dirty_color()
return dirty_color or "\x1b[33;3m" -- Yellow, Italic
end
local function get_conflict_color()
return conflict_color or "\x1b[31;1m" -- Red, Bold
end
local function get_unknown_color()
return unknown_color or "\x1b[37;1m" -- White, Bold
end
---
-- Makes a string safe to use as the replacement in string.gsub
---
local function verbatim(s)
s = string.gsub(s, "%%", "%%%%")
return s
end
-- Extracts only the folder name from the input Path
-- Ex: Input C:\Windows\System32 returns System32
---
local function get_folder_name(path)
local reversePath = string.reverse(path)
local slashIndex = string.find(reversePath, "\\")
return string.sub(path, string.len(path) - slashIndex + 2)
end
---
-- Forward/backward compatibility for Clink asynchronous prompt filtering.
-- With Clink v1.2.10 and higher this lets git status run in the background and
-- refresh the prompt when it finishes, to eliminate waits in large git repos.
---
local io_popenyield
local clink_promptcoroutine
local cached_info = {}
if clink.promptcoroutine and io.popenyield then
io_popenyield = io.popenyield
clink_promptcoroutine = clink.promptcoroutine
else
io_popenyield = io.popen
clink_promptcoroutine = function (func)
return func(false)
end
end
---
-- Global variable so other Lua scripts can detect whether they're in a Cmder
-- shell session.
---
CMDER_SESSION = true
---
-- Setting the prompt in clink means that commands which rewrite the prompt do
-- not destroy our own prompt. It also means that started cmds (or batch files
@ -36,16 +117,73 @@ local function set_prompt_filter()
-- also check for square brackets
if env == nil then env = old_prompt:match('.*%[([^%]]+)%].+:') end
-- build our own prompt
-- orig: $E[1;32;40m$P$S{git}{hg}$S$_$E[1;30;40m{lamb}$S$E[0m
-- color codes: "\x1b[1;37;40m"
local cmder_prompt = "\x1b[1;32;40m{cwd} {git}{hg}{svn} \n\x1b[1;39;40m{lamb} \x1b[0m"
local lambda = "λ"
cmder_prompt = string.gsub(cmder_prompt, "{cwd}", cwd)
if env ~= nil then
lambda = "("..env..") "..lambda
-- Much of the below was 'borrowed' from https://github.com/AmrEldib/cmder-powerline-prompt
-- Symbol displayed for the home dir in the prompt.
if not prompt_homeSymbol then
prompt_homeSymbol = "~"
end
clink.prompt.value = string.gsub(cmder_prompt, "{lamb}", lambda)
-- Symbol displayed in the new line below the prompt.
if not prompt_lambSymbol then
prompt_lambSymbol = "λ"
end
if not prompt_type then
prompt_type = "full"
end
if prompt_useHomeSymbol == nil then
prompt_useHomeSymbol = false
end
if prompt_useUserAtHost == nil then
prompt_useUserAtHost = false
end
if prompt_singleLine == nil then
prompt_singleLine = false
end
if prompt_includeVersionControl == nil then
prompt_includeVersionControl = true
end
if prompt_type == 'folder' then
cwd = get_folder_name(cwd)
end
if prompt_useHomeSymbol and string.find(cwd, clink.get_env("HOME")) then
cwd = string.gsub(cwd, clink.get_env("HOME"), prompt_homeSymbol)
end
local uah = ''
if prompt_useUserAtHost then
uah = clink.get_env("USERNAME") .. "@" .. clink.get_env("COMPUTERNAME") .. ' '
end
local cr = "\n"
if prompt_singleLine then
cr = ' '
end
cr = "\x1b[0m" .. cr
if env ~= nil then env = "("..env..") " else env = "" end
if uah ~= '' then uah = get_uah_color() .. uah end
if cwd ~= '' then cwd = get_cwd_color() .. cwd end
local version_control = prompt_includeVersionControl and "{git}{hg}{svn}" or ""
local prompt = "{uah}{cwd}" .. version_control .. cr .. get_lamb_color() .. "{env}{lamb}\x1b[0m "
prompt = string.gsub(prompt, "{uah}", uah)
prompt = string.gsub(prompt, "{cwd}", cwd)
prompt = string.gsub(prompt, "{env}", env)
clink.prompt.value = string.gsub(prompt, "{lamb}", prompt_lambSymbol)
end
local function percent_prompt_filter()
clink.prompt.value = string.gsub(clink.prompt.value, "{percent}", "%%")
end
---
@ -58,7 +196,7 @@ end
local function get_dir_contains(path, dirname)
-- return parent path for specified entry (either file or directory)
local function pathname(path)
local function pathname(path) -- luacheck: ignore 432
local prefix = ""
local i = path:find("[\\/:][^\\/:]*$")
if i then
@ -68,14 +206,14 @@ local function get_dir_contains(path, dirname)
end
-- Navigates up one level
local function up_one_level(path)
local function up_one_level(path) -- luacheck: ignore 432
if path == nil then path = '.' end
if path == '.' then path = clink.get_cwd() end
return pathname(path)
end
-- Checks if provided directory contains git directory
local function has_specified_dir(path, specified_dir)
local function has_specified_dir(path, specified_dir) -- luacheck: ignore 432
if path == nil then path = '.' end
local found_dirs = clink.find_dirs(path..'/'..specified_dir)
if #found_dirs > 0 then return true end
@ -103,7 +241,7 @@ end
local function get_git_dir(path)
-- return parent path for specified entry (either file or directory)
local function pathname(path)
local function pathname(path) -- luacheck: ignore 432
local prefix = ""
local i = path:find("[\\/:][^\\/:]*$")
if i then
@ -122,9 +260,16 @@ local function get_git_dir(path)
local gitfile = io.open(dir..'/.git')
if not gitfile then return false end
local git_dir = gitfile:read():match('gitdir: (.*)')
local line = gitfile:read() or ''
local git_dir = line:match('gitdir: (.*)')
gitfile:close()
if os.isdir then -- only available in Clink v1.0.0 and higher
if git_dir and os.isdir(git_dir) then
return git_dir
end
end
return git_dir and dir..'/'..git_dir
end
@ -164,6 +309,9 @@ local function get_git_branch(git_dir)
local HEAD = head_file:read()
head_file:close()
-- If HEAD is missing, something is wrong.
if not HEAD then return end
-- if HEAD matches branch expression, then we're on named branch
-- otherwise it is a detached commit
local branch_name = HEAD:match('ref: refs/heads/(.+)')
@ -172,16 +320,29 @@ local function get_git_branch(git_dir)
end
---
-- Find out current branch
-- @return {false|mercurial branch name}
-- Find out current branch information
-- @return {false|mercurial branch information}
---
local function get_hg_branch()
for line in io.popen("hg branch 2>nul"):lines() do
-- Return the branch information. The default is to get just the
-- branch name, but you could e.g. use the "hg-prompt" extension to
-- get more information, such as any applied mq patches. Here's an
-- example of that:
-- local cmd = "hg prompt \"{branch}{status}{|{patch}}{update}\""
local cmd = "hg branch 2>nul"
local file = io.popen(cmd)
if not file then
return false
end
for line in file:lines() do
local m = line:match("(.+)$")
if m then
file:close()
return m
end
end
file:close()
return false
end
@ -190,84 +351,188 @@ end
-- Find out current branch
-- @return {false|svn branch name}
---
local function get_svn_branch(svn_dir)
for line in io.popen("svn info 2>nul"):lines() do
local function get_svn_branch()
local file = io_popenyield("svn info 2>nul")
if not file then
return false
end
for line in file:lines() do
local m = line:match("^Relative URL:")
if m then
file:close()
return line:sub(line:find("/")+1,line:len())
end
end
file:close()
return false
end
---
-- Get the status of working dir
-- @return {bool}
-- Get the status and conflict status of working dir
-- @return {bool <status>, bool <is_conflict>}
---
local function get_git_status()
local file = io.popen("git --no-optional-locks status --porcelain 2>nul")
local file = io_popenyield("git --no-optional-locks status --porcelain 2>nul")
if not file then
return {}
end
local conflict_found = false
local is_status = true
for line in file:lines() do
file:close()
return false
local code = line:sub(1, 2)
-- print (string.format("code: %s, line: %s", code, line))
if code == "DD" or code == "AU" or code == "UD" or code == "UA" or code == "DU" or code == "AA" or code == "UU" then -- luacheck: no max line length
is_status = false
conflict_found = true
break
-- unversioned files are ignored, comment out 'code ~= "!!"' to unignore them
elseif code ~= "!!" and code ~= "??" then
is_status = false
end
end
file:close()
return true
return { status = is_status, conflict = conflict_found }
end
---
-- Get the status of working dir
-- @return {bool}
---
local function get_hg_status()
local file = io.popen("hg status -0")
for line in file:lines() do
local function get_svn_status()
local file = io_popenyield("svn status -q")
if not file then
return { error = true }
end
for line in file:lines() do -- luacheck: ignore 512, no unused
file:close()
return false
return { clean = false }
end
file:close()
return true
return { clean = true }
end
---
-- Get the status of working dir
-- @return {bool}
---
function get_svn_status()
local file = io.popen("svn status -q")
for line in file:lines() do
file:close()
local last_git_status_time = nil
local last_git_status_setting = true
local function get_git_status_setting()
local time = os.clock()
local last_time = last_git_status_time
last_git_status_time = time
if last_time and time >= 0 and time - last_time < 10 then
return last_git_status_setting
end
-- When async prompt filtering is available, check the
-- prompt_overrideGitStatusOptIn config setting for whether to ignore the
-- cmder.status and cmder.cmdstatus git config opt-in settings.
if clink.promptcoroutine and io.popenyield and settings.get("prompt.async") then
if prompt_overrideGitStatusOptIn then
last_git_status_setting = true
return true
end
end
local gitStatusConfig = io_popenyield("git --no-pager config cmder.status 2>nul")
if gitStatusConfig then
for line in gitStatusConfig:lines() do
if string.match(line, 'false') then
gitStatusConfig:close()
last_git_status_setting = false
return false
end
file:close()
end
gitStatusConfig:close()
end
local gitCmdStatusConfig = io_popenyield("git --no-pager config cmder.cmdstatus 2>nul")
if gitCmdStatusConfig then
for line in gitCmdStatusConfig:lines() do
if string.match(line, 'false') then
gitCmdStatusConfig:close()
last_git_status_setting = false
return false
end
end
gitCmdStatusConfig:close()
end
last_git_status_setting = true
return true
end
---
-- Use a prompt coroutine to get git status in the background.
-- Cache the info so we can reuse it next time to reduce flicker.
---
local function get_git_info_table()
local info = clink_promptcoroutine(function ()
-- Use git status if allowed.
local cmderGitStatusOptIn = get_git_status_setting()
return cmderGitStatusOptIn and get_git_status() or {}
end)
if not info then
info = cached_info.git_info or {}
else
cached_info.git_info = info
end
return info
end
local function git_prompt_filter()
-- Don't do any git processing if the prompt doesn't want to show git info.
if not clink.prompt.value:find("{git}") then
return false
end
-- Colors for git status
local colors = {
clean = "\x1b[1;37;40m",
dirty = "\x1b[31;1m",
clean = get_clean_color(),
dirty = get_dirty_color(),
conflict = get_conflict_color(),
nostatus = get_unknown_color()
}
local git_dir = get_git_dir()
if git_dir then
-- if we're inside of git repo then try to detect current branch
local branch = get_git_branch(git_dir)
local color
if git_dir then
local branch = get_git_branch(git_dir)
if branch then
-- If in a different repo or branch than last time, discard cached info.
if cached_info.git_dir ~= git_dir or cached_info.git_branch ~= branch then
cached_info.git_info = nil
cached_info.git_dir = git_dir
cached_info.git_branch = branch
end
-- If we're inside of git repo then try to detect current branch
-- Has branch => therefore it is a git folder, now figure out status
if get_git_status() then
local gitInfo = get_git_info_table()
local gitStatus = gitInfo.status
local gitConflict = gitInfo.conflict
if gitStatus == nil then
color = colors.nostatus
elseif gitStatus then
color = colors.clean
else
color = colors.dirty
end
clink.prompt.value = string.gsub(clink.prompt.value, "{git}", color.."("..branch..")")
if gitConflict then
color = colors.conflict
end
clink.prompt.value = string.gsub(clink.prompt.value, "{git}", " "..color.."("..verbatim(branch)..")")
return false
end
end
@ -279,58 +544,104 @@ end
local function hg_prompt_filter()
-- Don't do any hg processing if the prompt doesn't want to show hg info.
if not clink.prompt.value:find("{hg}") then
return false
end
local hg_dir = get_hg_dir()
if hg_dir then
-- Colors for mercurial status
local colors = {
clean = "\x1b[1;37;40m",
dirty = "\x1b[31;1m",
clean = get_clean_color(),
dirty = get_dirty_color(),
nostatus = get_unknown_color()
}
local output = get_hg_branch()
if get_hg_dir() then
-- if we're inside of mercurial repo then try to detect current branch
local branch = get_hg_branch()
local color
if branch then
-- Has branch => therefore it is a mercurial folder, now figure out status
if get_hg_status() then
color = colors.clean
else
color = colors.dirty
-- strip the trailing newline from the branch name
local n = #output
while n > 0 and output:find("^%s", n) do n = n - 1 end
local branch = output:sub(1, n)
if branch ~= nil and
string.sub(branch,1,7) ~= "abort: " and -- not an HG working copy
(not string.find(branch, "is not recognized")) then -- 'hg' not in path
local color = colors.clean
local pipe = io.popen("hg status -amrd 2>&1")
if pipe then
output = pipe:read('*all')
pipe:close()
if output ~= nil and output ~= "" then color = colors.dirty end
end
clink.prompt.value = string.gsub(clink.prompt.value, "{hg}", color.."("..branch..")")
local result = color .. "(" .. branch .. ")"
clink.prompt.value = string.gsub(clink.prompt.value, "{hg}", " "..verbatim(result))
return false
end
end
-- No mercurial present or not in mercurial file
-- No hg present or not in hg repo
clink.prompt.value = string.gsub(clink.prompt.value, "{hg}", "")
return false
end
local function svn_prompt_filter()
-- Don't do any svn processing if the prompt doesn't want to show svn info.
if not clink.prompt.value:find("{svn}") then
return false
end
-- Colors for svn status
local colors = {
clean = "\x1b[1;37;40m",
dirty = "\x1b[31;1m",
clean = get_clean_color(),
dirty = get_dirty_color(),
nostatus = get_unknown_color()
}
if get_svn_dir() then
local svn_dir = get_svn_dir()
if svn_dir then
-- if we're inside of svn repo then try to detect current branch
local branch = get_svn_branch()
local color
if branch then
if get_svn_status() then
-- If in a different repo or branch than last time, discard cached info
if cached_info.svn_dir ~= svn_dir or cached_info.svn_branch ~= branch then
cached_info.svn_info = nil
cached_info.svn_dir = svn_dir
cached_info.svn_branch = branch
end
-- Get the svn status using coroutine if available and option is enabled. Otherwise use a blocking call
local svnStatus
if clink.promptcoroutine and io.popenyield and settings.get("prompt.async") and prompt_overrideSvnStatusOptIn then -- luacheck: no max line length
svnStatus = clink_promptcoroutine(function ()
return get_svn_status()
end)
-- If the status result is pending, use the cached version instead, otherwise store it to the cache
if svnStatus == nil then
svnStatus = cached_info.svn_info
else
cached_info.svn_info = svnStatus
end
else
svnStatus = get_svn_status()
end
local color
if not svnStatus or svnStatus.error then
color = colors.nostatus
elseif svnStatus.clean then
color = colors.clean
else
color = colors.dirty
end
clink.prompt.value = string.gsub(clink.prompt.value, "{svn}", color.."("..branch..")")
clink.prompt.value = string.gsub(clink.prompt.value, "{svn}", " "..color.."("..verbatim(branch)..")")
return false
end
end
-- No mercurial present or not in mercurial file
-- No svn present or not in svn file
clink.prompt.value = string.gsub(clink.prompt.value, "{svn}", "")
return false
end
@ -340,8 +651,11 @@ clink.prompt.register_filter(set_prompt_filter, 1)
clink.prompt.register_filter(hg_prompt_filter, 50)
clink.prompt.register_filter(git_prompt_filter, 50)
clink.prompt.register_filter(svn_prompt_filter, 50)
clink.prompt.register_filter(percent_prompt_filter, 51)
local completions_dir = clink.get_env('CMDER_ROOT')..'/vendor/clink-completions/'
-- Execute '.init.lua' first to ensure package.path is set properly
dofile(completions_dir..'.init.lua')
for _,lua_module in ipairs(clink.find_files(completions_dir..'*.lua')) do
-- Skip files that starts with _. This could be useful if some files should be ignored
if not string.match(lua_module, '^_.*') then
@ -351,3 +665,13 @@ for _,lua_module in ipairs(clink.find_files(completions_dir..'*.lua')) do
dofile(filename)
end
end
if clink.get_env('CMDER_USER_CONFIG') then
local cmder_config_dir = clink.get_env('CMDER_ROOT')..'/config/'
for _,lua_module in ipairs(clink.find_files(cmder_config_dir..'*.lua')) do
local filename = cmder_config_dir..lua_module
-- use dofile instead of require because require caches loaded modules
-- so config reloading using Alt-Q won't reload updated modules.
dofile(filename)
end
end

28
vendor/clink_settings.default vendored Normal file
View File

@ -0,0 +1,28 @@
# For explanation of these and other settings see:
# https://chrisant996.github.io/clink/clink.html
# name: Sets how command history expansion is applied
# type: enum
# options: off,on,not_squoted,not_dquoted,not_quoted
history.expand_mode = not_dquoted
# name: Skip adding lines prefixed with whitespace
# type: boolean
history.ignore_space = True
# name: The number of history lines to save
# type: integer
history.max_lines = 25000
# name: Share history between instances
# type: boolean
history.shared = False
# name: Auto-answer terminate prompt
# type: enum
# options: off,answer_yes,answer_no
cmd.auto_answer = answer_yes
# name: Doskey completions
# type: color
color.doskey = yellow

50
vendor/cmder.sh vendored
View File

@ -1,6 +1,6 @@
# DO NOT EDIT THIS FILE IT WILL BE OVERWRITTEN ON UPDATE
#
# Add portable user customizations ${CMDER_ROOT}/config/user-profile.sh,
# Add portable user customizations ${CMDER_ROOT}/config/user_profile.sh,
# these customizations will follow Cmder if $CMDER_ROOT is copied
# to another machine.
#
@ -14,7 +14,7 @@ function runProfiled {
if [ ! "x${profile_d_scripts}" = "x" ] ; then
for x in ${profile_d_scripts} ; do
echo Sourcing "${1}/${x}"...
# echo Sourcing "${1}/${x}"...
. "${1}/${x}"
done
fi
@ -33,19 +33,19 @@ CMDER_ROOT=$(echo $CMDER_ROOT | sed 's:/*$::')
export CMDER_ROOT
if [ -d "/c/Program Files/Git" ] ; then
if [ -f "/c/Program Files/Git/cmd/git.exe" ] ; then
GIT_INSTALL_ROOT="/c/Program Files/Git"
elif [ -d "/c/Program Files(x86)/Git" ] ; then
elif [ -f "/c/Program Files(x86)/Git/cmd/git.exe" ] ; then
GIT_INSTALL_ROOT="/c/Program Files(x86)/Git"
elif [ -d "${CMDER_ROOT}/vendor/git-for-windows" ] ; then
elif [ -f "${CMDER_ROOT}/vendor/git-for-windows/cmd/git.exe" ] ; then
GIT_INSTALL_ROOT=${CMDER_ROOT}/vendor/git-for-windows
fi
if [[ ! "$PATH" =~ "${GIT_INSTALL_ROOT}/bin:" ]] ; then
PATH=${GIT_INSTALL_ROOT}/bin:$PATH
PATH="${GIT_INSTALL_ROOT}/bin:$PATH"
fi
PATH=${CMDER_ROOT}/bin:$PATH:${CMDER_ROOT}
PATH="${CMDER_ROOT}/bin:${CMDER_ROOT}/vendor/bin:$PATH:${CMDER_ROOT}"
export PATH
@ -63,26 +63,34 @@ if [ -d "${CMDER_USER_CONFIG}/profile.d" ] ; then
runProfiled "${CMDER_USER_CONFIG}/profile.d"
fi
if [ -f "${CMDER_ROOT}/config/user-profile.sh" ] ; then
. "${CMDER_ROOT}/config/user-profile.sh"
# Renaming to "config\user_profile.sh" to "user_profile.sh" for consistency.
if [ -f "$CMDER_ROOT/config/user-profile.sh" ] ; then
mv "$CMDER_ROOT/config/user-profile.sh" "$CMDER_ROOT/config/user_profile.sh"
fi
CmderUserProfilePath="${CMDER_ROOT}/config/user_profile.sh"
if [ -f "${CMDER_ROOT}/config/user_profile.sh" ] ; then
. "${CMDER_ROOT}/config/user_profile.sh"
fi
if [ -f "${CMDER_USER_CONFIG}/user-profile.sh" ] ; then
. "${CMDER_USER_CONFIG}/user-profile.sh"
else
if [ "${CMDER_USER_CONFIG}" != "" ] ; then
initialProfile="${CMDER_USER_CONFIG}/user-profile.sh"
else
initialProfile="${CMDER_ROOT}/config/user-profile.sh"
# Renaming to "config\user_profile.sh" to "user_profile.sh" for consistency.
if [ -f "$CMDER_USER_CONFIG/user-profile.sh" ] ; then
mv "$CMDER_USER_CONFIG/user-profile.sh" "$CMDER_USER_CONFIG/user_profile.sh"
fi
echo Creating user startup file: "${initialProfile}"
cat <<-eof >"${initialProfile}"
# use this file to run your own startup commands for msys2 bash'
export PATH="${CMDER_USER_CONFIG}/bin:$PATH"
# To add a new vendor to the path, do something like:
# export PATH=\${CMDER_ROOT}/vendor/whatever:\${PATH}
eof
CmderUserProfilePath="${CMDER_USER_CONFIG}/user_profile.sh"
if [ -f "${CMDER_USER_CONFIG}/user_profile.sh" ] ; then
. "${CMDER_USER_CONFIG}/user_profile.sh"
fi
fi
if [ ! -f "${CmderUserProfilePath}" ] ; then
echo Creating user startup file: "${CmderUserProfilePath}"
cp "${CMDER_ROOT}/vendor/user_profile.sh.default" "${CmderUserProfilePath}"
fi
# Source the users .bashrc file if it exists

39
vendor/cmder_exinit vendored
View File

@ -10,7 +10,7 @@
# zsh - Copy to /etc/profile.d/cmder_exinit.zsh
# Add portable user customizations ${CMDER_ROOT}/config/user-profile.sh or
# add whole config scripts to ${CMDER_ROOT}/config/profile.d both will be sourced
# from mthis file and be appied to the environment at startup.
# from this file and be applied to the environment at startup.
#
# These customizations will follow Cmder if $CMDER_ROOT is copied
# to another machine.
@ -63,7 +63,7 @@ if [ ! "$CMDER_ROOT" = "" ] ; then
export CMDER_ROOT
PATH=${CMDER_ROOT}/bin:$PATH:${CMDER_ROOT}
PATH=${CMDER_ROOT}/bin:${CMDER_ROOT}/vendor/bin:$PATH:${CMDER_ROOT}
export PATH
@ -82,25 +82,32 @@ if [ ! "$CMDER_ROOT" = "" ] ; then
fi
if [ -f "${CMDER_ROOT}/config/user-profile.sh" ] ; then
. "${CMDER_ROOT}/config/user-profile.sh"
# Renaming to "config\user_profile.sh" to "user_profile.sh" for consistency.
if [ -f "$CMDER_ROOT/config/user-profile.sh" ] ; then
mv "$CMDER_ROOT/config/user-profile.sh" "$CMDER_ROOT/config/user_profile.sh"
fi
CmderUserProfilePath="${CMDER_ROOT}/config/user_profile.sh"
if [ -f "${CMDER_ROOT}/config/user_profile.sh" ] ; then
. "${CMDER_ROOT}/config/user_profile.sh"
fi
if [ -f "${CMDER_USER_CONFIG}/user-profile.sh" ] ; then
. "${CMDER_USER_CONFIG}/user-profile.sh"
else
if [ "${CMDER_USER_CONFIG}" != "" ] ; then
initialProfile="${CMDER_USER_CONFIG}/user-profile.sh"
else
initialProfile="${CMDER_ROOT}/config/user-profile.sh"
# Renaming to "config\user_profile.sh" to "user_profile.sh" for consistency.
if [ -f "$CMDER_USER_CONFIG/user-profile.sh" ] ; then
mv "$CMDER_USER_CONFIG/user-profile.sh" "$CMDER_USER_CONFIG/user_profile.sh"
fi
echo Creating user startup file: "${initialProfile}"
cat <<-eof >"${initialProfile}"
# use this file to run your own startup commands for msys2 bash'
export PATH=${CMDER_USER_CONFIG}/bin:$PATH
# To add a new vendor to the path, do something like:
# export PATH=\${CMDER_ROOT}/vendor/whatever:\${PATH}
eof
CmderUserProfilePath="${CMDER_USER_CONFIG}/user_profile.sh"
if [ -f "${CMDER_USER_CONFIG}/user_profile.sh" ] ; then
. "${CMDER_USER_CONFIG}/user_profile.sh"
fi
fi
if [ ! -f "${CmderUserProfilePath}" ] ; then
echo Creating user startup file: "${CmderUserProfilePath}"
cp "${CMDER_ROOT}/vendor/user_profile.sh.default" "${CmderUserProfilePath}"
fi
fi

62
vendor/cmder_prompt_config.lua.default vendored Normal file
View File

@ -0,0 +1,62 @@
-- All of the below was 'borrowed' from https://github.com/AmrEldib/cmder-powerline-prompt
--- REQUIRED. config_prompt_type is whether the displayed prompt is the full path or only the folder name
-- Use:
-- "full" for full path like C:\Windows\System32
-- "folder" for folder name only like System32
-- default is full
prompt_type = "full"
--- REQUIRED. config_prompt_useHomeSymbol is whether to show ~ instead of the full path to the user's home folder
-- Use true or false
-- default is false
prompt_useHomeSymbol = false
-- Symbols
-- REQUIRED. Prompt displayed instead of user's home folder e.g. C:\Users\username
-- default is '~'
prompt_homeSymbol = "~"
-- REQUIRED. Symbol displayed in the new line below the prompt.
-- default is 'λ'
prompt_lambSymbol = "λ"
-- REQUIRED. Adds [user]@[host] to the beginning of the prompt like bash
-- default is false
prompt_useUserAtHost = false
-- REQUIRED. If true prompt is a single line instead of default two line prompt.
-- default is false
prompt_singleLine = false
-- OPTIONAL. If true then Cmder includes git, mercurial, and subversion status in the prompt.
-- default is true
prompt_includeVersionControl = true
-- OPTIONAL. If true then always ignore the cmder.status and cmder.cmdstatus git config settings and run the git prompt commands in the background.
-- default is false
-- NOTE: This only takes effect if using Clink v1.2.10 or higher.
prompt_overrideGitStatusOptIn = false
-- OPTIONAL. If true then always ignore the cmder.status and cmder.cmdstatus svn config settings and run the svn prompt commands in the background.
-- default is false
-- NOTE: This only takes effect if using Clink v1.2.10 or higher.
prompt_overrideSvnStatusOptIn = false
-- Prompt Attributes
--
-- Colors: https://github.com/cmderdev/cmder/wiki/Customization#list-of-colors
-- Effects: https://github.com/cmderdev/cmder/wiki/Customization#list-of-effects
--
-- Green: "\x1b[1;33;49m"
-- Yellow: "\x1b[1;32;49m"
-- Light Grey: "\x1b[1;30;49m"
-- Prompt Element Colors
uah_color = "\x1b[1;33;49m" -- Green = uah = [user]@[hostname]
cwd_color = "\x1b[1;32;49m" -- Yellow cwd = Current Working Directory
lamb_color = "\x1b[1;30;49m" -- Light Grey = Lambda Color
clean_color = "\x1b[37;1m"
dirty_color = "\x1b[33;3m" -- Yellow, Italic
conflict_color = "\x1b[31;1m" -- Red, Bold
unknown_color = "\x1b[37;1m" -- White = No VCS Status Branch Color

35
vendor/git-prompt.sh vendored
View File

@ -1,3 +1,29 @@
function getGitStatusSetting() {
gitStatusSetting=$(git --no-pager config -l 2>/dev/null)
if [[ -n ${gitStatusSetting} ]] && [[ ${gitStatusSetting} =~ cmder.status=false ]] || [[ ${gitStatusSetting} =~ cmder.shstatus=false ]]
then
echo false
else
echo true
fi
}
function getSimpleGitBranch() {
gitDir=$(git rev-parse --git-dir 2>/dev/null)
if [ -z "$gitDir" ]; then
return 0
fi
headContent=$(< "$gitDir/HEAD")
if [[ "$headContent" == "ref: refs/heads/"* ]]
then
echo " (${headContent:16})"
else
echo " (HEAD detached at ${headContent:0:7})"
fi
}
if test -f /etc/profile.d/git-sdk.sh
then
TITLEPREFIX=SDK-${MSYSTEM#MINGW}
@ -6,8 +32,11 @@ else
fi
if test -f ~/.config/git/git-prompt.sh
then
if [[ $(getGitStatusSetting) == true ]]
then
. ~/.config/git/git-prompt.sh
fi
else
PS1='\[\033]0;$MSYSTEM:${PWD//[^[:ascii:]]/?}\007\]' # set window title
# PS1="$PS1"'\n' # new line
@ -26,9 +55,15 @@ else
if test -f "$COMPLETION_PATH/git-prompt.sh"
then
. "$COMPLETION_PATH/git-completion.bash"
if [[ $(getGitStatusSetting) == true ]]
then
. "$COMPLETION_PATH/git-prompt.sh"
PS1="$PS1"'\[\033[36m\]' # change color to cyan
PS1="$PS1"'`__git_ps1`' # bash function
else
PS1="$PS1"'\[\033[37;1m\]' # change color to white
PS1="$PS1"'`getSimpleGitBranch`'
fi
fi
fi
PS1="$PS1"'\[\033[0m\]' # change color

742
vendor/init.bat vendored
View File

@ -1,15 +1,32 @@
@echo off
:: Init Script for cmd.exe
set CMDER_INIT_START=%time%
:: Init Script for cmd.exe shell
:: Created as part of cmder project
:: !!! THIS FILE IS OVERWRITTEN WHEN CMDER IS UPDATED
:: !!! Use "%CMDER_ROOT%\config\user-profile.cmd" to add your own startup commands
:: !!! Use "%CMDER_ROOT%\config\user_profile.cmd" to add your own startup commands
:: Use /v command line arg or set to > 0 for verbose output to aid in debugging.
set verbose-output=0
set debug-output=0
set max_depth=1
if not defined verbose_output set verbose_output=0
:: Use /d command line arg or set to 1 for debug output to aid in debugging.
if not defined debug_output set debug_output=0
:: Use /t command line arg or set to 1 to display init time.
if not defined time_init set time_init=0
:: Use /f command line arg to speed up init at the expense of some functionality.
if not defined fast_init set fast_init=0
:: Use /max_depth 1-5 to set max recurse depth for calls to `enhance_path_recursive`
if not defined max_depth set max_depth=1
:: Add *nix tools to end of path. 0 turns off *nix tools, 2 adds *nix tools to the front of the path.
if not defined nix_tools set nix_tools=1
set "CMDER_USER_FLAGS= "
:: Find root dir
if not defined CMDER_ROOT (
@ -27,22 +44,34 @@ if not defined CMDER_ROOT (
:: Remove trailing '\' from %CMDER_ROOT%
if "%CMDER_ROOT:~-1%" == "\" SET "CMDER_ROOT=%CMDER_ROOT:~0,-1%"
:: Include Cmder libraries
call "%cmder_root%\vendor\bin\cexec.cmd" /setpath
call "%cmder_root%\vendor\lib\lib_console"
call "%cmder_root%\vendor\lib\lib_base"
call "%cmder_root%\vendor\lib\lib_path"
call "%cmder_root%\vendor\lib\lib_git"
call "%cmder_root%\vendor\lib\lib_profile"
:var_loop
if "%~1" == "" (
goto :start
) else if "%1"=="/v" (
set verbose-output=1
) else if "%1"=="/d" (
set debug-output=1
) else if "%1" == "/max_depth" (
) else if /i "%1" == "/f" (
set fast_init=1
) else if /i "%1" == "/t" (
set time_init=1
) else if /i "%1" == "/v" (
set verbose_output=1
) else if /i "%1" == "/d" (
set debug_output=1
) else if /i "%1" == "/max_depth" (
if "%~2" geq "1" if "%~2" leq "5" (
set "max_depth=%~2"
shift
) else (
call :show_error '/max_depth' requires a number between 1 and 5!
%print_error% "'/max_depth' requires a number between 1 and 5!"
exit /b
)
) else if "%1" == "/c" (
) else if /i "%1" == "/c" (
if exist "%~2" (
if not exist "%~2\bin" mkdir "%~2\bin"
set "cmder_user_bin=%~2\bin"
@ -50,497 +79,420 @@ if "%CMDER_ROOT:~-1%" == "\" SET "CMDER_ROOT=%CMDER_ROOT:~0,-1%"
set "cmder_user_config=%~2\config"
shift
)
) else if "%1" == "/user_aliases" (
) else if /i "%1" == "/user_aliases" (
if exist "%~2" (
set "user-aliases=%~2"
set "user_aliases=%~2"
shift
)
) else if "%1" == "/git_install_root" (
) else if /i "%1" == "/git_install_root" (
if exist "%~2" (
set "GIT_INSTALL_ROOT=%~2"
shift
) else (
call :show_error The Git install root folder "%2", you specified does not exist!
%print_error% "The Git install root folder "%~2" that you specified does not exist!"
exit /b
)
) else if "%1" == "/home" (
) else if /i "%1" == "/nix_tools" (
if "%2" equ "0" (
REM Do not add *nix tools to path
set nix_tools=0
shift
) else if "%2" equ "1" (
REM Add *nix tools to end of path
set nix_tools=1
shift
) else if "%2" equ "2" (
REM Add *nix tools to front of path
set nix_tools=2
shift
)
) else if /i "%1" == "/home" (
if exist "%~2" (
set "HOME=%~2"
shift
) else (
call :show_error The home folder "%2", you specified does not exist!
%print_error% The home folder "%2" that you specified does not exist!
exit /b
)
) else if "%1" == "/svn_ssh" (
) else if /i "%1" == "/svn_ssh" (
set SVN_SSH=%2
shift
) else (
set "CMDER_USER_FLAGS=%1 %CMDER_USER_FLAGS%"
)
shift
goto var_loop
goto :var_loop
:start
call :debug-output init.bat - Env Var - CMDER_ROOT=%CMDER_ROOT%
call :debug-output init.bat - Env Var - debug-output=%debug-output%
if defined CMDER_USER_CONFIG (
call :debug-output init.bat - CMDER IS ALSO USING INDIVIDUAL USER CONFIG FROM '%CMDER_USER_CONFIG%'!
:: Enable console related methods if verbose/debug is turned on
if %debug_output% gtr 0 (set print_debug=%lib_console% debug_output)
if %verbose_output% gtr 0 (
set print_verbose=%lib_console% verbose_output
set print_warning=%lib_console% show_warning
)
:: Pick right version of clink
:: Sets CMDER_SHELL, CMDER_CLINK, CMDER_ALIASES variables
%lib_base% cmder_shell
%print_debug% init.bat "Env Var - CMDER_ROOT=%CMDER_ROOT%"
%print_debug% init.bat "Env Var - debug_output=%debug_output%"
:: Set the Cmder directory paths
set CMDER_CONFIG_DIR=%CMDER_ROOT%\config
:: Check if we're using Cmder individual user profile
if defined CMDER_USER_CONFIG (
%print_debug% init.bat "CMDER IS ALSO USING INDIVIDUAL USER CONFIG FROM '%CMDER_USER_CONFIG%'!"
if not exist "%CMDER_USER_CONFIG%\..\opt" md "%CMDER_USER_CONFIG%\..\opt"
set CMDER_CONFIG_DIR=%CMDER_USER_CONFIG%
)
if not "%CMDER_SHELL%" == "cmd" (
%print_warning% "Incompatible 'ComSpec/Shell' Detected: %CMDER_SHELL%"
set CMDER_CLINK=0
set CMDER_ALIASES=0
)
:: Pick the right version of Clink
:: TODO: Support for ARM
if "%PROCESSOR_ARCHITECTURE%"=="x86" (
set architecture=86
set clink_architecture=x86
set architecture_bits=32
) else (
set architecture=64
) else if "%PROCESSOR_ARCHITECTURE%"=="AMD64" (
set clink_architecture=x64
set architecture_bits=64
)
:: Tell the user about the clink config files...
if defined "%CMDER_USER_CONFIG%\settings" if not exist "%CMDER_USER_CONFIG%\settings" (
echo Generating clink initial settings in "%CMDER_USER_CONFIG%\settings"
echo Additional *.lua files in "%CMDER_USER_CONFIG%" are loaded on startup.\
} else if not exist "%CMDER_ROOT%\config\settings" (
echo Generating clink initial settings in "%CMDER_ROOT%\config\settings"
echo Additional *.lua files in "%CMDER_ROOT%\config" are loaded on startup.
)
:: Run clink
if defined CMDER_USER_CONFIG (
"%CMDER_ROOT%\vendor\clink\clink_x%architecture%.exe" inject --quiet --profile "%CMDER_USER_CONFIG%" --scripts "%CMDER_ROOT%\vendor"
) else (
"%CMDER_ROOT%\vendor\clink\clink_x%architecture%.exe" inject --quiet --profile "%CMDER_ROOT%\config" --scripts "%CMDER_ROOT%\vendor"
%print_warning% "Incompatible Processor Detected: %PROCESSOR_ARCHITECTURE%"
set CMDER_CLINK=0
)
if "%CMDER_CLINK%" == "1" (
REM TODO: Detect if clink is already injected, if so goto :CLINK_FINISH
goto :INJECT_CLINK
)
goto :SKIP_CLINK
:INJECT_CLINK
%print_verbose% "Injecting Clink!"
:: Check if Clink is not present
if not exist "%CMDER_ROOT%\vendor\clink\clink_%clink_architecture%.exe" (
%print_error% "Clink executable is not present in 'vendor\clink\clink_%clink_architecture%.exe'"
goto :SKIP_CLINK
)
:: Run Clink
if not exist "%CMDER_CONFIG_DIR%\settings" if not exist "%CMDER_CONFIG_DIR%\clink_settings" (
echo Generating Clink initial settings in "%CMDER_CONFIG_DIR%\clink_settings"
copy "%CMDER_ROOT%\vendor\clink_settings.default" "%CMDER_CONFIG_DIR%\clink_settings"
echo Additional *.lua files in "%CMDER_CONFIG_DIR%" are loaded on startup.
)
if not exist "%CMDER_CONFIG_DIR%\cmder_prompt_config.lua" (
echo Creating Cmder prompt config file: "%CMDER_CONFIG_DIR%\cmder_prompt_config.lua"
copy "%CMDER_ROOT%\vendor\cmder_prompt_config.lua.default" "%CMDER_CONFIG_DIR%\cmder_prompt_config.lua"
)
:: Cleanup legacy Clink Settings file
if exist "%CMDER_CONFIG_DIR%\settings" if exist "%CMDER_CONFIG_DIR%\clink_settings" (
del "%CMDER_CONFIG_DIR%\settings"
)
:: Cleanup legacy Clink history file
if exist "%CMDER_CONFIG_DIR%\.history" if exist "%CMDER_CONFIG_DIR%\clink_history" (
del "%CMDER_CONFIG_DIR%\.history"
)
"%CMDER_ROOT%\vendor\clink\clink_%clink_architecture%.exe" inject --quiet --profile "%CMDER_CONFIG_DIR%" --scripts "%CMDER_ROOT%\vendor"
:: Check if a fatal error occurred when trying to inject Clink
if errorlevel 2 (
REM %print_error% "Clink injection has failed with error code: %errorlevel%"
goto :SKIP_CLINK
)
goto :CLINK_FINISH
:SKIP_CLINK
%print_warning% "Skipping Clink Injection!"
for /f "tokens=2 delims=:." %%x in ('chcp') do set cp=%%x
chcp 65001>nul
:: Revert back to plain cmd.exe prompt without clink
prompt $E[1;32;49m$P$S$_$E[1;30;49mλ$S$E[0m
chcp %cp%>nul
:CLINK_FINISH
if "%CMDER_CONFIGURED%" GTR "1" (
%print_verbose% "Cmder is already configured, skipping Cmder Init!"
goto :USER_ALIASES
) else if "%CMDER_CONFIGURED%" == "1" (
%print_verbose% "Cmder is already configured, skipping to Cmder User Init!"
goto :USER_CONFIG_START
)
:: Prepare for git-for-windows
:: I do not even know, copypasted from their .bat
set PLINK_PROTOCOL=ssh
if not defined TERM set TERM=cygwin
:: The idea:
:: * if the users points as to a specific git, use that
:: * test if a git is in path and if yes, use that
:: Detect which git.exe version to use
:: * if the user points to a specific git, use that
:: * test if git is in path and if yes, use that
:: * last, use our vendored git
:: also check that we have a recent enough version of git by examining the version string
if defined GIT_INSTALL_ROOT (
if exist "%GIT_INSTALL_ROOT%\cmd\git.exe" (goto :FOUND_GIT)
if exist "%GIT_INSTALL_ROOT%\cmd\git.exe" goto :SPECIFIED_GIT
set GIT_INSTALL_ROOT=
) else if "%fast_init%" == "1" (
if exist "%CMDER_ROOT%\vendor\git-for-windows\cmd\git.exe" (
%print_debug% init.bat "Skipping Git Auto-Detect!"
goto :VENDORED_GIT
)
:: get the version information for vendored git binary
setlocal enabledelayedexpansion
call :read_version VENDORED "%CMDER_ROOT%\vendor\git-for-windows\cmd"
:: check if git is in path...
%print_debug% init.bat "Fast init is enabled, vendored Git does not exist"
for /F "delims=" %%F in ('where git.exe 2^>nul') do (
:: get the absolute path to the user provided git binary
pushd %%~dpF
set "test_dir=!CD!"
popd
set "EXT_GIT_EXE=%%~fF"
%print_debug% init.bat "Found User installed Git at '%%~fF'. Skipping Git Auto-Detect!"
goto :SET_ENV
)
)
:: get the version information for the user provided git binary
call :read_version USER "!test_dir!"
%print_debug% init.bat "Looking for Git install root..."
if !errorlevel! geq 0 (
:: compare the user git version against the vendored version
call :compare_versions USER VENDORED
:: Get the version information for vendored git binary
%lib_git% read_version VENDORED "%CMDER_ROOT%\vendor\git-for-windows\cmd" 2>nul
%lib_git% validate_version VENDORED %GIT_VERSION_VENDORED%
:: use the user provided git if its version is greater than, or equal to the vendored git
if !errorlevel! geq 0 if exist "!test_dir:~0,-4!\cmd\git.exe" (
set "GIT_INSTALL_ROOT=!test_dir:~0,-4!"
set test_dir=
goto :FOUND_GIT
) else if !errorlevel! geq 0 (
set "GIT_INSTALL_ROOT=!test_dir!"
set test_dir=
:: Check if git is in path
for /F "delims=" %%F in ('where git.exe 2^>nul') do call :check_git "%%~fF"
if defined GIT_INSTALL_ROOT (
goto :FOUND_GIT
) else (
call :verbose-output Found old !GIT_VERSION_USER! in "!test_dir!", but not using...
set test_dir=
)
) else (
:: if the user provided git executable is not found
if !errorlevel! equ -255 (
call :verbose-output No git at "!git_executable!" found.
set test_dir=
goto :VENDORED_GIT
)
:check_git
set full_path="%~f1"
if not defined GIT_INSTALL_ROOT (
if not [\%full_path:\cmd\git.exe=:%]==[\%full_path%] (
:: Get the absolute path to the user provided git binary
%lib_git% is_git_shim "%~dp1"
%lib_git% get_user_git_version
%lib_git% compare_git_versions
)
)
exit /b
:: our last hope: our own git...
:: Our last hope: use vendored git
:VENDORED_GIT
if exist "%CMDER_ROOT%\vendor\git-for-windows" (
set "GIT_INSTALL_ROOT=%CMDER_ROOT%\vendor\git-for-windows"
call :enhance_path "!GIT_INSTALL_ROOT!\cmd"
%print_debug% init.bat "Using vendored Git '%GIT_VERSION_VENDORED%'..."
goto :CONFIGURE_GIT
) else (
goto :NO_GIT
)
:SPECIFIED_GIT
%print_debug% init.bat "Using /GIT_INSTALL_ROOT..."
goto :CONFIGURE_GIT
:FOUND_GIT
%print_debug% init.bat "Using found Git '%GIT_VERSION_USER%' from '%GIT_INSTALL_ROOT%..."
goto :CONFIGURE_GIT
:CONFIGURE_GIT
%print_debug% init.bat "Using Git from '%GIT_INSTALL_ROOT%..."
:: Add git to the path
if defined GIT_INSTALL_ROOT (
rem add the unix commands at the end to not shadow windows commands like more
if exist "!GIT_INSTALL_ROOT!\cmd\git.exe" call :enhance_path "!GIT_INSTALL_ROOT!\cmd" append
if exist "!GIT_INSTALL_ROOT!\mingw32" (
call :enhance_path "!GIT_INSTALL_ROOT!\mingw32" append
) else if exist "!GIT_INSTALL_ROOT!\mingw64" (
call :enhance_path "!GIT_INSTALL_ROOT!\mingw64" append
if exist "%GIT_INSTALL_ROOT%\cmd\git.exe" %lib_path% enhance_path "%GIT_INSTALL_ROOT%\cmd" ""
:: Add the unix commands at the end to not shadow windows commands like `more` and `find`
if %nix_tools% equ 1 (
%print_verbose% "Preferring Windows commands"
set "path_position=append"
) else (
%print_verbose% "Preferring *nix commands"
set "path_position="
)
if exist "!GIT_INSTALL_ROOT!\usr\bin" call :enhance_path "%GIT_INSTALL_ROOT%\usr\bin" append
:: define SVN_SSH so we can use git svn with ssh svn repositories
if %nix_tools% geq 1 (
if exist "%GIT_INSTALL_ROOT%\mingw32" (
%lib_path% enhance_path "%GIT_INSTALL_ROOT%\mingw32\bin" %path_position%
) else if exist "%GIT_INSTALL_ROOT%\mingw64" (
%lib_path% enhance_path "%GIT_INSTALL_ROOT%\mingw64\bin" %path_position%
)
if exist "%GIT_INSTALL_ROOT%\usr\bin" (
%lib_path% enhance_path "%GIT_INSTALL_ROOT%\usr\bin" %path_position%
)
)
:SET_ENV
:: Plink (PuTTY Link) is a command-line connection tool similar to ssh, setting its protocol to ssh
set PLINK_PROTOCOL=ssh
:: Define SVN_SSH so we can use git svn with ssh svn repositories
if not defined SVN_SSH set "SVN_SSH=%GIT_INSTALL_ROOT:\=\\%\\bin\\ssh.exe"
:: Find locale.exe: From the git install root, from the path, using the git installed env, or fallback using the env from the path.
setlocal enabledelayedexpansion
if not defined git_locale if defined EXT_GIT_EXE (
set "GIT_INSTALL_ROOT=!EXT_GIT_EXE:\cmd\git.exe=!"
)
endlocal && set GIT_INSTALL_ROOT=%GIT_INSTALL_ROOT%
if not defined git_locale if exist "%GIT_INSTALL_ROOT%\usr\bin\locale.exe" set git_locale="%GIT_INSTALL_ROOT%\usr\bin\locale.exe"
if not defined git_locale for /F "tokens=* delims=" %%F in ('where locale.exe 2^>nul') do ( if not defined git_locale set git_locale="%%F" )
if not defined git_locale if exist "%GIT_INSTALL_ROOT%\usr\bin\env.exe" set git_locale="%GIT_INSTALL_ROOT%\usr\bin\env.exe" /usr/bin/locale
if not defined git_locale for /F "tokens=* delims=" %%F in ('where env.exe 2^>nul') do ( if not defined git_locale set git_locale="%%F" /usr/bin/locale )
setlocal enabledelayedexpansion
if defined git_locale (
REM %print_debug% init.bat "Env Var - git_locale=!git_locale!"
if not defined LANG (
for /F "delims=" %%F in ('!git_locale! -uU 2') do (
set "LANG=%%F"
)
)
)
endlocal && set LANG=%LANG%
%print_debug% init.bat "Env Var - GIT_INSTALL_ROOT=%GIT_INSTALL_ROOT%"
%print_debug% init.bat "Found Git in: '%GIT_INSTALL_ROOT%'"
goto :PATH_ENHANCE
:NO_GIT
endlocal & set "PATH=%PATH%" & set "SVN_SSH=%SVN_SSH%" & set "GIT_INSTALL_ROOT=%GIT_INSTALL_ROOT%"
call :debug-output init.bat - Env Var - GIT_INSTALL_ROOT=%GIT_INSTALL_ROOT%
:: Skip this if GIT WAS FOUND else we did 'endlocal' above!
endlocal
:: Enhance Path
call :enhance_path_recursive "%CMDER_ROOT%\bin" %max_depth%
:PATH_ENHANCE
%lib_path% enhance_path "%CMDER_ROOT%\vendor\bin"
:USER_CONFIG_START
%lib_path% enhance_path_recursive "%CMDER_ROOT%\bin" 0 %max_depth%
if defined CMDER_USER_BIN (
call :enhance_path "%CMDER_USER_BIN%" %max_depth%
%lib_path% enhance_path_recursive "%CMDER_USER_BIN%" 0 %max_depth%
)
call :enhance_path "%CMDER_ROOT%" append
%lib_path% enhance_path "%CMDER_ROOT%" append
:: Drop *.bat and *.cmd files into "%CMDER_ROOT%\config\profile.d"
:: to run them at startup.
call :run_profile_d "%CMDER_ROOT%\config\profile.d"
%lib_profile% run_profile_d "%CMDER_ROOT%\config\profile.d"
if defined CMDER_USER_CONFIG (
call :run_profile_d "%CMDER_USER_CONFIG%\profile.d"
%lib_profile% run_profile_d "%CMDER_USER_CONFIG%\profile.d"
)
:USER_ALIASES
:: Allows user to override default aliases store using profile.d
:: scripts run above by setting the 'aliases' env variable.
::
:: Note: If overriding default aliases store file the aliases
:: must also be self executing, see '.\user-aliases.cmd.example',
:: must also be self executing, see '.\user_aliases.cmd.default',
:: and be in profile.d folder.
if not defined user-aliases (
if defined CMDER_USER_CONFIG (
set "user-aliases=%CMDER_USER_CONFIG%\user-aliases.cmd"
) else (
set "user-aliases=%CMDER_ROOT%\config\user-aliases.cmd"
)
if not defined user_aliases (
set "user_aliases=%CMDER_CONFIG_DIR%\user_aliases.cmd"
)
:: The aliases environment variable is used by alias.bat to id
:: the default file to store new aliases in.
if "%CMDER_ALIASES%" == "1" (
REM The aliases environment variable is used by alias.bat to id
REM the default file to store new aliases in.
if not defined aliases (
set "aliases=%user-aliases%"
set "aliases=%user_aliases%"
)
:: Make sure we have a self-extracting user-aliases.cmd file
setlocal enabledelayedexpansion
if not exist "%user-aliases%" (
echo Creating initial user-aliases store in "%user-aliases%"...
copy "%CMDER_ROOT%\vendor\user-aliases.cmd.example" "%user-aliases%"
REM Make sure we have a self-extracting user_aliases.cmd file
if not exist "%user_aliases%" (
echo Creating initial user_aliases store in "%user_aliases%"...
copy "%CMDER_ROOT%\vendor\user_aliases.cmd.default" "%user_aliases%"
) else (
type "%user-aliases%" | findstr /i ";= Add aliases below here" >nul
if "!errorlevel!" == "1" (
echo Creating initial user-aliases store in "%user-aliases%"...
if defined CMDER_USER_CONFIG (
copy "%user-aliases%" "%user-aliases%.old_format"
copy "%CMDER_ROOT%\vendor\user-aliases.cmd.example" "%user-aliases%"
) else (
copy "%user-aliases%" "%user-aliases%.old_format"
copy "%CMDER_ROOT%\vendor\user-aliases.cmd.example" "%user-aliases%"
)
)
%lib_base% update_legacy_aliases
)
:: Update old 'user-aliases' to new self executing 'user-aliases.cmd'
:: Update old 'user_aliases' to new self executing 'user_aliases.cmd'
if exist "%CMDER_ROOT%\config\aliases" (
echo Updating old "%CMDER_ROOT%\config\aliases" to new format...
type "%CMDER_ROOT%\config\aliases" >> "%user-aliases%" && del "%CMDER_ROOT%\config\aliases"
) else if exist "%user-aliases%.old_format" (
echo Updating old "%user-aliases%" to new format...
type "%user-aliases%.old_format" >> "%user-aliases%" && del "%user-aliases%.old_format"
type "%CMDER_ROOT%\config\aliases" >> "%user_aliases%"
del "%CMDER_ROOT%\config\aliases"
) else if exist "%user_aliases%.old_format" (
echo Updating old "%user_aliases%" to new format...
type "%user_aliases%.old_format" >> "%user_aliases%"
del "%user_aliases%.old_format"
)
)
endlocal
:: Add aliases to the environment
call "%user-aliases%"
type "%user_aliases%" | findstr /b /l /i "history=cat " >nul
if "%ERRORLEVEL%" == "0" (
echo Migrating alias 'history' to new Clink 1.x.x...
call "%CMDER_ROOT%\vendor\bin\alias.cmd" /d history
echo Restart the session to activate changes!
)
call "%user_aliases%"
if "%CMDER_CONFIGURED%" gtr "1" goto :CMDER_CONFIGURED
:: See vendor\git-for-windows\README.portable for why we do this
:: Basically we need to execute this post-install.bat because we are
:: manually extracting the archive rather than executing the 7z sfx
if exist "%GIT_INSTALL_ROOT%\post-install.bat" (
call :verbose-output Running Git for Windows one time Post Install....
echo Running Git for Windows one time Post Install....
pushd "%GIT_INSTALL_ROOT%\"
"%GIT_INSTALL_ROOT%\git-bash.exe" --no-needs-console --hide --no-cd --command=post-install.bat
"%GIT_INSTALL_ROOT%\git-cmd.exe" --no-needs-console --no-cd --command=post-install.bat
popd
)
:: Set home path
if not defined HOME set "HOME=%USERPROFILE%"
call :debug-output init.bat - Env Var - HOME=%HOME%
%print_debug% init.bat "Env Var - HOME=%HOME%"
if exist "%CMDER_ROOT%\config\user-profile.cmd" (
set "initialConfig=%CMDER_ROOT%\config\user_profile.cmd"
if exist "%CMDER_ROOT%\config\user_profile.cmd" (
REM Create this file and place your own command in there
call "%CMDER_ROOT%\config\user-profile.cmd"
%print_debug% init.bat "Calling - %CMDER_ROOT%\config\user_profile.cmd"
call "%CMDER_ROOT%\config\user_profile.cmd"
)
if defined CMDER_USER_CONFIG if exist "%CMDER_USER_CONFIG%\user-profile.cmd" (
REM Create this file and place your own command in there
call "%CMDER_USER_CONFIG%\user-profile.cmd"
) else (
echo Creating user startup file: "%CMDER_ROOT%\config\user-profile.cmd"
(
echo :: use this file to run your own startup commands
echo :: use in front of the command to prevent printing the command
echo.
echo :: uncomment this to have the ssh agent load when cmder starts
echo :: call "%%GIT_INSTALL_ROOT%%/cmd/start-ssh-agent.cmd"
echo.
echo :: uncomment this next two lines to use pageant as the ssh authentication agent
echo :: SET SSH_AUTH_SOCK=/tmp/.ssh-pageant-auth-sock
echo :: call "%%GIT_INSTALL_ROOT%%/cmd/start-ssh-pageant.cmd"
echo.
echo :: you can add your plugins to the cmder path like so
echo :: set "PATH=%%CMDER_ROOT%%\vendor\whatever;%%PATH%%"
echo.
echo @echo off
) >"%temp%\user-profile.tmp"
if defined CMDER_USER_CONFIG (
copy "%temp%\user-profile.tmp" "%CMDER_USER_CONFIG%\user-profile.cmd"
) else (
copy "%temp%\user-profile.tmp" "%CMDER_ROOT%\config\user-profile.cmd"
set "initialConfig=%CMDER_USER_CONFIG%\user_profile.cmd"
if exist "%CMDER_USER_CONFIG%\user_profile.cmd" (
REM Create this file and place your own command in there
%print_debug% init.bat "Calling - %CMDER_USER_CONFIG%\user_profile.cmd"
call "%CMDER_USER_CONFIG%\user_profile.cmd"
)
)
exit /b
if not exist "%initialConfig%" (
echo Creating user startup file: "%initialConfig%"
copy "%CMDER_ROOT%\vendor\user_profile.cmd.default" "%initialConfig%"
)
::
:: sub-routines below here
::
:debug-output
if %debug-output% gtr 0 echo %* & echo.
exit /b
if "%CMDER_ALIASES%" == "1" if exist "%CMDER_ROOT%\bin\alias.bat" if exist "%CMDER_ROOT%\vendor\bin\alias.cmd" (
echo Cmder's 'alias' command has been moved into "%CMDER_ROOT%\vendor\bin\alias.cmd"
echo to get rid of this message either:
echo.
echo Delete the file "%CMDER_ROOT%\bin\alias.bat"
echo.
echo or
echo.
echo If you have customized it and want to continue using it instead of the included version
echo * Rename "%CMDER_ROOT%\bin\alias.bat" to "%CMDER_ROOT%\bin\alias.cmd".
echo * Search for 'user-aliases' and replace it with 'user_aliases'.
)
:verbose-output
if %debug-output% gtr 0 (
call :debug-output :verbose-output - %*
) else if %verbose-output% gtr 0 (
echo %*
set initialConfig=
:CMDER_CONFIGURED
if not defined CMDER_CONFIGURED set CMDER_CONFIGURED=1
set CMDER_INIT_END=%time%
if %time_init% gtr 0 (
"%cmder_root%\vendor\bin\timer.cmd" "%CMDER_INIT_START%" "%CMDER_INIT_END%"
)
exit /b
:show_error
echo ERROR: %*
echo CMDER Shell Initialization has Failed!
exit /b
:run_profile_d
if not exist "%~1" (
mkdir "%~1"
)
pushd "%~1"
for /f "usebackq" %%x in ( `dir /b *.bat *.cmd 2^>nul` ) do (
call :verbose-output Calling "%~1\%%x"...
call "%~1\%%x"
)
popd
exit /b
::
:: specific to git version comparing
::
:read_version
:: clear the variables
set GIT_VERSION_%~1=
:: set the executable path
set "git_executable=%~2\git.exe"
call :debug-output :read_version - Env Var - git_executable=%git_executable%
:: check if the executable actually exists
if not exist "%git_executable%" (
call :verbose-output "%git_executable%" does not exist!
exit /b -255
)
:: get the git version in the provided directory
for /F "tokens=1,2,3 usebackq" %%F in (`"%git_executable%" --version 2^>nul`) do (
if "%%F %%G" == "git version" (
set "GIT_VERSION_%~1=%%H"
call :debug-output :read_version - Env Var - GIT_VERSION_%~1=%%H
) else (
echo "git --version" returned an inproper version string!
pause
exit /b
)
)
:: parse the returned string
call :debug-output :read_version - Calling - :validate_version "%~1" !GIT_VERSION_%~1!
call :validate_version "%~1" !GIT_VERSION_%~1!
exit /b
:parse_version
:: process a `x.x.x.xxxx.x` formatted string
for /F "tokens=1-3* delims=.,-" %%A in ("%2") do (
set "%~1_MAJOR=%%A"
set "%~1_MINOR=%%B"
set "%~1_PATCH=%%C"
set "%~1_BUILD=%%D"
)
exit /b
:validate_version
:: now parse the version information into the corresponding variables
call :parse_version %~1 %~2
:: ... and maybe display it, for debugging purposes.
call :debug-output :validate_version - Found Git Version for %~1: !%~1_MAJOR!.!%~1_MINOR!.!%~1_PATCH!.!%~1_BUILD!
exit /b
:compare_versions
:: checks all major, minor, patch and build variables for the given arguments.
:: whichever binary that has the most recent version will be used based on the return code.
:: call :debug-output Comparing:
:: call :debug-output %~1: !%~1_MAJOR!.!%~1_MINOR!.!%~1_PATCH!.!%~1_BUILD!
:: call :debug-output %~2: !%~2_MAJOR!.!%~2_MINOR!.!%~2_PATCH!.!%~2_BUILD!
if !%~1_MAJOR! GTR !%~2_MAJOR! (exit /b 1)
if !%~1_MAJOR! LSS !%~2_MAJOR! (exit /b -1)
if !%~1_MINOR! GTR !%~2_MINOR! (exit /b 1)
if !%~1_MINOR! LSS !%~2_MINOR! (exit /b -1)
if !%~1_PATCH! GTR !%~2_PATCH! (exit /b 1)
if !%~1_PATCH! LSS !%~2_PATCH! (exit /b -1)
if !%~1_BUILD! GTR !%~2_BUILD! (exit /b 1)
if !%~1_BUILD! LSS !%~2_BUILD! (exit /b -1)
:: looks like we have the same versions.
exit /b 0
:enhance_path
setlocal enabledelayedexpansion
if "%~1" neq "" (
if exist "%~1" (
set "add_path=%~1"
) else (
call :show_error :enhance_path - The path specified. "%~1", does not exist!
exit 1
)
) else (
call :show_error You must specify a directory to add to the path!
exit 1
)
if "%~2" neq "" if /i "%~2" == "append" (
set "position=%~2"
) else (
set "position="
)
set "find_query=%add_path%"
set "find_query=%find_query:\=\\%"
set "find_query=%find_query: =\ %"
set found=0
call :debug-output :enhance_path "Env Var - find_query=%find_query%"
echo "%PATH%"|findstr >nul /I /R ";%find_query%\"$"
if "!ERRORLEVEL!" == "0" set found=1
call :debug-output :enhance_path "Env Var 1 - found=!found!"
if "!found!" == "0" (
echo "%PATH%"|findstr >nul /i /r ";%find_query%;"
if "!ERRORLEVEL!" == "0" set found=1
call :debug-output :enhance_path "Env Var 2 - found=!found!"
)
if "%found%" == "0" (
call :debug-output :enhance_path "BEFORE Env Var - PATH=!path!"
if /i "%position%" == "append" (
call :debug-output :enhance_path "Appending '%add_path%'"
set "PATH=%PATH%;%add_path%"
) else (
call :debug-output :enhance_path "Prepending '%add_path%'"
set "PATH=%add_path%;%PATH%"
)
call :debug-output :enhance_path "AFTER Env Var - PATH=!path!"
)
endlocal & set "PATH=%PATH%"
exit /b
:enhance_path_recursive
::: ==============================================================================
:::enhance_path_recursive - Add a directory and subs to the path env variable if
::: required.
:::
:::include:
:::
::: call "$0"
:::
:::usage:
:::
::: call "%~DP0lib_path" enhance_path_recursive "[dir_path]" [max_depth] [append]
:::
:::required:
:::
::: [dir_path] <in> Fully qualified directory path. Ex: "c:\bin"
:::
:::dptions:
:::
::: [max_depth] <in> Max recuse depth. Default: 1
:::
::: append <in> Append instead rather than pre-pend "[dir_path]"
:::
:::output:
:::
::: path <out> Sets the path env variable if required.
::: ------------------------------------------------------------------------------
setlocal enabledelayedexpansion
if "%~1" neq "" (
set "add_path=%~1"
) else (
call :directory to add to the path!"
exit 1
)
if "%~2" gtr "1" (
set "max_depth=%~2"
) else (
set "max_depth=1"
)
if "%~3" neq "" if /i "%~3" == "append" (
set "position=%~3"
) else (
set "position="
)
if "%depth%" == "" set depth=0
call :debug-output :enhance_path_recursive "Env Var - add_path=%add_path%"
call :debug-output :enhance_path_recursive "Env Var - position=%position%"
call :debug-output :enhance_path_recursive "Env Var - max_depth=%max_depth%"
if %max_depth% gtr !depth! (
call :debug-output :enhance_path_recursive "Adding parent directory - '%add_path%'"
call :enhance_path "%add_path%" %position%
set /a "depth=!depth!+1"
for /d %%i in ("%add_path%\*") do (
call :debug-output :enhance_path_recursive "Env Var BEFORE - depth=!depth!"
call :debug-output :enhance_path_recursive "Found Subdirectory - '%%~fi'"
call :enhance_path_recursive "%%~fi" %max_depth% %position%
call :debug-output :enhance_path_recursive "Env Var AFTER- depth=!depth!"
)
)
endlocal & set "PATH=%PATH%"
exit /b

89
vendor/lib/lib_base.cmd vendored Normal file
View File

@ -0,0 +1,89 @@
@echo off
set lib_base=call "%~dp0lib_base.cmd"
if "%~1" == "/h" (
%lib_base% help "%~0"
) else if "%1" neq "" (
call :%*
)
exit /b
:help
:::===============================================================================
:::show_subs - shows all sub routines in a .bat/.cmd file with documentation
:::.
:::include:
:::.
::: call "lib_base.cmd"
:::.
:::usage:
:::.
::: %lib_base% show_subs "file"
:::.
:::options:
:::.
::: file <in> full path to file containing lib_routines to display
:::.
:::-------------------------------------------------------------------------------
for /f "tokens=* delims=:" %%a in ('type "%~1" ^| %WINDIR%\System32\findstr /i /r "^:::"') do (
rem echo a="%%a"
if "%%a"=="." (
echo.
) else if /i "%%a" == "usage" (
echo %%a:
) else if /i "%%a" == "options" (
echo %%a:
) else if not "%%a" == "" (
echo %%a
)
)
pause
exit /b
:cmder_shell
:::===============================================================================
:::show_subs - shows all sub routines in a .bat/.cmd file with documentation
:::.
:::include:
:::.
::: call "lib_base.cmd"
:::.
:::usage:
:::.
::: %lib_base% cmder_shell
:::.
:::options:
:::.
::: file <in> full path to file containing lib_routines to display
:::.
:::-------------------------------------------------------------------------------
call :detect_comspec %ComSpec%
exit /b
:detect_comspec
set CMDER_SHELL=%~n1
if not defined CMDER_CLINK (
set CMDER_CLINK=1
)
if not defined CMDER_ALIASES (
set CMDER_ALIASES=1
)
exit /b
:update_legacy_aliases
type "%user_aliases%" | %WINDIR%\System32\findstr /i ";= Add aliases below here" >nul
if "%errorlevel%" == "1" (
echo Creating initial user_aliases store in "%user_aliases%"...
if defined CMDER_USER_CONFIG (
copy "%user_aliases%" "%user_aliases%.old_format"
copy "%CMDER_ROOT%\vendor\user_aliases.cmd.default" "%user_aliases%"
) else (
copy "%user_aliases%" "%user_aliases%.old_format"
copy "%CMDER_ROOT%\vendor\user_aliases.cmd.default" "%user_aliases%"
)
)
exit /b

107
vendor/lib/lib_console.cmd vendored Normal file
View File

@ -0,0 +1,107 @@
@echo off
call "%~dp0lib_base.cmd"
set lib_console=call "%~dp0lib_console.cmd"
set ESC=
:: Much faster than using "%lib_console% debug_output ..." etc.
set print_debug=if %debug_output% gtr 0 %lib_console% debug_output
set print_verbose=if %verbose_output% gtr 0 %lib_console% verbose_output
set print_warning=if %verbose_output% gtr 0 %lib_console% show_warning
set print_error=%lib_console% show_error
if %fast_init% gtr %verbose_output% if %fast_init% gtr %debug_output% exit /b
if "%~1" == "/h" (
%lib_base% help "%~0"
) else if "%1" neq "" (
call :%*
)
exit /b
:debug_output
:::===============================================================================
:::debug_output - Output a debug message to the console.
:::.
:::include:
:::.
::: call "lib_console.cmd"
:::.
:::usage:
:::.
::: %lib_console% debug_output [caller] [message]
:::.
:::required:
:::.
::: [caller] <in> Script/sub routine name calling debug_output
:::.
::: [message] <in> Message text to display.
:::.
:::-------------------------------------------------------------------------------
if %debug_output% gtr 0 echo %time% DEBUG(%~1): %~2 & echo.
exit /b
:verbose_output
:::===============================================================================
:::verbose_output - Output a debug message to the console.
:::.
:::include:
:::.
::: call "$0"
:::.
:::usage:
:::.
::: %lib_console% verbose_output "[message]"
:::.
:::required:
:::.
::: [message] <in> Message text to display.
:::.
:::-------------------------------------------------------------------------------
if %verbose_output% gtr 0 echo %~1
exit /b
:show_error
:::===============================================================================
:::show_error - Output an error message to the console.
:::.
:::include:
:::.
::: call "$0"
:::.
:::usage:
:::.
::: %lib_console% show_error "[message]"
:::.
:::required:
:::.
::: [message] <in> Message text to display.
:::.
:::-------------------------------------------------------------------------------
echo %ESC%[91;1mERROR:%ESC%[0m %~1
exit /b
:show_warning
:::===============================================================================
:::show_warning - Output a warning message to the console.
:::.
:::include:
:::.
::: call "$0"
:::.
:::usage:
:::.
::: %lib_console% show_warning "[message]"
:::.
:::required:
:::.
::: [message] <in> Message text to display.
:::.
:::-------------------------------------------------------------------------------
echo %ESC%[93;1mWARNING:%ESC%[0m %~1
exit /b

281
vendor/lib/lib_git.cmd vendored Normal file
View File

@ -0,0 +1,281 @@
@echo off
call "%~dp0lib_base.cmd"
call "%%~dp0lib_console.cmd"
set lib_git=call "%~dp0lib_git.cmd"
if "%~1" == "/h" (
%lib_base% help "%~0"
) else if "%1" neq "" (
call :%*
)
exit /b
:read_version
:::===============================================================================
:::read_version - Get the git.exe version
:::.
:::include:
:::.
::: call "lib_git.cmd"
:::.
:::usage:
:::.
::: %lib_git% read_version "[dir_path]"
:::.
:::required:
:::.
::: [GIT SCOPE] <in> USER | VENDORED
::: [GIT PATH] <in> Fully qualified path to the Git command root.
:::.
:::output:
:::.
::: GIT_VERSION_[GIT SCOPE] <out> Env variable containing Git semantic version string
:::-------------------------------------------------------------------------------
:: clear the variables
set GIT_VERSION_%~1=
:: set the executable path
set "git_executable=%~2\git.exe"
%print_debug% :read_version "Env Var - git_executable=%git_executable%"
:: check if the executable actually exists
if not exist "%git_executable%" (
%print_debug% :read_version "%git_executable% does not exist."
exit /b -255
)
:: get the git version in the provided directory
"%git_executable%" --version > "%temp%\git_version.txt"
setlocal enabledelayedexpansion
for /F "tokens=1,2,3 usebackq" %%A in (`type "%temp%\git_version.txt" 2^>nul`) do (
if /i "%%A %%B" == "git version" (
set "GIT_VERSION=%%C"
) else (
echo "'git --version' returned an improper version string!"
pause
exit /b
)
)
endlocal & set "GIT_VERSION_%~1=%GIT_VERSION%" & %print_debug% :read_version "Env Var - GIT_VERSION_%~1=%GIT_VERSION%"
exit /b
:parse_version
:::===============================================================================
:::parse_version - Parse semantic version string 'x.x.x.x' and return the pieces
:::.
:::include:
:::.
::: call "$0"
:::.
:::usage:
:::.
::: %lib_git% parse_version "[VERSION]"
:::.
:::required:
:::.
::: [SCOPE] <in> USER | VENDORED
::: [VERSION] <in> Semantic version String. Ex: 1.2.3.4
:::.
:::output:
:::.
::: [SCOPE]_MAJOR <out> Scoped Major version.
::: [SCOPE]_MINOR <out> Scoped Minor version.
::: [SCOPE]_PATCH <out> Scoped Patch version.
::: [SCOPE]_BUILD <out> Scoped Build version.
:::-------------------------------------------------------------------------------
:: process a `x.x.x.xxxx.x` formatted string
%print_debug% :parse_version "ARGV[1]=%~1, ARGV[2]=%~2"
setlocal enabledelayedexpansion
for /F "tokens=1-3* delims=.,-" %%A in ("%2") do (
set "%~1_MAJOR=%%A"
set "%~1_MINOR=%%B"
set "%~1_PATCH=%%C"
set "%~1_BUILD=%%D"
)
REM endlocal & set "%~1_MAJOR=!%~1_MAJOR!" & set "%~1_MINOR=!%~1_MINOR!" & set "%~1_PATCH=!%~1_PATCH!" & set "%~1_BUILD=!%~1_BUILD!"
if "%~1" == "VENDORED" (
endlocal & set "%~1_MAJOR=%VENDORED_MAJOR%" & set "%~1_MINOR=%VENDORED_MINOR%" & set "%~1_PATCH=%VENDORED_PATCH%" & set "%~1_BUILD=%VENDORED_BUILD%"
) else (
endlocal & set "%~1_MAJOR=%USER_MAJOR%" & set "%~1_MINOR=%USER_MINOR%" & set "%~1_PATCH=%USER_PATCH%" & set "%~1_BUILD=%USER_BUILD%"
)
exit /b
:endlocal_set_git_version
:validate_version
:::===============================================================================
:::validate_version - Validate semantic version string 'x.x.x.x'.
:::.
:::include:
:::.
::: call "$0"
:::.
:::usage:
:::.
::: %lib_git% validate_version [SCOPE] [VERSION]
:::.
:::required:
:::.
::: [SCOPE] <in> Example: USER | VENDORED
::: [VERSION] <in> Semantic version String. Ex: 1.2.3.4
:::-------------------------------------------------------------------------------
:: now parse the version information into the corresponding variables
%print_debug% :validate_version "ARGV[1]=%~1, ARGV[2]=%~2"
call :parse_version %~1 %~2
:: ... and maybe display it, for debugging purposes.
REM %print_debug% :validate_version "Found Git Version for %~1: !%~1_MAJOR!.!%~1_MINOR!.!%~1_PATCH!.!%~1_BUILD!"
if "%~1" == "VENDORED" (
%print_debug% :validate_version "Found Git Version for %~1: %VENDORED_MAJOR%.%VENDORED_MINOR%.%VENDORED_PATCH%.%VENDORED_BUILD%"
) else (
%print_debug% :validate_version "Found Git Version for %~1: %USER_MAJOR%.%USER_MINOR%.%USER_PATCH%.%USER_BUILD%"
)
exit /b
:compare_versions
:::===============================================================================
:::compare_version - Compare semantic versions return latest version.
:::.
:::include:
:::.
::: call "$0"
:::.
:::usage:
:::.
::: %lib_git% validate_version [SCOPE1] [SCOPE2]
:::.
:::required:
:::.
::: [SCOPE1] <in> Example: USER
::: [SCOPE2] <in> Example: VENDOR
:::-------------------------------------------------------------------------------
:: checks all major, minor, patch and build variables for the given arguments.
:: whichever binary that has the most recent version will be used based on the return code.
%print_debug% ":compare_versions" "Comparing:"
%print_debug% ":compare_versions" "%~1: %USER_MAJOR%.%USER_MINOR%.%USER_PATCH%.%USER_BUILD%"
%print_debug% ":compare_versions" "%~2: %VENDORED_MAJOR%.%VENDORED_MINOR%.%VENDORED_PATCH%.%VENDORED_BUILD%"
setlocal enabledelayedexpansion
if !%~1_MAJOR! GTR !%~2_MAJOR! (endlocal & exit /b 1)
if !%~1_MAJOR! LSS !%~2_MAJOR! (endlocal & exit /b -1)
if !%~1_MINOR! GTR !%~2_MINOR! (endlocal & exit /b 1)
if !%~1_MINOR! LSS !%~2_MINOR! (endlocal & exit /b -1)
if !%~1_PATCH! GTR !%~2_PATCH! (endlocal & exit /b 1)
if !%~1_PATCH! LSS !%~2_PATCH! (endlocal & exit /b -1)
if !%~1_BUILD! GTR !%~2_BUILD! (endlocal & exit /b 1)
if !%~1_BUILD! LSS !%~2_BUILD! (endlocal & exit /b -1)
:: looks like we have the same versions.
endlocal & exit /b 0
:::===============================================================================
:::is_git_shim
:::.
:::include:
:::.
::: call "$0"
:::.
:::usage:
:::.
::: %lib_git% is_git_shim [filepath]
:::.
:::required:
:::.
::: [filepath] <in>
:::-------------------------------------------------------------------------------
:is_git_shim
pushd "%~1"
:: check if there's shim - and if yes follow the path
setlocal enabledelayedexpansion
if exist git.shim (
for /F "tokens=2 delims== " %%I in (git.shim) do (
pushd %%~dpI
set "test_dir=!CD!"
popd
)
) else (
set "test_dir=!CD!"
)
endlocal & set "test_dir=%test_dir%"
popd
exit /b
:::===============================================================================
:::compare_git_versions
:::.
:::include:
:::.
::: call "$0"
:::.
:::usage:
:::.
::: %lib_git% compare_git_versions
:::-------------------------------------------------------------------------------
:compare_git_versions
setlocal enabledelayedexpansion
if ERRORLEVEL 0 (
:: compare the user git version against the vendored version
%lib_git% compare_versions USER VENDORED
set result=!ERRORLEVEL!
%print_debug% ":compare_git_versions" "campare versions_result: !result!"
:: use the user provided git if its version is greater than, or equal to the vendored git
if !result! geq 0 (
if exist "!test_dir:~0,-4!\cmd\git.exe" (
set "GIT_INSTALL_ROOT=!test_dir:~0,-4!"
) else (
set "GIT_INSTALL_ROOT=!test_dir!"
)
) else (
%print_debug% ":compare_git_versions" "Found old !GIT_VERSION_USER! in !test_dir!, but not using..."
)
) else (
:: compare the user git version against the vendored version
:: if the user provided git executable is not found
IF ERRORLEVEL -255 IF NOT ERRORLEVEL -254 (
:: if not exist "%git_executable%" (
%print_debug% ":compare_git_versions" "No git at "%git_executable%" found."
set test_dir=
)
)
endlocal && set "GIT_INSTALL_ROOT=%GIT_INSTALL_ROOT%" && set test_dir=
exit /b
:::===============================================================================
:::get_user_git_version - get the version information for the user provided git binary
:::.
:::include:
:::.
::: call "$0"
:::.
:::usage:
:::.
::: %lib_git% get_user_git_version
:::-------------------------------------------------------------------------------
:get_user_git_version
:: get the version information for the user provided git binary
%lib_git% read_version USER "%test_dir%" 2>nul
%print_debug% ":get_user_git_version" "get_user_git_version GIT_VERSION_USER: %GIT_VERSION_USER%"
%lib_git% validate_version USER %GIT_VERSION_USER%
exit /b

242
vendor/lib/lib_path.cmd vendored Normal file
View File

@ -0,0 +1,242 @@
@echo off
call "%~dp0lib_base.cmd"
call "%%~dp0lib_console"
set lib_path=call "%~dp0lib_path.cmd"
if "%~1" == "/h" (
%lib_base% help "%~0"
) else if "%1" neq "" (
call :%*
)
exit /b
:enhance_path
:::===============================================================================
:::enhance_path - Add a directory to the path env variable if required.
:::
:::include:
:::
::: call "lib_path.cmd"
:::
:::usage:
:::
::: %lib_path% enhance_path "[dir_path]" [append]
:::
:::required:
:::
::: [dir_path] <in> Fully qualified directory path. Ex: "c:\bin"
:::
:::options:
:::
::: append <in> Append to the path env variable rather than pre-pend.
::B
:::
:::output:
:::
::: path <out> Sets the path env variable if required.
:::-------------------------------------------------------------------------------
if "%~1" neq "" (
set "add_path=%~1"
) else (
%print_error% "You must specify a directory to add to the path!"
exit 1
)
if "%~2" neq "" if /i "%~2" == "append" (
set "position=%~2"
) else (
set "position="
)
dir "%add_path%" | findstr -i "\.COM \.EXE \.BAT \.CMD \.PS1 \.VBS" >NUL
if "%ERRORLEVEL%" == "0" (
set "add_to_path=%add_path%"
) else (
set "add_to_path="
)
if "%fast_init%" == "1" (
if "%position%" == "append" (
set "PATH=%PATH%;%add_to_path%"
) else (
set "PATH=%add_to_path%;%PATH%"
)
goto :end_enhance_path
) else if "add_to_path" equ "" (
goto :end_enhance_path
)
set found=0
set "find_query=%add_to_path%"
set "find_query=%find_query:\=\\%"
set "find_query=%find_query: =\ %"
set "OLD_PATH=%PATH%"
setlocal enabledelayedexpansion
if "!found!" == "0" (
echo "!path!"|!WINDIR!\System32\findstr >nul /I /R /C:";!find_query!;"
call :set_found
)
%print_debug% :enhance_path "Env Var INSIDE PATH !find_query! - found=!found!"
if /i "!position!" == "append" (
if "!found!" == "0" (
echo "!path!"|!WINDIR!\System32\findstr >nul /I /R /C:";!find_query!\"$"
call :set_found
)
%print_debug% :enhance_path "Env Var END PATH !find_query! - found=!found!"
) else (
if "!found!" == "0" (
echo "!path!"|!WINDIR!\System32\findstr >nul /I /R /C:"^\"!find_query!;"
call :set_found
)
%print_debug% :enhance_path "Env Var BEGIN PATH !find_query! - found=!found!"
)
endlocal & set found=%found%
if "%found%" == "0" (
if /i "%position%" == "append" (
%print_debug% :enhance_path "Appending '%add_to_path%'"
set "PATH=%PATH%;%add_to_path%"
) else (
%print_debug% :enhance_path "Prepending '%add_to_path%'"
set "PATH=%add_to_path%;%PATH%"
)
set found=1
)
:end_enhance_path
set "PATH=%PATH:;;=;%"
REM echo %path%|"C:\Users\dgames\cmder - dev\vendor\git-for-windows\usr\bin\wc" -c
if "%fast_init%" == "1" exit /b
if not "%OLD_PATH:~0,3000%" == "%OLD_PATH:~0,3001%" goto :toolong
if not "%OLD_PATH%" == "%PATH%" goto :changed
exit /b
:toolong
echo "%OLD_PATH%">"%temp%\cmder_lib_pathA"
echo "%PATH%">"%temp%\cmder_lib_pathB"
fc /b "%temp%\cmder_lib_pathA" "%temp%\cmder_lib_pathB" 2>nul 1>nul
if errorlevel 1 ( del "%temp%\cmder_lib_pathA" & del "%temp%\cmder_lib_pathB" & goto :changed )
del "%temp%\cmder_lib_pathA" & del "%temp%\cmder_lib_pathB"
exit /b
:changed
%print_debug% :enhance_path "END Env Var - PATH=%path%"
%print_debug% :enhance_path "Env Var %find_query% - found=%found%"
exit /b
exit /b
:set_found
if "%ERRORLEVEL%" == "0" (
set found=1
)
exit /b
:enhance_path_recursive
:::===============================================================================
:::enhance_path_recursive - Add a directory and subs to the path env variable if
::: required.
:::.
:::include:
:::.
::: call "$0"
:::.
:::usage:
:::.
::: call "%~DP0lib_path" enhance_path_recursive "[dir_path]" [max_depth] [append]
:::.
:::required:
:::.
::: [dir_path] <in> Fully qualified directory path. Ex: "c:\bin"
:::.
:::options:
:::.
::: [max_depth] <in> Max recursion depth. Default: 1
:::.
::: append <in> Append instead to path env variable rather than pre-pend.
:::.
:::output:
:::.
::: path <out> Sets the path env variable if required.
:::-------------------------------------------------------------------------------
if "%~1" neq "" (
set "add_path=%~1"
) else (
%print_error% "You must specify a directory to add to the path!"
exit 1
)
set "depth=%~2"
set "max_depth=%~3"
if "%~4" neq "" if /i "%~4" == "append" (
set "position=%~4"
) else (
set "position="
)
dir "%add_path%" 2>NUL | findstr -i "\.COM \.EXE \.BAT \.CMD \.PS1 \.VBS" >NUL
if "%ERRORLEVEL%" == "0" (
set "add_to_path=%add_path%"
) else (
set "add_to_path="
)
if "%fast_init%" == "1" (
if "%add_to_path%" neq "" (
call :enhance_path "%add_to_path%" %position%
)
)
set "PATH=%PATH:;;=;%"
if "%fast_init%" == "1" (
exit /b
)
%print_debug% :enhance_path_recursive "Env Var - add_path=%add_to_path%"
%print_debug% :enhance_path_recursive "Env Var - position=%position%"
%print_debug% :enhance_path_recursive "Env Var - depth=%depth%"
%print_debug% :enhance_path_recursive "Env Var - max_depth=%max_depth%"
if %max_depth% gtr %depth% (
if "%add_to_path%" neq "" (
%print_debug% :enhance_path_recursive "Adding parent directory - '%add_to_path%'"
call :enhance_path "%add_to_path%" %position%
)
call :set_depth
call :loop_depth
)
set "PATH=%PATH%"
exit /b
: set_depth
set /a "depth=%depth%+1"
exit /b
:loop_depth
if %depth% == %max_depth% (
exit /b
)
for /d %%i in ("%add_path%\*") do (
%print_debug% :enhance_path_recursive "Env Var BEFORE - depth=%depth%"
%print_debug% :enhance_path_recursive "Found Subdirectory - '%%~fi'"
call :enhance_path_recursive "%%~fi" %depth% %max_depth% %position%
%print_debug% :enhance_path_recursive "Env Var AFTER- depth=%depth%"
)
exit /b

46
vendor/lib/lib_profile.cmd vendored Normal file
View File

@ -0,0 +1,46 @@
@echo off
call "%~dp0lib_base.cmd"
call "%%~dp0lib_console"
set lib_profile=call "%~dp0lib_profile.cmd"
if "%~1" == "/h" (
%lib_base% help "%~0"
) else if "%1" neq "" (
call :%*
)
exit /b
:run_profile_d
:::===============================================================================
:::run_profile_d - Run all scripts in the passed dir path
:::
:::include:
:::
::: call "lib_profile.cmd"
:::
:::usage:
:::
::: %lib_profile% "[dir_path]"
:::
:::required:
:::
::: [dir_path] <in> Fully qualified directory path containing init *.cmd|*.bat.
::: Example: "c:\bin"
:::
::: path <out> Sets the path env variable if required.
:::-------------------------------------------------------------------------------
if not exist "%~1" (
mkdir "%~1"
)
pushd "%~1"
for /f "usebackq" %%x in ( `dir /b *.bat *.cmd 2^>nul` ) do (
%print_verbose% "Calling '%~1\%%x'..."
call "%~1\%%x"
)
popd
exit /b

22
vendor/lib/start-ssh-agent.sh vendored Normal file
View File

@ -0,0 +1,22 @@
# Copied from https://help.github.com/articles/working-with-ssh-key-passphrases
env=~/.ssh/agent.env
agent_load_env () { test -f "$env" && . "$env" >| /dev/null ; }
agent_start () {
(umask 077; ssh-agent >| "$env")
. "$env" >| /dev/null ; }
agent_load_env
# agent_run_state: 0=agent running w/ key; 1=agent w/o key; 2= agent not running
agent_run_state=$(ssh-add -l >| /dev/null 2>&1; echo $?)
if [ ! "$SSH_AUTH_SOCK" ] || [ $agent_run_state = 2 ]; then
agent_start
ssh-add
elif [ "$SSH_AUTH_SOCK" ] && [ $agent_run_state = 1 ]; then
ssh-add
fi
unset env

298
vendor/profile.ps1 vendored
View File

@ -1,8 +1,11 @@
# Init Script for PowerShell
# Created as part of cmder project
# Created as part of Cmder project
# NOTE: This file must be saved using UTF-8 with BOM encoding for prompt symbol to work correctly.
# !!! THIS FILE IS OVERWRITTEN WHEN CMDER IS UPDATED
# !!! Use "%CMDER_ROOT%\config\user-profile.ps1" to add your own startup commands
# !!! Use "%CMDER_ROOT%\config\user_profile.ps1" to add your own startup commands
$CMDER_INIT_START = Get-Date
# Compatibility with PS major versions <= 2
if (!$PSScriptRoot) {
@ -10,203 +13,218 @@ if(!$PSScriptRoot) {
}
if ($ENV:CMDER_USER_CONFIG) {
# write-host "CMDER IS ALSO USING INDIVIDUAL USER CONFIG FROM '$ENV:CMDER_USER_CONFIG'!"
Write-Verbose "CMDER IS ALSO USING INDIVIDUAL USER CONFIG FROM '$ENV:CMDER_USER_CONFIG'!"
}
# We do this for Powershell as Admin Sessions because CMDER_ROOT is not beng set.
# We do this for Powershell as Admin Sessions because CMDER_ROOT is not being set.
if (!$ENV:CMDER_ROOT) {
if ($ENV:ConEmuDir) {
$ENV:CMDER_ROOT = resolve-path( $ENV:ConEmuDir + "\..\.." )
$ENV:CMDER_ROOT = Resolve-Path($ENV:ConEmuDir + "\..\..")
} else {
$ENV:CMDER_ROOT = resolve-path( $PSScriptRoot + "\.." )
$ENV:CMDER_ROOT = Resolve-Path($PSScriptRoot + "\..")
}
}
# Remove trailing '\'
$ENV:CMDER_ROOT = (($ENV:CMDER_ROOT).trimend("\"))
$ENV:CMDER_ROOT = ($ENV:CMDER_ROOT).TrimEnd("\")
# do not load bundled psget if a module installer is already available
# -> recent PowerShell versions include PowerShellGet out of the box
$moduleInstallerAvailable = [bool](Get-Command -Name 'Install-Module' -ErrorAction SilentlyContinue | Out-Null)
# do not load bundled psget if a module installer is already available
# -> recent PowerShell versions include PowerShellGet out of the box
$moduleInstallerAvailable = [bool](Get-Command -Name 'Install-Module' -ErrorAction SilentlyContinue | Out-Null)
$moduleInstallerAvailable = [bool](Get-Command -Name 'Install-Module' -ErrorAction SilentlyContinue)
# Add Cmder modules directory to the autoload path.
$CmderModulePath = Join-path $PSScriptRoot "psmodules/"
$CmderFunctions = Join-Path $CmderModulePath "Cmder.ps1"
. $CmderFunctions
if(-not $moduleInstallerAvailable -and -not $env:PSModulePath.Contains($CmderModulePath) ) {
$env:PSModulePath = $env:PSModulePath.Insert(0, "$CmderModulePath;")
}
try {
Get-command -Name "vim" -ErrorAction Stop >$null
} catch {
# # You could do this but it may be a little drastic and introduce a lot of
# # unix tool overlap with powershel unix like aliases
# $env:Path += $(";" + $env:CMDER_ROOT + "\vendor\git-for-windows\usr\bin")
# set-alias -name "vi" -value "vim"
# # I think the below is safer.
$gitVersionVendor = (readVersion -gitPath "$ENV:CMDER_ROOT\vendor\git-for-windows\cmd")
Write-Debug "GIT VENDOR: ${gitVersionVendor}"
new-alias -name "vim" -value $($ENV:CMDER_ROOT + "\vendor\git-for-windows\usr\bin\vim.exe")
new-alias -name "vi" -value vim
# Get user installed Git Version[s] and Compare with vendored if found.
foreach ($git in (Get-Command -ErrorAction SilentlyContinue 'git')) {
Write-Debug "GIT PATH: {$git.Path}"
$gitDir = Split-Path -Path $git.Path
$gitDir = isGitShim -gitPath $gitDir
$gitVersionUser = (readVersion -gitPath $gitDir)
Write-Debug "GIT USER: ${gitVersionUser}"
$useGitVersion = compare_git_versions -userVersion $gitVersionUser -vendorVersion $gitVersionVendor
Write-Debug "Using Git Version: ${useGitVersion}"
# Use user installed Git
if ($null -eq $gitPathUser) {
if ($gitDir -match '\\mingw32\\bin' -or $gitDir -match '\\mingw64\\bin') {
$gitPathUser = ($gitDir.subString(0,$gitDir.Length - 12))
} else {
$gitPathUser = ($gitDir.subString(0,$gitDir.Length - 4))
}
}
try {
# Check if git is on PATH, i.e. Git already installed on system
Get-command -Name "git" -ErrorAction Stop >$null
} catch {
$env:Path += $(";" + $env:CMDER_ROOT + "\vendor\git-for-windows\cmd")
# for bash.exe, which in the cmd version is found as <GIT>\usr\bin\bash.exe
$env:Path += $(";" + $env:CMDER_ROOT + "\vendor\git-for-windows\bin")
if ($useGitVersion -eq $gitVersionUser) {
Write-Debug "Using Git Dir: ${gitDir}"
$ENV:GIT_INSTALL_ROOT = $gitPathUser
$ENV:GIT_INSTALL_TYPE = 'USER'
break
}
}
$gitLoaded = $false
function Import-Git($Loaded){
if($Loaded) { return }
$GitModule = Get-Module -Name Posh-Git -ListAvailable
if($GitModule | select version | where version -le ([version]"0.6.1.20160330")){
Import-Module Posh-Git > $null
}
if(-not ($GitModule) ) {
Write-Warning "Missing git support, install posh-git with 'Install-Module posh-git' and restart cmder."
}
# Make sure we only run once by alawys returning true
return $true
# User vendored Git.
if ($null -eq $ENV:GIT_INSTALL_ROOT -and $null -ne $gitVersionVendor) {
$ENV:GIT_INSTALL_ROOT = "$ENV:CMDER_ROOT\vendor\git-for-windows"
$ENV:GIT_INSTALL_TYPE = 'VENDOR'
}
function checkGit($Path) {
if (Test-Path -Path (Join-Path $Path '.git') ) {
$gitLoaded = Import-Git $gitLoaded
Write-VcsStatus
return
}
$SplitPath = split-path $path
if ($SplitPath) {
checkGit($SplitPath)
Write-Debug "GIT_INSTALL_ROOT: ${ENV:GIT_INSTALL_ROOT}"
Write-Debug "GIT_INSTALL_TYPE: ${ENV:GIT_INSTALL_TYPE}"
if ($null -ne $ENV:GIT_INSTALL_ROOT) {
$env:Path = Configure-Git -gitRoot "$ENV:GIT_INSTALL_ROOT" -gitType $ENV:GIT_INSTALL_TYPE -gitPathUser $gitPathUser
}
if (Get-Command -Name "vim" -ErrorAction SilentlyContinue) {
New-Alias -name "vi" -value vim
}
if (Get-Module PSReadline -ErrorAction "SilentlyContinue") {
Set-PSReadlineOption -ExtraPromptLineCount 1
}
# Enhance Path
$env:Path = "$Env:CMDER_ROOT\bin;$env:Path;$Env:CMDER_ROOT"
#
# Prompt Section
# Users should modify their user-profile.ps1 as it will be safe from updates.
#
# Pre assign the hooks so the first run of cmder gets a working prompt.
# Pre-assign default prompt hooks so the first run of cmder gets a working prompt.
$env:gitLoaded = $null
[ScriptBlock]$PrePrompt = {}
[ScriptBlock]$PostPrompt = {}
[ScriptBlock]$CmderPrompt = {
# Check if we're currently running under Admin privileges.
$identity = [Security.Principal.WindowsIdentity]::GetCurrent()
$principal = [Security.Principal.WindowsPrincipal] $identity
$adminRole = [Security.Principal.WindowsBuiltInRole]::Administrator
$color = "White"
if ($principal.IsInRole($adminRole)) { $color = "Red" }
$Host.UI.RawUI.ForegroundColor = "White"
Microsoft.PowerShell.Utility\Write-Host "PS " -NoNewline -ForegroundColor $color
Microsoft.PowerShell.Utility\Write-Host $pwd.ProviderPath -NoNewLine -ForegroundColor Green
checkGit($pwd.ProviderPath)
Microsoft.PowerShell.Utility\Write-Host "`nλ" -NoNewLine -ForegroundColor "DarkGray"
}
# Enhance Path
$env:Path = "$Env:CMDER_ROOT\bin;$Env:CMDER_ROOT\vendor\bin;$env:Path;$Env:CMDER_ROOT"
# Drop *.ps1 files into "$ENV:CMDER_ROOT\config\profile.d"
# to source them at startup.
if (-not (Test-Path -PathType container "$ENV:CMDER_ROOT\config\profile.d")) {
New-Item -ItemType Directory -Path "$ENV:CMDER_ROOT\config\profile.d"
}
Push-Location $ENV:CMDER_ROOT\config\profile.d
foreach ($x in Get-ChildItem *.psm1) {
Write-Verbose "Sourcing $x"
Import-Module $x
}
foreach ($x in Get-ChildItem *.ps1) {
Write-Verbose "Sourcing $x"
. $x
}
Pop-Location
# Drop *.ps1 files into "$ENV:CMDER_USER_CONFIG\config\profile.d"
# to source them at startup. Requires using cmder.exe /C [cmder_user_root_path] argument
if ($ENV:CMDER_USER_CONFIG -ne "" -and (Test-Path "$ENV:CMDER_USER_CONFIG\profile.d")) {
Push-Location $ENV:CMDER_USER_CONFIG\profile.d
foreach ($x in Get-ChildItem *.psm1) {
Write-Verbose "Sourcing $x"
Import-Module $x
}
foreach ($x in Get-ChildItem *.ps1) {
Write-Verbose "Sourcing $x"
. $x
}
Pop-Location
}
# Renaming to "config\user_profile.ps1" to "user_profile.ps1" for consistency.
if (Test-Path "$env:CMDER_ROOT\config\user-profile.ps1") {
Rename-Item "$env:CMDER_ROOT\config\user-profile.ps1" user_profile.ps1
}
$CmderUserProfilePath = Join-Path $env:CMDER_ROOT "config\user_profile.ps1"
if (Test-Path $CmderUserProfilePath) {
# Create this file and place your own command in there.
. "$CmderUserProfilePath" # user_profile.ps1 is not a module DO NOT USE import-module
}
if ($ENV:CMDER_USER_CONFIG) {
# Renaming to "$env:CMDER_USER_CONFIG\user-profile.ps1" to "user_profile.ps1" for consistency.
if (Test-Path "$env:CMDER_USER_CONFIG\user-profile.ps1") {
Rename-Item "$env:CMDER_USER_CONFIG\user-profile.ps1" user_profile.ps1
}
$env:Path = "$Env:CMDER_USER_CONFIG\bin;$env:Path"
$CmderUserProfilePath = Join-Path $ENV:CMDER_USER_CONFIG "user_profile.ps1"
if (Test-Path $CmderUserProfilePath) {
. "$CmderUserProfilePath" # user_profile.ps1 is not a module DO NOT USE import-module
}
}
if (-not (Test-Path $CmderUserProfilePath)) {
$CmderUserProfilePath = $ExecutionContext.SessionState.Path.GetUnresolvedProviderPathFromPSPath($CmderUserProfilePath)
Write-Host -NoNewline "`r"
Write-Host -BackgroundColor Green -ForegroundColor Black "First Run: Creating user startup file: $CmderUserProfilePath"
Copy-Item "$env:CMDER_ROOT\vendor\user_profile.ps1.default" -Destination $CmderUserProfilePath
}
#
# Prompt Section
# Users should modify their user_profile.ps1 as it will be safe from updates.
#
# Only set the prompt if it is currently set to the default
# This allows users to configure the prompt in their user_profile.ps1 or config\profile.d\*.ps1
if ( $(Get-Command prompt).Definition -match 'PS \$\(\$executionContext.SessionState.Path.CurrentLocation\)\$\(' -and `
$(Get-Command prompt).Definition -match '\(\$nestedPromptLevel \+ 1\)\) ";') {
<#
This scriptblock runs every time the prompt is returned.
Explicitly use functions from MS namespace to protect from being overridden in the user session.
Custom prompt functions are loaded in as constants to get the same behaviour
#>
[ScriptBlock]$Prompt = {
$realLASTEXITCODE = $LASTEXITCODE
$lastSUCCESS = $?
$realLastExitCode = $LastExitCode
$host.UI.RawUI.WindowTitle = Microsoft.PowerShell.Management\Split-Path $pwd.ProviderPath -Leaf
Microsoft.PowerShell.Utility\Write-Host -NoNewline "$([char]0x200B)`r$([char]0x1B)[K"
if ($lastSUCCESS -or ($LastExitCode -ne 0)) {
Microsoft.PowerShell.Utility\Write-Host
}
PrePrompt | Microsoft.PowerShell.Utility\Write-Host -NoNewline
CmderPrompt
Microsoft.PowerShell.Utility\Write-Host "`nλ " -NoNewLine -ForegroundColor "DarkGray"
PostPrompt | Microsoft.PowerShell.Utility\Write-Host -NoNewline
$global:LASTEXITCODE = $realLASTEXITCODE
$global:LastExitCode = $realLastExitCode
return " "
}
# Drop *.ps1 files into "$ENV:CMDER_ROOT\config\profile.d"
# to source them at startup.
if (-not (test-path "$ENV:CMDER_ROOT\config\profile.d")) {
mkdir "$ENV:CMDER_ROOT\config\profile.d"
}
pushd $ENV:CMDER_ROOT\config\profile.d
foreach ($x in Get-ChildItem *.ps1) {
# write-host write-host Sourcing $x
. $x
}
popd
# Drop *.ps1 files into "$ENV:CMDER_USER_CONFIG\config\profile.d"
# to source them at startup. Requires using cmder.exe /C [cmder_user_root_path] argument
if ($ENV:CMDER_USER_CONFIG -ne "" -and -not (test-path "$ENV:CMDER_USER_CONFIG\profile.d")) {
pushd $ENV:CMDER_USER_CONFIG\profile.d
foreach ($x in Get-ChildItem *.ps1) {
# write-host write-host Sourcing $x
. $x
}
popd
}
$CmderUserProfilePath = Join-Path $env:CMDER_ROOT "config\user-profile.ps1"
if (Test-Path $CmderUserProfilePath) {
# Create this file and place your own command in there.
. "$CmderUserProfilePath"
}
if ($ENV:CMDER_USER_CONFIG) {
$CmderUserProfilePath = Join-Path $ENV:CMDER_USER_CONFIG "user-profile.ps1"
}
if (Test-Path $CmderUserProfilePath) {
. "$CmderUserProfilePath"
} else {
# This multiline string cannot be indented, for this reason I've not indented the whole block
Write-Host -BackgroundColor Darkgreen -ForegroundColor White "First Run: Creating user startup file: $CmderUserProfilePath"
$UserProfileTemplate = @'
# Use this file to run your own startup commands
## Prompt Customization
<#
.SYNTAX
<PrePrompt><CMDER DEFAULT>
λ <PostPrompt> <repl input>
.EXAMPLE
<PrePrompt>N:\Documents\src\cmder [master]
λ <PostPrompt> |
#>
[ScriptBlock]$PrePrompt = {
}
# Replace the cmder prompt entirely with this.
# [ScriptBlock]$CmderPrompt = {}
[ScriptBlock]$PostPrompt = {
}
## <Continue to add your own>
'@
New-Item -ItemType File -Path $CmderUserProfilePath -Value $UserProfileTemplate > $null
}
# Once Created these code blocks cannot be overwritten
# if (-not $(Get-Command PrePrompt).Options -match 'Constant') {Set-Item -Path function:\PrePrompt -Value $PrePrompt -Options Constant}
# if (-not $(Get-Command CmderPrompt).Options -match 'Constant') {Set-Item -Path function:\CmderPrompt -Value $CmderPrompt -Options Constant}
# if (-not $(Get-Command PostPrompt).Options -match 'Constant') {Set-Item -Path function:\PostPrompt -Value $PostPrompt -Options Constant}
Set-Item -Path function:\PrePrompt -Value $PrePrompt -Options Constant
Set-Item -Path function:\CmderPrompt -Value $CmderPrompt -Options Constant
Set-Item -Path function:\PostPrompt -Value $PostPrompt -Options Constant
# Functions can be made constant only at creation time
# ReadOnly at least requires `-force` to be overwritten
# if (!$(Get-Command Prompt).Options -match 'ReadOnly') {Set-Item -Path function:\prompt -Value $Prompt -Options ReadOnly}
Set-Item -Path function:\prompt -Value $Prompt -Options ReadOnly
}
$CMDER_INIT_END = Get-Date
$ElapsedTime = New-TimeSpan -Start $CMDER_INIT_START -End $CMDER_INIT_END
Write-Verbose "Elapsed Time: $($ElapsedTime.TotalSeconds) seconds total"

178
vendor/psmodules/Cmder.ps1 vendored Normal file
View File

@ -0,0 +1,178 @@
function readVersion($gitPath) {
$gitExecutable = "${gitPath}\git.exe"
if (-not (Test-Path "$gitExecutable")) {
return $null
}
$gitVersion = (cmd /c "${gitExecutable}" --version)
if ($gitVersion -match 'git version') {
($trash1, $trash2, $gitVersion) = $gitVersion.split(' ', 3)
} else {
pause
return $null
}
return $gitVersion.toString()
}
function isGitShim($gitPath) {
# check if there's shim - and if yes follow the path
if (Test-Path "${gitPath}\git.shim") {
$shim = (get-content "${gitPath}\git.shim")
($trash, $gitPath) = $shim.replace(' ', '').split('=')
$gitPath = $gitPath.replace('\git.exe', '')
}
return $gitPath.toString()
}
function compareVersions($userVersion, $vendorVersion) {
if ($null -ne $userVersion) {
($userMajor, $userMinor, $userPatch, $userBuild) = $userVersion.split('.', 4)
} else {
return -1
}
if ($null -ne $vendorVersion) {
($vendorMajor, $vendorMinor, $vendorPatch, $vendorBuild) = $vendorVersion.split('.', 4)
} else {
return 1
}
if (($userMajor -eq $vendorMajor) -and ($userMinor -eq $vendorMinor) -and ($userPatch -eq $vendorPatch) -and ($userBuild -eq $vendorBuild)) {
return 1
}
if ($userMajor -gt $vendorMajor) { return 1 }
if ($userMajor -lt $vendorMajor) { return -1 }
if ($userMinor -gt $vendorMinor) { return 1 }
if ($userMinor -lt $vendorMinor) { return -1 }
if ($userPatch -gt $vendorPatch) { return 1 }
if ($userPatch -lt $vendorPatch) { return -1 }
if ($userBuild -gt $vendorBuild) { return 1 }
if ($userBuild -lt $vendorBuild) { return -1 }
return 0
}
function compare_git_versions($userVersion, $vendorVersion) {
$result = compareVersions -userVersion $userVersion -vendorVersion $vendorVersion
Write-Debug "Compare Versions Result: ${result}"
if ($result -ge 0) {
return $userVersion
}
else {
return $vendorVersion
}
}
function Configure-Git($gitRoot, $gitType, $gitPathUser) {
# Proposed Behavior
# Modify the path if we are using VENDORED Git, do nothing if using USER Git.
# If User Git is installed but is older, match its path config adding paths
# in the same path positions allowing a user to configure Cmder Git path
# using locally installed Git Path Config.
if ($gitType -eq 'VENDOR') {
# If User Git is installed replace its path config with Newer Vendored Git Path
if (($null -ne $gitPathUser) -and ($gitPathUser -ne '')) {
Write-Verbose "Cmder 'profile.ps1': Replacing older user Git path '$gitPathUser' with newer vendored Git path '$gitRoot' in the system path..."
$newPath = ($env:path -ireplace [regex]::Escape($gitPathUser), $gitRoot)
}
else {
if (-not ($env:Path -match [regex]::Escape("$gitRoot\cmd"))) {
Write-Debug "Adding $gitRoot\cmd to the path"
$newPath = $($gitRoot + "\cmd" + ";" + $env:Path)
}
# Add "$gitRoot\mingw[32|64]\bin" to the path if exists and not done already
if ((Test-Path "$gitRoot\mingw32\bin") -and -not ($env:path -match [regex]::Escape("$gitRoot\mingw32\bin"))) {
Write-Debug "Adding $gitRoot\mingw32\bin to the path"
$newPath = "$newPath;$gitRoot\mingw32\bin"
}
elseif ((Test-Path "$gitRoot\mingw64\bin") -and -not ($env:path -match [regex]::Escape("$gitRoot\mingw64\bin"))) {
Write-Debug "Adding $gitRoot\mingw64\bin to the path"
$newPath = "$newPath;$gitRoot\mingw64\bin"
}
# Add "$gitRoot\usr\bin" to the path if exists and not done already
if ((Test-Path "$gitRoot\usr\bin") -and -not ($env:path -match [regex]::Escape("$gitRoot\usr\bin"))) {
Write-Debug "Adding $gitRoot\usr\bin to the path"
$newPath = "$newPath;$gitRoot\usr\bin"
}
}
return $newPath
}
return $env:path
}
function Import-Git() {
$GitModule = Get-Module -Name Posh-Git -ListAvailable
if ($GitModule | Select-Object version | Where-Object version -le ([version]"0.6.1.20160330")) {
Import-Module Posh-Git > $null
}
if ($GitModule | Select-Object version | Where-Object version -ge ([version]"1.0.0")) {
Import-Module Posh-Git > $null
$GitPromptSettings.AnsiConsole = $false
}
if (-not $GitModule) {
Write-Host -NoNewline "`r`n"
Write-Warning "Missing git support, install posh-git with 'Install-Module posh-git' and restart Cmder."
Write-Host -NoNewline "`r$([char]0x1B)[A"
return $false
}
# Make sure we only run once by always returning true
return $true
}
function checkGit($Path) {
if (-not (Get-Command git -ErrorAction SilentlyContinue)) {
return
}
if (-not (Test-Path -Path (Join-Path $Path '.git'))) {
$SplitPath = Split-Path $path
if ($SplitPath) { checkGit($SplitPath) }
return
}
if (getGitStatusSetting -eq $true) {
if ($null -eq $env:gitLoaded) {
$env:gitLoaded = Import-Git
}
if ($env:gitLoaded -eq $true) {
Write-VcsStatus
}
}
else {
$headContent = Get-Content (Join-Path $Path '.git/HEAD')
if ($headContent -like "ref: refs/heads/*") {
$branchName = $headContent.Substring(16)
}
else {
$branchName = "HEAD detached at $($headContent.Substring(0, 7))"
}
Write-Host " [$branchName]" -NoNewline -ForegroundColor White
}
}
function getGitStatusSetting() {
$gitStatus = (git --no-pager config -l) | Out-String
foreach ($line in $($gitStatus -split "`r`n")) {
if (($line -match 'cmder.status=false') -or ($line -match 'cmder.psstatus=false')) {
return $false
}
}
return $true
}

File diff suppressed because it is too large Load Diff

16
vendor/sources.json vendored
View File

@ -1,22 +1,22 @@
[
{
"name": "git-for-windows",
"version": "v2.16.2.windows.1",
"url": "https://github.com/git-for-windows/git/releases/download/v2.16.2.windows.1/PortableGit-2.16.2-64-bit.7z.exe"
"version": "2.41.0.windows.3",
"url": "https://github.com/git-for-windows/git/releases/download/v2.41.0.windows.3/PortableGit-2.41.0.3-64-bit.7z.exe"
},
{
"name": "clink",
"version": "0.4.9",
"url": "https://github.com/mridgers/clink/releases/download/0.4.9/clink_0.4.9.zip"
"version": "1.5.1",
"url": "https://github.com/chrisant996/clink/releases/download/v1.5.1/clink.1.5.1.1e9e51.zip"
},
{
"name": "conemu-maximus5",
"version": "180206",
"url": "https://github.com/Maximus5/ConEmu/releases/download/v18.02.06/ConEmuPack.180206.7z"
"version": "23.07.24",
"url": "https://github.com/Maximus5/ConEmu/releases/download/v23.07.24/ConEmuPack.230724.7z"
},
{
"name": "clink-completions",
"version": "0.3.3",
"url": "https://github.com/vladimir-kotikov/clink-completions/archive/0.3.3.zip"
"version": "0.4.10",
"url": "https://github.com/vladimir-kotikov/clink-completions/archive/v0.4.10.zip"
}
]

View File

@ -6,10 +6,11 @@
;= Add aliases below here
e.=explorer .
gl=git log --oneline --all --graph --decorate $*
l=ls --show-control-chars -CFGNhp --color --ignore={"NTUSER.DAT*","ntuser.dat*"} $*
ls=ls --show-control-chars -F --color $*
pwd=cd
clear=cls
history=cat "%CMDER_ROOT%\config\.history"
unalias=alias /d $1
vi=vim $*
cmderr=cd /d "%CMDER_ROOT%"
pwsh=%SystemRoot%/System32/WindowsPowerShell/v1.0/powershell.exe -ExecutionPolicy Bypass -NoLogo -NoProfile -NoExit -Command "Invoke-Expression '. ''%CMDER_ROOT%/vendor/profile.ps1'''"

19
vendor/user_profile.cmd.default vendored Normal file
View File

@ -0,0 +1,19 @@
:: use this file to run your own startup commands
:: use in front of the command to prevent printing the command
:: uncomment this to have the ssh agent load when cmder starts
:: call "%GIT_INSTALL_ROOT%/cmd/start-ssh-agent.cmd" /k exit
:: uncomment the next two lines to use pageant as the ssh authentication agent
:: SET SSH_AUTH_SOCK=/tmp/.ssh-pageant-auth-sock
:: call "%GIT_INSTALL_ROOT%/cmd/start-ssh-pageant.cmd"
:: you can add your plugins to the cmder path like so
:: set "PATH=%CMDER_ROOT%\vendor\whatever;%PATH%"
:: arguments in this batch are passed from init.bat, you can quickly parse them like so:
:: more usage can be seen by typing "cexec /?"
:: %ccall% "/customOption" "command/program"
@echo off

41
vendor/user_profile.ps1.default vendored Normal file
View File

@ -0,0 +1,41 @@
# Use this file to run your own startup commands
## Prompt Customization
<#
.SYNTAX
<PrePrompt><CMDER DEFAULT>
λ <PostPrompt> <repl input>
.EXAMPLE
<PrePrompt>N:\Documents\src\cmder [master]
λ <PostPrompt> |
#>
[ScriptBlock]$PrePrompt = {
}
# Replace the cmder prompt entirely with this.
# [ScriptBlock]$CmderPrompt = {}
[ScriptBlock]$PostPrompt = {
}
## <Continue to add your own>
# # Delete default powershell aliases that conflict with bash commands
# if (get-command git) {
# del -force alias:cat
# del -force alias:clear
# del -force alias:cp
# del -force alias:diff
# del -force alias:echo
# del -force alias:kill
# del -force alias:ls
# del -force alias:mv
# del -force alias:ps
# del -force alias:pwd
# del -force alias:rm
# del -force alias:sleep
# del -force alias:tee
# }

7
vendor/user_profile.sh.default vendored Normal file
View File

@ -0,0 +1,7 @@
# use this file to run your own startup commands for msys2 bash'
# To add a new vendor to the path, do something like:
# export PATH=${CMDER_ROOT}/vendor/whatever:${PATH}
# Uncomment this to have the ssh agent load with the first bash terminal
# . "${CMDER_ROOT}/vendor/lib/start-ssh-agent.sh"