Compare commits
1199 Commits
Author | SHA1 | Date | |
---|---|---|---|
04e4446c37 | |||
4b5e52014e | |||
8a71e7d51b | |||
668b9ad0fb | |||
11919ebc54 | |||
1754995aa0 | |||
c333fc0c67 | |||
f927fafb67 | |||
942d513a2a | |||
1bc35b6edd | |||
904d552801 | |||
1fa1919eaf | |||
2fa0130711 | |||
c068c219eb | |||
85051f0cb2 | |||
5eacfc90af | |||
2ebf68393f | |||
856d22e9f8 | |||
9151fb3469 | |||
d767c9b2e9 | |||
3943ba6cc8 | |||
cc9699c134 | |||
4264158ff2 | |||
0559060ceb | |||
ae391eb576 | |||
129c2971c7 | |||
3f88112d22 | |||
3fe76de9b5 | |||
e1a0d3850c | |||
1e34c885f3 | |||
1d330e7330 | |||
f468ddfe95 | |||
e7139bd474 | |||
6b72e84940 | |||
3901fef98b | |||
71536ddddf | |||
7995f34981 | |||
87f7ddf449 | |||
d94fe86b2a | |||
f58652fc28 | |||
e1caeb879a | |||
5b46f4fec7 | |||
b0f034a960 | |||
70632a2bb8 | |||
9d76f99dcf | |||
50bf15dd75 | |||
2de6f8232a | |||
8d4afb0570 | |||
67e2bf1a73 | |||
59269aa9f1 | |||
1c4a8b3ff5 | |||
a49921bb1b | |||
473e9566e7 | |||
f9cb2d6264 | |||
7856b3ab57 | |||
4dc3dc0dac | |||
abbab3f8b4 | |||
9aa26c46d0 | |||
7f682653e4 | |||
23edc8036f | |||
cb9d06f8a3 | |||
cc85a32e48 | |||
3b9e591ea0 | |||
adcef21034 | |||
2dc5463c31 | |||
4b8d669d01 | |||
a4c5b9d098 | |||
9c4e4d27c8 | |||
489078763d | |||
aa755278ec | |||
5c8e0f38fe | |||
5831fa4977 | |||
d7d0f1320b | |||
9f395805e1 | |||
e8d34e07a1 | |||
77df64b61b | |||
db44218d14 | |||
1b7d804701 | |||
c9ba643851 | |||
f301968ac3 | |||
f02bbfc5be | |||
50816c6bfc | |||
a0827fb4f5 | |||
28e42104ac | |||
2189fe9483 | |||
813fd6d82f | |||
1fbe2f7c2d | |||
e1c14f6c7e | |||
4992227614 | |||
7178b978ec | |||
ee01f26680 | |||
eede47bfad | |||
9d9519bdd4 | |||
f05c77e53c | |||
0b163d43ab | |||
d567229050 | |||
800a4a953f | |||
be5198c74b | |||
91d5a25fe9 | |||
760566acb9 | |||
a8bc932dbd | |||
6cd7817938 | |||
3d0e6b86e3 | |||
a027bdc5c2 | |||
0f490fdb61 | |||
795ab5746c | |||
771c53c7f1 | |||
805a5fc6e5 | |||
05c92f4cb0 | |||
d2d3d38782 | |||
15d66d394a | |||
280e40f077 | |||
8ee5e36fca | |||
dab1dd93f1 | |||
e2d817a497 | |||
d1b1012741 | |||
5c409dabc8 | |||
05db3658ad | |||
ef0de62d82 | |||
61e7028566 | |||
59bbdaddc7 | |||
7a9ad78e66 | |||
ec371bafff | |||
a617397aea | |||
74060922a4 | |||
e48dec15ac | |||
52389f21f0 | |||
d1e033c312 | |||
c89ef96347 | |||
4846eff298 | |||
5f25ea58a0 | |||
dceccffb72 | |||
0a4d3bcb77 | |||
913f93d24a | |||
70b5822fd5 | |||
f184714457 | |||
7beb490048 | |||
f2d8e31e2e | |||
6e05a9105f | |||
62bfbb4501 | |||
8bf40227e8 | |||
cf61b81f01 | |||
427937918e | |||
fe29497878 | |||
f3fcb8be4a | |||
36e13027f6 | |||
ef51ed2be2 | |||
6d313853f3 | |||
f46e8b81d8 | |||
864b85f254 | |||
ce02fb4a0e | |||
e345f187d8 | |||
fc00cc8be2 | |||
0dd2a665e2 | |||
6189f4f0e6 | |||
0616ff0a82 | |||
99452c8158 | |||
4098265a36 | |||
eab4454ac5 | |||
711fe2895e | |||
7cc1c77225 | |||
f0c4e85ac8 | |||
ea0145448c | |||
0281ee7dda | |||
f997da60e3 | |||
34df88aa76 | |||
c51c3c55a8 | |||
0e8c556e7d | |||
357e51acd1 | |||
66f9d582ec | |||
83a95d1412 | |||
a1417f6cf9 | |||
8ea4bbb11c | |||
f39aade500 | |||
004535e0bc | |||
6ae2f97f52 | |||
0326f2e3a8 | |||
9f065a63e8 | |||
b6316eb447 | |||
59dfa9c46f | |||
a4cb56b083 | |||
ad6979d25f | |||
addcefdd47 | |||
0637d6b3e9 | |||
f72c285d8b | |||
f24266014f | |||
c27cedc9b3 | |||
4c85e8b2f1 | |||
c75c02c9ce | |||
9de284123c | |||
93715461e6 | |||
fc6cf025be | |||
f809af1eec | |||
5b071d8d59 | |||
6d1e2d6e8b | |||
2ef8c967d2 | |||
b885b4e235 | |||
f717f5031b | |||
710cc3ecc3 | |||
0fc6b6571e | |||
48f50568b0 | |||
b8760e4d04 | |||
ae7209f254 | |||
9d4da63184 | |||
62a6311b6d | |||
b40510f3a0 | |||
e7a6e64473 | |||
f6c2657b23 | |||
91aabe75af | |||
946f929eaf | |||
8a870c093a | |||
bfe526604d | |||
79e505acf8 | |||
9a2e22cb6d | |||
b2add2b966 | |||
74202a8719 | |||
5305ebd4a6 | |||
4e22ad93f4 | |||
6730f864b1 | |||
56b04fc9ce | |||
55ff611095 | |||
aebe37bd28 | |||
413fb2f1ac | |||
73ad62eaa2 | |||
4fab4cc6e4 | |||
a41fad80d5 | |||
c9acb13d0b | |||
03d0f913ea | |||
a5c98d4fe9 | |||
9df8f1a92a | |||
c262934822 | |||
f1665ddd7d | |||
36f4ce0e3c | |||
59941f5dfa | |||
6d79ed5eb2 | |||
99a7445fcb | |||
d6b5fe8e1d | |||
11fb1b3a50 | |||
810a3da955 | |||
e8df3ef247 | |||
8d6ce3e4ac | |||
9793ca1ed9 | |||
d9b2c729f9 | |||
8fa351810a | |||
3752b95218 | |||
e0cb86d738 | |||
0ef76ee2d3 | |||
8a2ace9fc2 | |||
37c7b1dc02 | |||
ad755dc7f9 | |||
6027ac31c4 | |||
c34eb73555 | |||
f7df79a2d7 | |||
0fd2d9c8a8 | |||
e918b18ca7 | |||
0a7f1623f7 | |||
d02be816e2 | |||
8452f33407 | |||
a66b8b3035 | |||
ed60c14a44 | |||
cc1d459ea9 | |||
633d673bd7 | |||
a7e45ef64a | |||
10d63daf90 | |||
6c15598010 | |||
3608b5bc81 | |||
2d75a635de | |||
9cf3ba222e | |||
01d300f779 | |||
ba1027f6d5 | |||
b5d172cd32 | |||
f362ba8dba | |||
783cf68d10 | |||
c4fb7e6034 | |||
da0af1d96b | |||
9c9eac1875 | |||
ae0b7722ed | |||
bb2f89d044 | |||
24cad3ed5c | |||
ae7ddb7f86 | |||
e0b8ebc669 | |||
00b22ea79a | |||
eb8e470fe3 | |||
9088a5e2e6 | |||
25bc575e8a | |||
0ff3b391f1 | |||
11a78a8d64 | |||
2a9a4d2860 | |||
4874e78953 | |||
f4988480f6 | |||
44f5095047 | |||
2205461943 | |||
467b4d4ad9 | |||
ea6e18c834 | |||
4378741aad | |||
6458199812 | |||
d1adf16fa8 | |||
cda883bc39 | |||
b1ef763922 | |||
2cd7632720 | |||
92169c1295 | |||
e0aba11018 | |||
e8fe522a99 | |||
937874f03c | |||
9e085f5938 | |||
829a65f552 | |||
93b69798f4 | |||
3f6aa3b348 | |||
a1785415fd | |||
794ae2ad60 | |||
28c416a15c | |||
70aa573111 | |||
4cacd2fdc8 | |||
80f76ad956 | |||
906bb5d357 | |||
29d784b2b1 | |||
fc90722faa | |||
167c49ee6d | |||
0ed10e5e89 | |||
cd50db3a7f | |||
37a223b449 | |||
334838c079 | |||
0c3d89925e | |||
020661af95 | |||
79261d4d27 | |||
7326a3cfc5 | |||
fdcbd6df87 | |||
0c41d5f5d4 | |||
40c58417b2 | |||
97a41ddd99 | |||
954937cf97 | |||
2c620d1d67 | |||
5e7a7029d1 | |||
f1c1354c00 | |||
0f12de345b | |||
c332ab1a34 | |||
4403edb110 | |||
00bc5439fd | |||
da5f1bc4db | |||
52f5ad62c3 | |||
250ae06e7a | |||
bc7984769c | |||
130dc750be | |||
c6edbc0068 | |||
c0eeec6608 | |||
ee25dbaab6 | |||
e3ad9c3953 | |||
31df5c3e5e | |||
e9f20aea91 | |||
29aa75e158 | |||
8781779636 | |||
31c019b7e4 | |||
4d86559841 | |||
a5dcf9c260 | |||
a999d17f71 | |||
04c784cb16 | |||
a2ce74f981 | |||
b91bb84f3d | |||
35ace106c8 | |||
1861983469 | |||
1f5ea5e596 | |||
2936abe2a5 | |||
c9bc1f6b83 | |||
be5ec648c4 | |||
ab3639540f | |||
2517f55f15 | |||
1af12666e4 | |||
93f8718489 | |||
1071221468 | |||
a92bb1947f | |||
251968b4c6 | |||
638d82e989 | |||
0e37a4c2f9 | |||
ca2550b70e | |||
492fc284f2 | |||
ec06f3e39b | |||
850e4ec045 | |||
fe3d2034ef | |||
180e72a6aa | |||
93cf865071 | |||
b41aac982c | |||
8df688bada | |||
84917159ec | |||
750560851f | |||
9b29668250 | |||
a857d8419c | |||
0cf1c5e2eb | |||
ddec3e8425 | |||
2428e8529f | |||
3eb82d4095 | |||
589b48d06e | |||
67f35bc05d | |||
9724151f06 | |||
c04cc6dc7f | |||
3ee244e4c1 | |||
44bc089ee4 | |||
6ab4599a4d | |||
dac4b27e28 | |||
661f59d0fb | |||
5a6f873d2b | |||
788d4e0caa | |||
f1fbd98093 | |||
74fcb5b62b | |||
60279fea04 | |||
7877d417f8 | |||
44a8bf5802 | |||
b70a03cde0 | |||
8cf51e454a | |||
f1b1ac0ec1 | |||
06b0c0d3c2 | |||
f1a9721256 | |||
46c8099317 | |||
f44c68273b | |||
7f69f15637 | |||
3736508b2c | |||
4575ac3209 | |||
035f209bc4 | |||
e4651cf7b4 | |||
19a2fd11e3 | |||
feee4eaed2 | |||
b310a2c47c | |||
22afc40a08 | |||
c499456f97 | |||
34468ef2fd | |||
5cb8021864 | |||
468dba474e | |||
db42252ef2 | |||
57b328b209 | |||
05836e761e | |||
e8b33aa45b | |||
377d97e56a | |||
3a44bc809d | |||
45e5600249 | |||
ff595e62b1 | |||
a85a208b20 | |||
ecda3acfdf | |||
5477b7812d | |||
81951a4a14 | |||
0280593d4c | |||
f8e859f844 | |||
af4c1fddbb | |||
b58b3b4547 | |||
9184f8e2bf | |||
1e0e2193e0 | |||
38fd3468fe | |||
ebd977778b | |||
72dd8376cd | |||
b61752f89e | |||
8f59d529f4 | |||
711c436f04 | |||
ea531cdd44 | |||
73c21d1a59 | |||
a97ce1f950 | |||
4510abb3c8 | |||
6d132c2665 | |||
543c7ca6e9 | |||
efc978f6f8 | |||
5def1c584a | |||
865e443fcd | |||
893207453d | |||
5e5e0ece73 | |||
834f031442 | |||
0bd847e695 | |||
efe64ee6fd | |||
5f9f3560c8 | |||
9b9bb13f6a | |||
52eea5fe9f | |||
ab3f0b76fb | |||
528bbea7f5 | |||
f20eca01ac | |||
26d8d58e77 | |||
cf134604bb | |||
67b374ad37 | |||
d592f80364 | |||
3e40c80331 | |||
ac2082d56d | |||
a813e359c5 | |||
345562dbd0 | |||
13de4924ca | |||
f39b921121 | |||
43d5a7b833 | |||
b424012a08 | |||
192c2f4dd1 | |||
4622aa87e4 | |||
0b2c9bf005 | |||
081624d88e | |||
280bbfff1f | |||
a93fff6798 | |||
8abfa9d413 | |||
98a64b71b2 | |||
f2b26352b4 | |||
63128ed52f | |||
036efc2fb8 | |||
2582891307 | |||
ec42046297 | |||
522656845f | |||
6b22a5c583 | |||
e75958b881 | |||
8ec252276f | |||
16bf572cdf | |||
7bd25e95e1 | |||
cc12b848ac | |||
20d55c1469 | |||
06e6c63b7f | |||
89499f2a60 | |||
95e5169476 | |||
760f4e579e | |||
6d8f7a290a | |||
2a4e9d8301 | |||
961f38a399 | |||
5a48e568a8 | |||
524fce25ab | |||
46bde1af8b | |||
9a47bce6ac | |||
0a3be464be | |||
b2723d6f6a | |||
4f2ced57df | |||
88169b8721 | |||
f6db922732 | |||
e822d55aa5 | |||
ccb6cb80e5 | |||
e56ed810a0 | |||
7e8d67caa8 | |||
4e4f050374 | |||
51e75d4bb5 | |||
f4389fc552 | |||
8101923242 | |||
7e1bc4297a | |||
0f30329e38 | |||
25820ae4d4 | |||
528a69dab9 | |||
0c9e0e2f8c | |||
20eb7b8e81 | |||
ab02c4ce46 | |||
f9f06a5595 | |||
8ac540ebb6 | |||
fcab51da2b | |||
dc492c836f | |||
1eb03dd1b8 | |||
3163d6d1c3 | |||
5c7f4943ad | |||
378ebff566 | |||
572a94ca3a | |||
22aa59bd83 | |||
eb6a332da2 | |||
dd614642b2 | |||
036cf09360 | |||
7203671fc9 | |||
787ac3773c | |||
b16aa7a29e | |||
d8e8fc8adb | |||
0efeaa91fa | |||
8c0817941e | |||
e17b04cbb9 | |||
e904ebce72 | |||
a226019d5a | |||
d04cc1f04e | |||
2e77513674 | |||
1640e9c01d | |||
ddbfd1da18 | |||
bc7c6e97b3 | |||
45f05ed8fa | |||
72b676b939 | |||
637b0fd3ac | |||
ce62db6d33 | |||
f3ed7b6d1b | |||
57e5ae1719 | |||
a5bdecca77 | |||
5be25f29f8 | |||
cb78f0486a | |||
f5ac81daa0 | |||
da0aea96f8 | |||
3a11d45552 | |||
c5a6afbf5b | |||
a607f0f2d5 | |||
66da1716bc | |||
bfaa194468 | |||
c3956e307a | |||
3344268c24 | |||
8ff459b309 | |||
103d0a6cea | |||
8dc9bc9ae1 | |||
bb4ed4af51 | |||
ae2fda72fd | |||
bda09bc274 | |||
749ce17dbe | |||
8cf59d1cbf | |||
1d36ba4ed4 | |||
564ef5220e | |||
f84da84e15 | |||
86544c9188 | |||
4aec21ce19 | |||
0be94725bd | |||
9dce9d0f62 | |||
669e997602 | |||
0730c6e32b | |||
0d2e16c653 | |||
35eab7a51a | |||
2cfa7c45fc | |||
ab0de6d157 | |||
bd9cff2691 | |||
9b121f1c0a | |||
cfe22c8ef0 | |||
3ef53f64d4 | |||
4a10e0b2eb | |||
7b191d3caf | |||
277972a7f2 | |||
b1aa687d4f | |||
ec4c815264 | |||
12b9af99c5 | |||
d58c6c2070 | |||
06c7cc969c | |||
44b4b7a195 | |||
9869f9a372 | |||
85c4a5b4af | |||
3f96336610 | |||
a8cae77395 | |||
823eeaf082 | |||
823e6fee6e | |||
34f8c43d98 | |||
352a16f84d | |||
541fc16daf | |||
75e6644d2a | |||
7d40ea4609 | |||
451fb46ce1 | |||
70788dc1e5 | |||
c25ff75187 | |||
059a31618b | |||
e69e7f9b82 | |||
e93231114f | |||
08550751da | |||
49da3745bc | |||
e4fb0d694b | |||
798da058cc | |||
d91438de47 | |||
08e1244fe5 | |||
02f4a9dfe5 | |||
e80ad2356f | |||
21b1f00981 | |||
34bb62409a | |||
b901a4a569 | |||
39f47870a3 | |||
f4ee915678 | |||
192056e19b | |||
f6c2d9c31e | |||
b3200efa7e | |||
b57e146e7a | |||
0f99f66b42 | |||
4655888690 | |||
431c6300e5 | |||
e3cdf43afc | |||
6c016788d4 | |||
0b2d7bd655 | |||
27f51f48a4 | |||
34554d6b08 | |||
4df1d744d3 | |||
40b9ca4e28 | |||
19d5a87224 | |||
44aadccbec | |||
83f411384c | |||
861f99d64b | |||
6af44441fe | |||
0ce1db97d0 | |||
0c39d0a799 | |||
add82a247b | |||
bf6dae4a24 | |||
7d31eeaa5a | |||
daa94c5462 | |||
36403df91e | |||
a843e85c8b | |||
9a3a8f23d0 | |||
99f51b0fc0 | |||
4f3fcae9d9 | |||
a06d4e93ec | |||
13ea026dc9 | |||
dc8e572ca5 | |||
b2262522c9 | |||
9d0729fe42 | |||
a1e47ceaca | |||
2a18ba084c | |||
12e3761017 | |||
b8890ed297 | |||
063f30c193 | |||
bc72f20a2d | |||
78a9711447 | |||
55d9b25f57 | |||
7294092618 | |||
959073ac5c | |||
e746101ed2 | |||
65bf25f1d0 | |||
94e7c24b72 | |||
d6569192fc | |||
7d04ded1c2 | |||
5c3f46fd88 | |||
502129d4f9 | |||
b36b8a4cb3 | |||
3965852c26 | |||
93d2c427ad | |||
624deec2f0 | |||
c817df2032 | |||
236aefe8c6 | |||
2f3f1d474a | |||
cb4d95e7a3 | |||
1dadade661 | |||
2bc17c4ff2 | |||
ae473ecea6 | |||
3aeca3c972 | |||
57a28f118d | |||
018bf45df4 | |||
f8359fc3f7 | |||
249f7b9baf | |||
eaf7048ed7 | |||
f4321bbc33 | |||
96736feecc | |||
dc9e385365 | |||
a85cd81f00 | |||
1662678ebf | |||
9462315789 | |||
864f778099 | |||
bcf8527f74 | |||
72ab0f064f | |||
91f5c5379a | |||
19bad7dfa9 | |||
afb8f52516 | |||
6543c204b7 | |||
0438ce5763 | |||
471369f73b | |||
66d36fdc1c | |||
17247f2065 | |||
63f3f8020f | |||
b37001b591 | |||
60880362a9 | |||
91651fc98b | |||
997e799138 | |||
ff2e09849e | |||
8237b1010c | |||
cf311fb1c2 | |||
78b9c97fa9 | |||
a49c1b3f3d | |||
fff6e4506c | |||
a71c6a50ad | |||
5e703796c9 | |||
b88a01822f | |||
3bf07c088d | |||
724930d69d | |||
badb027c24 | |||
145a1b144b | |||
29c5e83975 | |||
1c02c55c2f | |||
74fc14eadf | |||
0729c06c20 | |||
6da96fb7ec | |||
ba610f5f7b | |||
7930c9bfe5 | |||
bafaf7cba4 | |||
3c14d19a27 | |||
13941a44ec | |||
ee4f85de85 | |||
9d6e5c12a2 | |||
da27f9be9f | |||
124565f36a | |||
46d468aea0 | |||
dc27c53739 | |||
7479d620b1 | |||
a8d32611a9 | |||
b6042a7ca1 | |||
dcf22af3c8 | |||
b58ff9bb53 | |||
68d9425c89 | |||
a95cd140ef | |||
e90966c5c2 | |||
e104f20c5d | |||
6883ba3b84 | |||
1c1c08bb68 | |||
a5eb4d7b4f | |||
d88f1b0a97 | |||
8d74184d30 | |||
3ea6d51ba4 | |||
22d27afed5 | |||
e9a78a30d1 | |||
e92f7fbb55 | |||
7ca2f5503a | |||
a34e17f2bd | |||
1f9e743ef2 | |||
f687281be0 | |||
4c270699a1 | |||
b45e3adc67 | |||
8077c1a612 | |||
d9fcf06e0f | |||
815b99b98b | |||
bcb60f8f59 | |||
0877a6d995 | |||
71f5b446da | |||
512787f391 | |||
262d92265e | |||
409b92aac2 | |||
aea1a977bf | |||
a7237370e3 | |||
25005930ba | |||
74d79ea628 | |||
89c014bb05 | |||
c19237085d | |||
9c4e77b498 | |||
c2cf56cc48 | |||
6e2d88d466 | |||
cd3efdf382 | |||
53c7ec5886 | |||
e63368fe96 | |||
aa2eaa6886 | |||
bee82d00e8 | |||
02366fdc7e | |||
399999d7f7 | |||
8eea2baaa5 | |||
4d3950174f | |||
24a110ddb7 | |||
1dd0e600ac | |||
e49b978b9a | |||
9182c89a14 | |||
00622254a7 | |||
9977c0563d | |||
b604bf0b6c | |||
3b0a51d7b8 | |||
d8444dae97 | |||
0a5d1ac156 | |||
018cc9ceda | |||
ad0f8fe049 | |||
7f4a4d34d6 | |||
963a5a8be6 | |||
f04a4e4846 | |||
50ed66894f | |||
2bb5ce0986 | |||
3b7a24b20a | |||
81d83d4c6d | |||
61849dc7fd | |||
9f2c0e4001 | |||
4195b5b0ed | |||
02f1ff12a6 | |||
7447e00aec | |||
84202729fb | |||
70b0666f11 | |||
14f3361429 | |||
d7f0407300 | |||
ba99f5b66a | |||
a0e0adae8b | |||
46d5936806 | |||
104033e58b | |||
4c522aa0c4 | |||
d64f0e681e | |||
2b292f98de | |||
0b43758a34 | |||
e6d4609bf4 | |||
0de26571aa | |||
5597aa6038 | |||
425dc854ac | |||
a78186f502 | |||
60aa0cee13 | |||
7750216d1a | |||
eb73f6f772 | |||
db909451c9 | |||
b349b19869 | |||
e0841eacc1 | |||
44e0a040bd | |||
5feccb3c7c | |||
abd7db99b6 | |||
66c6d5bbb3 | |||
af586d5410 | |||
c8adf424e2 | |||
e36db3eb3d | |||
27c571636d | |||
d144cd0fc2 | |||
bb312ad74b | |||
df7beff2ef | |||
b7bfe72303 | |||
490fae770c | |||
a6817faae6 | |||
a8450eb1d3 | |||
355df7a48a | |||
5354b5f80f | |||
d095d6afd6 | |||
832c1991e4 | |||
19672aafff | |||
6b10771312 | |||
13fd41eb82 | |||
07fb26c4a5 | |||
13c474b768 | |||
f2641e4cd2 | |||
6a0ea28d22 | |||
04c7bb7da8 | |||
317834316a | |||
4e90303511 | |||
0379dc1d0d | |||
393d7d19c5 | |||
aa87425910 | |||
688c2f7721 | |||
1b711f1f29 | |||
65014b1ce4 | |||
af1a4c9061 | |||
5f83cb3c64 | |||
9a3eab9bf8 | |||
1dddbcff05 | |||
924ab12aeb | |||
6a474dd624 | |||
14a6e5953c | |||
9c0ad9fd81 | |||
84d44b18f2 | |||
a542f4e20c | |||
e5611af7be | |||
999b5af29a | |||
87210ae7ca | |||
75deb4f945 | |||
6a080a1284 | |||
d014d785b0 | |||
346680b52e | |||
c19412045c | |||
2b047e8683 | |||
010049a849 | |||
91c0d310f2 | |||
43af717d44 | |||
7a37d37a4e | |||
a07062d10d | |||
2d812f1d02 | |||
49cc35bccf | |||
67de97a492 | |||
7a0a1adc02 | |||
76b2ed510d | |||
7ca9d8e9d6 | |||
31c8c620c7 | |||
61e795c02d | |||
f652d301e7 | |||
a286e52a44 | |||
c49c27fb88 | |||
e212ee36a2 | |||
fc7f1ca3dc | |||
537c658eb4 | |||
4e9882eea4 | |||
d4339ae526 | |||
055a974257 | |||
05fb4368cc | |||
1bf5503bea | |||
b47d04f75c | |||
6978bb7417 | |||
7eb7255741 | |||
6c6268e968 | |||
1e7f15100f | |||
fbccc6b790 | |||
2ccc06e639 | |||
182629d59a | |||
fc963b1342 | |||
24b1bb93c0 | |||
528d0ce734 | |||
5068188059 | |||
5a1f81655f | |||
07ed31c0a1 | |||
f9d0050c67 | |||
86dd077b9d | |||
d5a1ce628c | |||
b86f3fbaff | |||
160fbad621 | |||
68743a8742 | |||
73f9400aa8 | |||
3ca847fc42 | |||
0de643be42 | |||
05c113efee | |||
7d2197086e | |||
964f18c66c | |||
01667a5bf0 | |||
3085fca9e0 | |||
06c6e5fdb6 | |||
0f4292aa08 | |||
72876f41e2 | |||
722f8b7745 | |||
df768f3c5e | |||
8dbbb902d9 | |||
d6eec2f3a5 | |||
32c1d4028a | |||
c904676cf4 | |||
997bd5c24e | |||
a74fdd2b68 | |||
8a5c58e626 | |||
bf75f70181 | |||
8fa151d1db | |||
33d6f11e87 | |||
434d6f2996 | |||
59e4a1684b | |||
361a8eae66 | |||
727d6a6abd | |||
f7a18d4b6e | |||
9e7f860e2d | |||
6cf62dcdc7 | |||
79f8560a24 | |||
4245608e6d | |||
aedd078050 | |||
a959409c0f | |||
0a6b79b9ed | |||
85ce629dde | |||
78ea063fb0 | |||
a99d27a7e1 | |||
289126f870 | |||
e1eed7a0f1 | |||
c3042909e0 | |||
64d981e470 | |||
3fab0c122c | |||
9ace64f6dc | |||
95bbb8edbb | |||
842394300f | |||
26e6d80364 | |||
728e83a85b | |||
95f6096a45 | |||
fab895bd9b | |||
b17db6930a | |||
d97bc4ca69 | |||
914ddb8207 | |||
7962edac56 | |||
97cae2bdc7 | |||
6bb07d9b19 | |||
fccba9269d | |||
07b426355e | |||
261b8bfce3 | |||
c055ce1c13 | |||
fe45b186e0 | |||
788b5262b4 | |||
73e1eb2a8b | |||
fabcd468a7 | |||
df7a662965 | |||
e7243efce2 | |||
9c7a037948 | |||
4dc1249881 | |||
5b7c008202 | |||
724b9a25da | |||
2c0c6ed416 | |||
c77641cf03 | |||
378014d5d4 | |||
1389fe0c4d | |||
9eb9620966 | |||
add52c0ee6 | |||
744522b97b | |||
6879a94c10 | |||
41836e669b | |||
4a4e48e04c | |||
5f68e4e987 | |||
bdd0f38d59 | |||
6280416aed | |||
567889e69f | |||
9a1d49bfc3 | |||
30dbfa6144 | |||
73f5cbdc7b | |||
d0909f27e1 | |||
b88ea50aef | |||
46bad57ef8 | |||
3595d3e7fc | |||
05c6f1c9cc | |||
182d0c15a3 | |||
867910ac9e | |||
630ac0c571 | |||
105e381e66 | |||
854cadb185 | |||
4bfdf04d59 | |||
c9550490f5 | |||
85804d729e | |||
4154cdf204 | |||
76e14cd268 | |||
8601b0f940 | |||
ce2a311c81 | |||
191316282a | |||
fd9c8a74b1 | |||
519b9cabbb | |||
9b25544c05 | |||
a9b06459da | |||
5eff672a4b | |||
8566b6f6ca | |||
1af65edaec | |||
e6d2394d48 | |||
6d215f58c6 | |||
7e4912514f | |||
86edf3cbb0 | |||
a3e2d7546d | |||
b9362b0a3d | |||
1046198648 | |||
908773622d | |||
deb23a21a1 | |||
1ec507c1d0 | |||
1b159df7c2 | |||
2e582b9db9 | |||
f9b2c768b8 | |||
4ce55d1019 | |||
7f43014b68 | |||
cf15dcffc7 | |||
10d0431242 | |||
eb5ab51573 | |||
87bc4178e6 | |||
85aaa09d97 | |||
3a2d986c36 | |||
37626e7687 | |||
b018f2cc50 | |||
ffd61db30e | |||
53e03076da | |||
6e3b83460c | |||
3657795b35 | |||
df37981707 | |||
669bc8bfa6 | |||
c2823af661 | |||
66a75ce0dc | |||
15013369cb | |||
50c5742794 | |||
a57c11e171 | |||
417051f496 | |||
0f6441a7ee | |||
5e07567a72 | |||
0f68e48a7b | |||
46fed27096 | |||
80bafd165f | |||
1d47a98329 | |||
07180effac | |||
1e61b858c3 | |||
7ebfffc9da | |||
719d598048 | |||
5e56fbcf38 | |||
5a1aa7e25b | |||
215ba574aa | |||
45cdfc33f2 | |||
0ab9b74013 | |||
f71a1f3903 | |||
fedcee011d | |||
1526bb631f | |||
27240995f4 | |||
b8f7bde353 | |||
0051614e4b | |||
d6b54eec24 | |||
052ab118e2 | |||
c46eb6a525 | |||
48259b87ac | |||
2a26026749 | |||
d68816bd11 | |||
419c785db5 | |||
c15e3f4ebd | |||
1f75f85b7c | |||
4203a8a4ea | |||
cf8a992e37 | |||
cec7fa3398 | |||
83c685cdc7 | |||
24fd027cda | |||
df259195ab | |||
20b8b09419 | |||
7bc71010c2 | |||
e5eadc766f | |||
f638e93c21 | |||
6608e16c3b | |||
d979140bb5 | |||
568e2cfcdd | |||
a9ee246241 | |||
d4ee65405d | |||
3c1aa08313 | |||
36291ab789 | |||
73c8c0c233 | |||
61a9b83c42 | |||
5bcddd6b44 | |||
32cd7dcb58 | |||
b40b0067c0 | |||
4edec1675a | |||
4ed35fe110 | |||
583109b695 | |||
f783cd8add | |||
6952d602d2 | |||
eec3fd5578 | |||
7c907a5174 | |||
30f7847852 | |||
801a4ac901 | |||
143e659187 | |||
7fd43b939b | |||
5ce077a74a | |||
fc85915b2c | |||
63d35a9760 | |||
373a58e1e6 | |||
3e06fcbf07 | |||
ea1edda966 | |||
2857e4d6bc | |||
ecbf7a01d1 | |||
dc9263a11c | |||
8659b9c6ed | |||
316a42b8f9 | |||
676297c0d4 | |||
3aff065210 | |||
f6a0447a9a | |||
70b0615b34 | |||
2a1a736ceb | |||
40fd96b135 | |||
271b3ea876 | |||
c4873c6e58 | |||
29d1378d7a | |||
c15e29ecb3 | |||
c38f6b3a89 | |||
99ea376713 | |||
2051078cc6 | |||
6c5034164c | |||
696a0d7622 | |||
a5968d3d49 | |||
1cea2c3278 | |||
187156487e | |||
0311e129ca |
5
.gitattributes
vendored
@ -1,2 +1,7 @@
|
||||
# Auto detect text files and perform LF normalization
|
||||
* text=auto
|
||||
*.cmd text eol=crlf
|
||||
*.bat text eol=crlf
|
||||
*.ps1 text eol=crlf
|
||||
*.md text eol=lf
|
||||
*.sh text eol=lf
|
||||
|
162
.github/ISSUE_TEMPLATE/bug-report.yml
vendored
Normal file
@ -0,0 +1,162 @@
|
||||
name: "🐞 Bug report (encountered problems/errors)"
|
||||
description: Something is not working as it should
|
||||
title: "[Bug] "
|
||||
labels: [🐞 Bug report]
|
||||
|
||||
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.
|
||||
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/repos/vladimir-kotikov/clink-completions)**, which provide 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 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
@ -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"
|
84
.github/ISSUE_TEMPLATE/feature-request.yml
vendored
Normal file
@ -0,0 +1,84 @@
|
||||
name: "⭐ Feature request (request for new functionality)"
|
||||
description: Help make Cmder even better
|
||||
title: "[Feature request] "
|
||||
labels: [⭐ 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/repos/vladimir-kotikov/clink-completions)**, which provide 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.
|
44
.github/ISSUE_TEMPLATE/question.yml
vendored
Normal file
@ -0,0 +1,44 @@
|
||||
name: "❓ Question"
|
||||
description: Something is unclear or needs to be discussed
|
||||
labels: [❓ 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 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!)
|
||||
|
||||
- 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
|
19
.github/stale.yml
vendored
Normal 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).
|
74
.github/workflows/build.yml
vendored
Normal file
@ -0,0 +1,74 @@
|
||||
#---------------------------------#
|
||||
# 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" ]
|
||||
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
|
38
.github/workflows/tests.yml
vendored
Normal file
@ -0,0 +1,38 @@
|
||||
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: Testing Clink Shell
|
||||
run: |
|
||||
cmd /c vendor\init.bat
|
||||
- name: Testing PowerShell
|
||||
run: |
|
||||
PowerShell.exe -ExecutionPolicy Bypass -NoLogo -NoProfile -Command "Invoke-Expression '. ''vendor\profile.ps1'''"
|
||||
- name: Testing Bash
|
||||
run: |
|
||||
bash vendor/cmder.sh
|
62
.github/workflows/vendor.yml
vendored
Normal file
@ -0,0 +1,62 @@
|
||||
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
|
||||
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) {
|
||||
$listUpdated += "$($s.name) v$($s.version), "
|
||||
$updateMessage += "| **$($s.name)** | $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@v4
|
||||
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 vendored dependencies (${{ env.LIST_UPDATED }})'
|
||||
branch: update-vendor
|
||||
base: master
|
29
.gitignore
vendored
@ -1,12 +1,31 @@
|
||||
|
||||
## 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
|
||||
.github_changelog_generator
|
||||
launcher/.vs
|
||||
launcher/src/version.rc2
|
||||
.vs/*
|
||||
|
1179
CHANGELOG.md
Normal file
@ -7,11 +7,11 @@ 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/)
|
||||
|
14
Cmder.bat
@ -1,3 +1,15 @@
|
||||
@echo off
|
||||
SET CMDER_ROOT=%~dp0
|
||||
start %~dp0/vendor/conemu-maximus5/ConEmu.exe /Icon "%CMDER_ROOT%\icons\cmder.ico" /Title Cmder /LoadCfgFile "%CMDER_ROOT%\config\ConEmu.xml"
|
||||
|
||||
:: Remove Trailing '\'
|
||||
@if "%CMDER_ROOT:~-1%" == "\" SET CMDER_ROOT=%CMDER_ROOT:~0,-1%
|
||||
|
||||
if not exist "%CMDER_ROOT%\config\user_ConEmu.xml" (
|
||||
copy "%CMDER_ROOT%\vendor\ConEmu.xml.default" "%CMDER_ROOT%\config\user_ConEmu.xml"
|
||||
)
|
||||
|
||||
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\user_ConEmu.xml"
|
||||
)
|
||||
|
21
LICENSE
Normal file
@ -0,0 +1,21 @@
|
||||
MIT License
|
||||
|
||||
Copyright (c) 2017 Samuel Vasko
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
380
README.md
@ -1,29 +1,70 @@
|
||||
# Cmder
|
||||
|
||||
[](https://gitter.im/bliker/cmder?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)
|
||||
[](https://gitter.im/cmderdev/cmder?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) [](https://ci.appveyor.com/project/MartiUK/cmder) [](https://github.com/cmderdev/cmder/actions/workflows/build.yml)
|
||||
|
||||
Latest release is **[v1.1.4.1](https://github.com/bliker/cmder/releases/tag/v1.1.4.1)**
|
||||
|
||||
Cmder is a **software package** created out of pure frustration over absence of usable console emulator on Windows. It is based on [ConEmu](https://code.google.com/p/conemu-maximus5/) with *major* config overhaul. Monokai color scheme, amazing [clink](https://github.com/mridgers/clink) and 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.
|
||||
|
||||

|
||||
|
||||
## Why use it
|
||||
|
||||
The main advantage of Cmder is portability. It is designed to be totally self-contained with no external dependencies, that is makes it great for **USB Sticks** or **Dropbox**. 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
|
||||
|
||||
1. Download the latest release
|
||||
1. Extract
|
||||
1. (optional) Place your own executable files into the `bin` folder to be injected into your PATH.
|
||||
1. Run cmder
|
||||
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`
|
||||
|
||||
*(There will be a version with installer)*
|
||||
### 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 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.
|
||||
|
||||
## Integration
|
||||
```
|
||||
c:\users\[username]\cmder_config
|
||||
├───bin
|
||||
├───config
|
||||
│ └───profile.d
|
||||
└───opt
|
||||
```
|
||||
|
||||
So you've experimented with cmder a little and want to give it a shot in a more permanent home;
|
||||
- (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` |
|
||||
| `/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
|
||||
|
||||
So you've experimented with Cmder a little and want to give it a shot in a more permanent home;
|
||||
|
||||
### Shortcut to open Cmder in a chosen folder
|
||||
|
||||
@ -38,43 +79,314 @@ In a file explorer window right click in or on a directory to see "Cmder Here" i
|
||||
|
||||
### Tab manipulation
|
||||
|
||||
* `Ctrl + t` : new tab dialog (maybe you want to open cmd as admin?)
|
||||
* `Ctrl + w` : close tab
|
||||
* `Ctrl + d` : close tab (if pressed on empty command)
|
||||
* `Shift + alt + number` : fast new tab: `1` - CMD, `2` - Powershell `*` - More to come
|
||||
* `Alt + enter`: Fullscreen
|
||||
* <kbd>Ctrl</kbd> + <kbd>T</kbd> : New tab dialog (maybe you want to open cmd as admin?)
|
||||
* <kbd>Ctrl</kbd> + <kbd>W</kbd> : Close tab
|
||||
* <kbd>Ctrl</kbd> + <kbd>D</kbd> : Close tab (if pressed on empty command)
|
||||
* <kbd>Shift</kbd> + <kbd>Alt</kbd> + <kbd>#Number</kbd> : Fast new tab: <kbd>1</kbd> - CMD, <kbd>2</kbd> - PowerShell
|
||||
* <kbd>Ctrl</kbd> + <kbd>Tab</kbd> : Switch to next tab
|
||||
* <kbd>Ctrl</kbd> + <kbd>Shift</kbd> + <kbd>Tab</kbd> : Switch to previous tab
|
||||
* <kbd>Ctrl</kbd> + <kbd>#Number</kbd> : Switch to tab #Number
|
||||
* <kbd>Alt</kbd> + <kbd>Enter</kbd>: Fullscreen
|
||||
|
||||
### Shell
|
||||
|
||||
* `Shift + Up` : Traverse up in directory structure (lovely feature!)
|
||||
* `End, Home, Ctrl` : Traversing text with as usual on Windows
|
||||
* `Ctrl + r` : History search
|
||||
* `Shift + mouse` : Select and copy text from buffer
|
||||
* <kbd>Ctrl</kbd> + <kbd>Alt</kbd> + <kbd>U</kbd> : Traverse up in directory structure (lovely feature!)
|
||||
* <kbd>End</kbd>, <kbd>Home</kbd>, <kbd>Ctrl</kbd> : Traversing text with as usual on Windows
|
||||
* <kbd>Ctrl</kbd> + <kbd>R</kbd> : History search
|
||||
* <kbd>Shift</kbd> + Mouse : Select and copy text from buffer
|
||||
|
||||
(Some shortcuts are not yet documented, thought they exist, please add them here)
|
||||
_(Some shortcuts are not yet documented, though they exist - please document them here)_
|
||||
|
||||
## Features
|
||||
|
||||
### Access to multiple shells in one window using tabs
|
||||
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, 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.
|
||||
|
||||
⚠ *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.
|
||||
|
||||
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:
|
||||
|
||||
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
|
||||
```
|
||||
|
||||
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:
|
||||
* `1. {cmd::Cmder as Admin}`
|
||||
* `2. {cmd::Cmder}`
|
||||
1. Add command line arguments where specified below:
|
||||
|
||||
*Note: Pay attention to the quotes!*
|
||||
|
||||
```
|
||||
cmd /s /k ""%ConEmuDir%\..\init.bat" [ADD ARGS HERE]"
|
||||
```
|
||||
|
||||
##### Command Line Arguments for `init.bat`
|
||||
|
||||
| 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 |
|
||||
| `/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:
|
||||
|
||||
| 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` |
|
||||
|
||||
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.
|
||||
|
||||
| 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` |
|
||||
|
||||
#### 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
|
||||
You can define simple aliases with command `alias name=command`.
|
||||
#### 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`.
|
||||
|
||||
For example there is one defined for you `alias e.=explorer .`
|
||||
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`
|
||||
|
||||
All aliases will be saved in `/config/aliases` 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`. 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`
|
||||
|
||||
#### 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`. 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`
|
||||
|
||||
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`. 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`
|
||||
|
||||
### SSH Agent
|
||||
|
||||
To start SSH agent simply call `agent`, which is in the `bin` folder.
|
||||
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, uncomment the line in `/vendor/init.bat`so it says `@call "%CMDER_ROOT%/bin/agent.cmd"`.
|
||||
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).
|
||||
|
||||
## Todo
|
||||
### Vendored Git
|
||||
|
||||
1. Complete PowerShell compatibility.
|
||||
2. Workaround git.exe overload after msysgit download (Granted this is an upstream issue).
|
||||
3. Redo Build/Pack scripts or remove them altogether.
|
||||
4. Git Bash
|
||||
5. Check for clink and git before injecting them
|
||||
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%` 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, WSL, or Git for Windows SDK with Cmder.
|
||||
|
||||
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.
|
||||
|
||||
**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.
|
||||
|
||||
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`
|
||||
|
||||
Uncomment and edit the below line 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 [Hyper](https://github.com/zeit/hyper), [Microsoft VS Code](https://code.visualstudio.com/), 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.
|
||||
|
||||
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`.
|
||||
|
||||
* 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.
|
||||
|
||||
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:
|
||||
|
||||
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.
|
||||
|
||||
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.
|
||||
|
||||
## Current development builds
|
||||
|
||||
You can download builds of the current development branch by going to AppVeyor via the following link:
|
||||
|
||||
[](https://ci.appveyor.com/project/MartiUK/cmder/branch/master/artifacts)
|
||||
|
||||
## License
|
||||
|
||||
@ -82,7 +394,7 @@ All software included is bundled with own license
|
||||
|
||||
The MIT License (MIT)
|
||||
|
||||
Copyright (c) 2015 Samuel Vasko
|
||||
Copyright (c) 2016 Samuel Vasko
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
|
60
appveyor.yml
Normal file
@ -0,0 +1,60 @@
|
||||
#---------------------------------#
|
||||
# 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 2022
|
||||
|
||||
#---------------------------------#
|
||||
# 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
|
@ -1,46 +0,0 @@
|
||||
@ECHO OFF
|
||||
|
||||
REM Set default sock file
|
||||
SET SSH_AUTH_SOCK=/tmp/ssh-agent.sock
|
||||
|
||||
REM Check socket is available
|
||||
IF NOT EXIST "%TMP%\ssh-agent.sock" GOTO:RUNAGENT
|
||||
|
||||
REM Check if an ssh-agent is running
|
||||
FOR /f "tokens=*" %%I IN ('ps ^| grep ssh-agent ^| sed "s/^ *\([0-9]\+\) .*/\1/"') DO SET VAR=%%I
|
||||
IF "%VAR%" == "" GOTO:RUNAGENT
|
||||
|
||||
REM Check if socket file is valid
|
||||
ssh-add -l 1> NUL 2>&1
|
||||
IF ERRORLEVEL 1 GOTO:RUNAGENT
|
||||
GOTO:ADDKEYS
|
||||
|
||||
:RUNAGENT
|
||||
REM Remove old socket file
|
||||
rm -f /tmp/ssh-agent.sock
|
||||
|
||||
REM Run ssh-agent and save (last) PID in VAR
|
||||
SET VAR=
|
||||
FOR /f "tokens=*" %%J IN ('ssh-agent -a /tmp/ssh-agent.sock') DO FOR /f "tokens=*" %%K IN ('echo %%J ^| grep "SSH_AGENT_PID" ^| sed "s/^SSH_AGENT_PID=\([0-9]\+\); .*/\1/"') DO SET VAR=%%K
|
||||
|
||||
:ADDKEYS
|
||||
SET SSH_AUTH_PID=%VAR%
|
||||
|
||||
REM Check if ssh keys are known
|
||||
SET KEYS=
|
||||
FOR /f "tokens=*" %%I IN ('DIR /B "%HOME%\.ssh\*_rsa"') DO CALL:CHECKKEY %%I
|
||||
|
||||
REM Add missing ssh keys at once
|
||||
IF NOT "%KEYS%" == "" ssh-add %KEYS%
|
||||
GOTO:END
|
||||
|
||||
REM Functions
|
||||
REM Check if ssh key has to be added
|
||||
:CHECKKEY
|
||||
SET VAR=
|
||||
FOR /f "tokens=*" %%J IN ('ssh-add -l ^| grep "%1"') DO SET VAR=%%J
|
||||
IF "%VAR%" == "" SET KEYS='%HOME%\.ssh\%1' %KEYS%
|
||||
GOTO:EOF
|
||||
|
||||
:END
|
||||
@ECHO ON
|
@ -1,61 +0,0 @@
|
||||
@echo off
|
||||
|
||||
set ALIASES=%CMDER_ROOT%\config\aliases
|
||||
|
||||
if ["%*"] == [""] echo Use /? for help & echo. & goto :p_show
|
||||
if ["%1"] == ["/?"] goto:p_help
|
||||
if ["%1"] == ["/reload"] goto:p_reload
|
||||
:: /d flag for delete existing alias
|
||||
if ["%1"] == ["/d"] goto:p_del %*
|
||||
:: if arg is an existing alias, display it
|
||||
if ["%2"] == [""] (
|
||||
doskey /macros | findstr /b %1= && goto:eof
|
||||
echo Insufficient parameters. & goto:p_help
|
||||
)
|
||||
|
||||
::validate alias
|
||||
setlocal
|
||||
for /f "delims== tokens=1" %%G in ("%*") do set _temp2=%%G
|
||||
|
||||
set _temp=%_temp2: =%
|
||||
|
||||
if not ["%_temp%"] == ["%_temp2%"] (
|
||||
echo Your alias name can not contain a space
|
||||
endlocal
|
||||
goto:eof
|
||||
)
|
||||
|
||||
:: replace already defined alias
|
||||
findstr /b /v /i "%_temp%=" "%ALIASES%" >> "%ALIASES%.tmp"
|
||||
echo %* >> "%ALIASES%.tmp" && type "%ALIASES%.tmp" > "%ALIASES%" & @del /f /q "%ALIASES%.tmp"
|
||||
doskey /macrofile="%ALIASES%"
|
||||
endlocal
|
||||
goto:eof
|
||||
|
||||
:p_del
|
||||
findstr /b /v /i "%2=" "%ALIASES%" >> "%ALIASES%.tmp"
|
||||
type "%ALIASES%".tmp > "%ALIASES%" & @del /f /q "%ALIASES%.tmp"
|
||||
doskey /macrofile=%ALIASES%
|
||||
goto:eof
|
||||
|
||||
:p_reload
|
||||
doskey /macrofile="%ALIASES%"
|
||||
echo Aliases reloaded
|
||||
goto:eof
|
||||
|
||||
:p_show
|
||||
type "%ALIASES%" || echo No aliases found at "%ALIASES%"
|
||||
goto :eof
|
||||
|
||||
:p_help
|
||||
echo.Usage:
|
||||
echo. alias [/reload] [/d] [name=full command]
|
||||
echo. /reload Reload the aliases file
|
||||
echo. /d Delete an alias (must be followed by the alias name)
|
||||
echo.
|
||||
echo. If alias is called with any parameters, it will display the list of existing aliases.
|
||||
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/?
|
@ -1,3 +1,16 @@
|
||||
## Config
|
||||
|
||||
All config files must be in this folder. If there is no option to set this folder directly, it has to be hardlinked.
|
||||
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.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 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.
|
||||
* `user-ConEmu.xml`: settings from ConEmu the UI of Cmder. ;
|
||||
Do not edit this file directly it is overwritten on each cmder.exe launch.
|
||||
|
@ -1,7 +0,0 @@
|
||||
e.=explorer .
|
||||
gl=git log --oneline --all --graph --decorate $*
|
||||
ls=ls --show-control-chars -F --color $*
|
||||
pwd=cd
|
||||
clear=cls
|
||||
history=cat %CMDER_ROOT%\config\.history
|
||||
unalias=alias /d $1
|
184
config/cmder.lua
@ -1,184 +0,0 @@
|
||||
function lambda_prompt_filter()
|
||||
clink.prompt.value = string.gsub(clink.prompt.value, "{lamb}", "λ")
|
||||
end
|
||||
|
||||
---
|
||||
-- Resolves closest directory location for specified directory.
|
||||
-- Navigates subsequently up one level and tries to find specified directory
|
||||
-- @param {string} path Path to directory will be checked. If not provided
|
||||
-- current directory will be used
|
||||
-- @param {string} dirname Directory name to search for
|
||||
-- @return {string} Path to specified directory or nil if such dir not found
|
||||
local function get_dir_contains(path, dirname)
|
||||
|
||||
-- return parent path for specified entry (either file or directory)
|
||||
local function pathname(path)
|
||||
local prefix = ""
|
||||
local i = path:find("[\\/:][^\\/:]*$")
|
||||
if i then
|
||||
prefix = path:sub(1, i-1)
|
||||
end
|
||||
return prefix
|
||||
end
|
||||
|
||||
-- Navigates up one level
|
||||
local function up_one_level(path)
|
||||
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)
|
||||
if path == nil then path = '.' end
|
||||
local found_dirs = clink.find_dirs(path..'/'..specified_dir)
|
||||
if #found_dirs > 0 then return true end
|
||||
return false
|
||||
end
|
||||
|
||||
-- Set default path to current directory
|
||||
if path == nil then path = '.' end
|
||||
|
||||
-- If we're already have .git directory here, then return current path
|
||||
if has_specified_dir(path, dirname) then
|
||||
return path..'/'..dirname
|
||||
else
|
||||
-- Otherwise go up one level and make a recursive call
|
||||
local parent_path = up_one_level(path)
|
||||
if parent_path == path then
|
||||
return nil
|
||||
else
|
||||
return get_dir_contains(parent_path, dirname)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
local function get_hg_dir(path)
|
||||
return get_dir_contains(path, '.hg')
|
||||
end
|
||||
|
||||
local function get_git_dir(path)
|
||||
return get_dir_contains(path, '.git')
|
||||
end
|
||||
|
||||
---
|
||||
-- Find out current branch
|
||||
-- @return {false|mercurial branch name}
|
||||
---
|
||||
function get_hg_branch()
|
||||
for line in io.popen("hg branch 2>nul"):lines() do
|
||||
local m = line:match("(.+)$")
|
||||
if m then
|
||||
return m
|
||||
end
|
||||
end
|
||||
|
||||
return false
|
||||
end
|
||||
|
||||
---
|
||||
-- Get the status of working dir
|
||||
-- @return {bool}
|
||||
---
|
||||
function get_hg_status()
|
||||
for line in io.popen("hg status"):lines() do
|
||||
return false
|
||||
end
|
||||
return true
|
||||
end
|
||||
|
||||
function hg_prompt_filter()
|
||||
|
||||
-- Colors for mercurial status
|
||||
local colors = {
|
||||
clean = "\x1b[1;37;40m",
|
||||
dirty = "\x1b[31;1m",
|
||||
}
|
||||
|
||||
if get_hg_dir() then
|
||||
-- if we're inside of mercurial repo then try to detect current branch
|
||||
local branch = get_hg_branch()
|
||||
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
|
||||
end
|
||||
|
||||
clink.prompt.value = string.gsub(clink.prompt.value, "{hg}", color.."("..branch..")")
|
||||
return false
|
||||
end
|
||||
end
|
||||
|
||||
-- No mercurial present or not in mercurial file
|
||||
clink.prompt.value = string.gsub(clink.prompt.value, "{hg}", "")
|
||||
return false
|
||||
end
|
||||
|
||||
---
|
||||
-- Find out current branch
|
||||
-- @return {false|git branch name}
|
||||
---
|
||||
function get_git_branch()
|
||||
for line in io.popen("git branch 2>nul"):lines() do
|
||||
local m = line:match("%* (.+)$")
|
||||
if m then
|
||||
return m
|
||||
end
|
||||
end
|
||||
|
||||
return false
|
||||
end
|
||||
|
||||
---
|
||||
-- Get the status of working dir
|
||||
-- @return {bool}
|
||||
---
|
||||
function get_git_status()
|
||||
return os.execute("git diff --quiet --ignore-submodules HEAD 2>nul")
|
||||
end
|
||||
|
||||
function git_prompt_filter()
|
||||
|
||||
-- Colors for git status
|
||||
local colors = {
|
||||
clean = "\x1b[1;37;40m",
|
||||
dirty = "\x1b[31;1m",
|
||||
}
|
||||
|
||||
if get_git_dir() then
|
||||
-- if we're inside of git repo then try to detect current branch
|
||||
local branch = get_git_branch()
|
||||
if branch then
|
||||
-- Has branch => therefore it is a git folder, now figure out status
|
||||
if get_git_status() then
|
||||
color = colors.clean
|
||||
else
|
||||
color = colors.dirty
|
||||
end
|
||||
|
||||
clink.prompt.value = string.gsub(clink.prompt.value, "{git}", color.."("..branch..")")
|
||||
return false
|
||||
end
|
||||
end
|
||||
|
||||
-- No git present or not in git file
|
||||
clink.prompt.value = string.gsub(clink.prompt.value, "{git}", "")
|
||||
return false
|
||||
end
|
||||
|
||||
clink.prompt.register_filter(lambda_prompt_filter, 40)
|
||||
clink.prompt.register_filter(hg_prompt_filter, 50)
|
||||
clink.prompt.register_filter(git_prompt_filter, 50)
|
||||
|
||||
local completions_dir = clink.get_env('CMDER_ROOT')..'/vendor/clink-completions/'
|
||||
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
|
||||
local filename = completions_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
|
3
config/profile.d/README.md
Normal 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.
|
@ -1,43 +0,0 @@
|
||||
# name: Ctrl-D exits
|
||||
# type: bool
|
||||
# Ctrl-D exits the process when it is pressed on an empty line.
|
||||
ctrld_exits = 1
|
||||
|
||||
# name: Ctrl-C raises exception
|
||||
# type: bool
|
||||
# When Ctrl-C is pressed Clink will pass it thourgh to the parent by raising the
|
||||
# appropriate exception.
|
||||
passthrough_ctrlc = 1
|
||||
|
||||
# name: Esc clears line
|
||||
# type: bool
|
||||
# Clink clears the current line when Esc is pressed (unless Readline's Vi mode
|
||||
# is enabled).
|
||||
esc_clears_line = 1
|
||||
|
||||
# name: Match display colour
|
||||
# type: int
|
||||
# Colour to use when displaying matches. A value less than 0 will be the
|
||||
# opposite brightness of the default colour.
|
||||
match_colour = -1
|
||||
|
||||
# name: Executable match style
|
||||
# type: enum
|
||||
# Changes how Clink will match executables when there is no path separator on
|
||||
# the line. 0 = PATH only, 1 = PATH and CWD, 2 = PATH, CWD, and directories. In
|
||||
# all cases both executables and directories are matched when there is a path
|
||||
# separator present.
|
||||
exec_match_style = 2
|
||||
|
||||
# name: Prompt colour
|
||||
# type: int
|
||||
# Surrounds the prompt in ANSI escape codes to set the prompt's colour. Disabled
|
||||
# when the value is less than 0.
|
||||
prompt_colour = -1
|
||||
|
||||
# name: Auto-answer terminate prompt
|
||||
# type: enum
|
||||
# Automatically answers cmd.exe's 'Terminate batch job (Y/N)?' prompts. 0 =
|
||||
# disabled, 1 = answer 'Y', 2 = answer 'N'.
|
||||
terminate_autoanswer = 0
|
||||
|
BIN
icons/cmder_blue.ico
Normal file
After Width: | Height: | Size: 5.1 KiB |
BIN
icons/cmder_green.ico
Normal file
After Width: | Height: | Size: 5.1 KiB |
BIN
icons/cmder_orange.ico
Normal file
After Width: | Height: | Size: 5.3 KiB |
BIN
icons/cmder_purple.ico
Normal file
After Width: | Height: | Size: 5.2 KiB |
BIN
icons/cmder_red.ico
Normal file
After Width: | Height: | Size: 4.8 KiB |
BIN
icons/cmder_yellow.ico
Normal file
After Width: | Height: | Size: 5.1 KiB |
BIN
icons/icon_16_blue.png
Normal file
After Width: | Height: | Size: 256 B |
BIN
icons/icon_16_green.png
Normal file
After Width: | Height: | Size: 264 B |
BIN
icons/icon_16_orange.png
Normal file
After Width: | Height: | Size: 256 B |
BIN
icons/icon_16_purple.png
Normal file
After Width: | Height: | Size: 271 B |
BIN
icons/icon_16_red.png
Normal file
After Width: | Height: | Size: 257 B |
BIN
icons/icon_16_yellow.png
Normal file
After Width: | Height: | Size: 264 B |
BIN
icons/icon_256_blue.png
Normal file
After Width: | Height: | Size: 1.9 KiB |
BIN
icons/icon_256_green.png
Normal file
After Width: | Height: | Size: 1.9 KiB |
BIN
icons/icon_256_orange.png
Normal file
After Width: | Height: | Size: 1.9 KiB |
BIN
icons/icon_256_purple.png
Normal file
After Width: | Height: | Size: 1.9 KiB |
BIN
icons/icon_256_red.png
Normal file
After Width: | Height: | Size: 1.9 KiB |
BIN
icons/icon_256_yellow.png
Normal file
After Width: | Height: | Size: 1.9 KiB |
BIN
icons/icon_32_blue.png
Normal file
After Width: | Height: | Size: 371 B |
BIN
icons/icon_32_green.png
Normal file
After Width: | Height: | Size: 369 B |
BIN
icons/icon_32_orange.png
Normal file
After Width: | Height: | Size: 364 B |
BIN
icons/icon_32_purple.png
Normal file
After Width: | Height: | Size: 392 B |
BIN
icons/icon_32_red.png
Normal file
After Width: | Height: | Size: 378 B |
BIN
icons/icon_32_yellow.png
Normal file
After Width: | Height: | Size: 372 B |
BIN
icons/icon_48_blue.png
Normal file
After Width: | Height: | Size: 514 B |
BIN
icons/icon_48_green.png
Normal file
After Width: | Height: | Size: 498 B |
BIN
icons/icon_48_orange.png
Normal file
After Width: | Height: | Size: 499 B |
BIN
icons/icon_48_purple.png
Normal file
After Width: | Height: | Size: 521 B |
BIN
icons/icon_48_red.png
Normal file
After Width: | Height: | Size: 501 B |
BIN
icons/icon_48_yellow.png
Normal file
After Width: | Height: | Size: 493 B |
@ -1,7 +1,7 @@
|
||||
|
||||
|
||||
Microsoft Visual Studio Solution File, Format Version 12.00
|
||||
# Visual Studio 14
|
||||
VisualStudioVersion = 14.0.22823.1
|
||||
VisualStudioVersion = 14.0.23107.0
|
||||
MinimumVisualStudioVersion = 10.0.40219.1
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "CmderLauncher", "CmderLauncher.vcxproj", "{4A8485A5-B7DD-4C44-B7F6-3E2765DD0CD3}"
|
||||
EndProject
|
||||
@ -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
|
||||
|
@ -1,5 +1,5 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<?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">
|
||||
<Configuration>Debug</Configuration>
|
||||
@ -9,26 +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>
|
||||
<TargetPlatformVersion>8.1</TargetPlatformVersion>
|
||||
<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>v140_xp</PlatformToolset>
|
||||
<PlatformToolset>v143</PlatformToolset>
|
||||
<CharacterSet>Unicode</CharacterSet>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
|
||||
<ConfigurationType>Application</ConfigurationType>
|
||||
<UseDebugLibraries>false</UseDebugLibraries>
|
||||
<PlatformToolset>v140_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">
|
||||
@ -39,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>
|
||||
@ -48,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>
|
||||
@ -60,7 +95,14 @@
|
||||
<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>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||
<ClCompile>
|
||||
@ -73,6 +115,54 @@
|
||||
<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>
|
||||
<!-- <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>
|
||||
@ -80,12 +170,17 @@
|
||||
<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>
|
||||
<ItemGroup>
|
||||
<ClInclude Include="src\resource.h" />
|
||||
|
@ -3,8 +3,14 @@
|
||||
#include <Shlwapi.h>
|
||||
#include "resource.h"
|
||||
#include <vector>
|
||||
#include <shlobj.h>
|
||||
|
||||
#include <regex>
|
||||
#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."
|
||||
@ -12,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)
|
||||
|
||||
@ -26,11 +32,44 @@
|
||||
|
||||
#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;
|
||||
if (FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS,
|
||||
NULL, ec, 0, (LPWSTR) &buffer, 0, NULL) == 0)
|
||||
NULL, ec, 0, (LPWSTR)&buffer, 0, NULL) == 0)
|
||||
{
|
||||
buffer = L"Unknown error. FormatMessage failed.";
|
||||
}
|
||||
@ -53,33 +92,20 @@ typedef struct _option
|
||||
|
||||
typedef std::pair<std::wstring, std::wstring> optpair;
|
||||
|
||||
|
||||
optpair GetOption()
|
||||
bool FileExists(const wchar_t * filePath)
|
||||
{
|
||||
wchar_t * cmd = GetCommandLine();
|
||||
int argc;
|
||||
wchar_t ** argv = CommandLineToArgvW(cmd, &argc);
|
||||
optpair pair;
|
||||
HANDLE hFile = CreateFile(filePath, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, 0, NULL);
|
||||
|
||||
if (argc == 1)
|
||||
if (hFile != INVALID_HANDLE_VALUE)
|
||||
{
|
||||
pair = optpair(L"/START", L"");
|
||||
}
|
||||
else if (argc == 2 && argv[1][0] != L'/')
|
||||
{
|
||||
pair = optpair(L"/START", argv[1]);
|
||||
}
|
||||
else
|
||||
{
|
||||
pair = optpair(argv[1], argc > 2 ? argv[2] : L"");
|
||||
CloseHandle(hFile);
|
||||
return true;
|
||||
}
|
||||
|
||||
LocalFree(argv);
|
||||
|
||||
return pair;
|
||||
return false;
|
||||
}
|
||||
|
||||
void StartCmder(std::wstring path, bool is_single_mode)
|
||||
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,8 +113,30 @@ void StartCmder(std::wstring path, bool is_single_mode)
|
||||
wchar_t exeDir[MAX_PATH] = { 0 };
|
||||
wchar_t icoPath[MAX_PATH] = { 0 };
|
||||
wchar_t cfgPath[MAX_PATH] = { 0 };
|
||||
wchar_t backupCfgPath[MAX_PATH] = { 0 };
|
||||
wchar_t cpuCfgPath[MAX_PATH] = { 0 };
|
||||
wchar_t userCfgPath[MAX_PATH] = { 0 };
|
||||
wchar_t defaultCfgPath[MAX_PATH] = { 0 };
|
||||
wchar_t conEmuPath[MAX_PATH] = { 0 };
|
||||
wchar_t configDirPath[MAX_PATH] = { 0 };
|
||||
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;
|
||||
|
||||
GetModuleFileName(NULL, exeDir, sizeof(exeDir));
|
||||
|
||||
@ -98,32 +146,329 @@ void StartCmder(std::wstring path, bool is_single_mode)
|
||||
|
||||
PathRemoveFileSpec(exeDir);
|
||||
|
||||
PathCombine(icoPath, exeDir, L"icons\\cmder.ico");
|
||||
PathCombine(cfgPath, exeDir, L"config\\ConEmu.xml");
|
||||
PathCombine(conEmuPath, exeDir, L"vendor\\conemu-maximus5\\ConEmu.exe");
|
||||
|
||||
if (is_single_mode)
|
||||
if (PathFileExists(iconPath.c_str()))
|
||||
{
|
||||
swprintf_s(args, L"/single /Icon \"%s\" /Title Cmder /LoadCfgFile \"%s\"", icoPath, cfgPath);
|
||||
std::copy(iconPath.begin(), iconPath.end(), icoPath);
|
||||
icoPath[iconPath.length()] = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
swprintf_s(args, L"/Icon \"%s\" /Title Cmder /LoadCfgFile \"%s\"", icoPath, cfgPath);
|
||||
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);
|
||||
|
||||
PathCombine(userConfigDirPath, userConfigDirPath, L"config");
|
||||
SHCreateDirectoryEx(0, userConfigDirPath, 0);
|
||||
|
||||
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"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) || 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 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 // 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 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)) // 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 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-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 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 // '/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 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 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)
|
||||
{
|
||||
PathCombine(conEmuPath, exeDir, L"vendor\\conemu-maximus5\\ConEmu64.exe");
|
||||
}
|
||||
else
|
||||
{
|
||||
PathCombine(conEmuPath, exeDir, L"vendor\\conemu-maximus5\\ConEmu.exe");
|
||||
}
|
||||
|
||||
swprintf_s(args, L"%s /Icon \"%s\"", args, icoPath);
|
||||
|
||||
if (!streqi(cmderStart.c_str(), L""))
|
||||
{
|
||||
swprintf_s(args, L"%s /dir \"%s\"", args, cmderStart.c_str());
|
||||
}
|
||||
|
||||
if (is_single_mode)
|
||||
{
|
||||
swprintf_s(args, L"%s /single", args);
|
||||
}
|
||||
|
||||
if (!streqi(cmderTask.c_str(), L""))
|
||||
{
|
||||
swprintf_s(args, L"%s /run {%s}", args, cmderTask.c_str());
|
||||
}
|
||||
|
||||
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());
|
||||
}
|
||||
|
||||
SetEnvironmentVariable(L"CMDER_ROOT", exeDir);
|
||||
SetEnvironmentVariable(L"CMDER_START", path.c_str());
|
||||
if (wcscmp(userConfigDirPath, configDirPath) != 0)
|
||||
{
|
||||
SetEnvironmentVariable(L"CMDER_USER_CONFIG", userConfigDirPath);
|
||||
SetEnvironmentVariable(L"CMDER_USER_BIN", userBinDirPath);
|
||||
}
|
||||
|
||||
// Ensure EnvironmentVariables are propagated.
|
||||
|
||||
STARTUPINFO si = { 0 };
|
||||
|
||||
si.cb = sizeof(STARTUPINFO);
|
||||
#if USE_TASKBAR_API
|
||||
si.lpTitle = appId;
|
||||
si.dwFlags = STARTF_TITLEISAPPID;
|
||||
#endif
|
||||
|
||||
PROCESS_INFORMATION pi;
|
||||
if (!CreateProcess(conEmuPath, args, NULL, NULL, false, 0, NULL, NULL, &si, &pi)) {
|
||||
MessageBox(NULL, _T("Unable to create the ConEmu process!"), _T("Error"), MB_OK);
|
||||
return;
|
||||
}
|
||||
|
||||
CreateProcess(conEmuPath, args, NULL, NULL, false, 0, NULL, NULL, &si, &pi);
|
||||
LRESULT lr = SendMessageTimeout(HWND_BROADCAST, WM_SETTINGCHANGE, 0, (LPARAM)"Environment", SMTO_ABORTIFHUNG | SMTO_NOTIMEOUTIFNOTHUNG, 5000, NULL);
|
||||
lr = SendMessageTimeout(HWND_BROADCAST, WM_SETTINGCHANGE, 0, (LPARAM)L"Environment", SMTO_ABORTIFHUNG | SMTO_NOTIMEOUTIFNOTHUNG, 5000, NULL); // For Windows >= 8
|
||||
}
|
||||
|
||||
bool IsUserOnly(std::wstring opt)
|
||||
@ -153,8 +498,7 @@ HKEY GetRootKey(std::wstring opt)
|
||||
|
||||
if (IsUserOnly(opt))
|
||||
{
|
||||
FAIL_ON_ERROR(RegCreateKeyEx(HKEY_CURRENT_USER, L"Software\\Classes", 0, NULL,
|
||||
REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, &root, NULL));
|
||||
FAIL_ON_ERROR(RegCreateKeyEx(HKEY_CURRENT_USER, L"Software\\Classes", 0, NULL, REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, &root, NULL));
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -164,8 +508,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 };
|
||||
@ -174,7 +520,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);
|
||||
@ -182,13 +544,10 @@ void RegisterShellMenu(std::wstring opt, wchar_t* keyBaseName)
|
||||
PathCombine(icoPath, exePath, L"icons\\cmder.ico");
|
||||
|
||||
// Now set the registry keys
|
||||
|
||||
HKEY root = GetRootKey(opt);
|
||||
|
||||
HKEY cmderKey;
|
||||
FAIL_ON_ERROR(
|
||||
RegCreateKeyEx(root, keyBaseName, 0, NULL,
|
||||
REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, &cmderKey, NULL));
|
||||
FAIL_ON_ERROR(RegCreateKeyEx(root, keyBaseName, 0, NULL, REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, &cmderKey, NULL));
|
||||
|
||||
FAIL_ON_ERROR(RegSetValue(cmderKey, L"", REG_SZ, L"Cmder Here", NULL));
|
||||
FAIL_ON_ERROR(RegSetValueEx(cmderKey, L"NoWorkingDirectory", 0, REG_SZ, (BYTE *)L"", 2));
|
||||
@ -196,9 +555,7 @@ void RegisterShellMenu(std::wstring opt, wchar_t* keyBaseName)
|
||||
FAIL_ON_ERROR(RegSetValueEx(cmderKey, L"Icon", 0, REG_SZ, (BYTE *)icoPath, wcslen(icoPath) * sizeof(wchar_t)));
|
||||
|
||||
HKEY command;
|
||||
FAIL_ON_ERROR(
|
||||
RegCreateKeyEx(cmderKey, L"command", 0, NULL,
|
||||
REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, &command, NULL));
|
||||
FAIL_ON_ERROR(RegCreateKeyEx(cmderKey, L"command", 0, NULL, REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, &command, NULL));
|
||||
|
||||
FAIL_ON_ERROR(RegSetValue(command, L"", REG_SZ, commandStr, NULL));
|
||||
|
||||
@ -211,18 +568,183 @@ 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(RegCreateKeyEx(root, keyBaseName, 0, NULL, REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, &cmderKey, NULL));
|
||||
FAIL_ON_ERROR(RegDeleteTree(cmderKey, NULL));
|
||||
#endif
|
||||
RegDeleteKeyEx(root, keyBaseName, KEY_ALL_ACCESS, NULL);
|
||||
RegCloseKey(cmderKey);
|
||||
RegCloseKey(root);
|
||||
}
|
||||
|
||||
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()
|
||||
{
|
||||
cmderOptions cmderOptions;
|
||||
LPWSTR *szArgList;
|
||||
int argCount;
|
||||
|
||||
szArgList = CommandLineToArgvW(GetCommandLine(), &argCount);
|
||||
|
||||
for (int i = 1; i < argCount; i++)
|
||||
{
|
||||
|
||||
// MessageBox(NULL, szArgList[i], L"Arglist contents", MB_OK);
|
||||
if (cmderOptions.error == false) {
|
||||
if (_wcsicmp(L"/c", szArgList[i]) == 0)
|
||||
{
|
||||
TCHAR userProfile[MAX_PATH];
|
||||
const DWORD ret = GetEnvironmentVariable(L"USERPROFILE", userProfile, MAX_PATH);
|
||||
|
||||
wchar_t cmderCfgRoot[MAX_PATH] = { 0 };
|
||||
PathCombine(cmderCfgRoot, userProfile, L"cmder_cfg");
|
||||
|
||||
cmderOptions.cmderCfgRoot = cmderCfgRoot;
|
||||
|
||||
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 does not exist!", MB_OK);
|
||||
}
|
||||
}
|
||||
else if (_wcsicmp(L"/task", szArgList[i]) == 0)
|
||||
{
|
||||
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;
|
||||
cmderOptions.unRegisterApp = false;
|
||||
if (szArgList[i + 1] != NULL)
|
||||
{
|
||||
if (_wcsicmp(L"all", szArgList[i + 1]) == 0 || _wcsicmp(L"user", szArgList[i + 1]) == 0)
|
||||
{
|
||||
cmderOptions.cmderRegScope = szArgList[i + 1];
|
||||
i++;
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (_wcsicmp(L"/unregister", szArgList[i]) == 0)
|
||||
{
|
||||
cmderOptions.unRegisterApp = true;
|
||||
cmderOptions.registerApp = false;
|
||||
if (szArgList[i + 1] != NULL)
|
||||
{
|
||||
if (_wcsicmp(L"all", szArgList[i + 1]) == 0 || _wcsicmp(L"user", szArgList[i + 1]) == 0)
|
||||
{
|
||||
cmderOptions.cmderRegScope = szArgList[i + 1];
|
||||
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
|
||||
{
|
||||
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,
|
||||
@ -232,30 +754,29 @@ int APIENTRY _tWinMain(_In_ HINSTANCE hInstance,
|
||||
UNREFERENCED_PARAMETER(lpCmdLine);
|
||||
UNREFERENCED_PARAMETER(nCmdShow);
|
||||
|
||||
optpair opt = GetOption();
|
||||
cmderOptions cmderOptions = GetOption();
|
||||
|
||||
if (streqi(opt.first.c_str(), L"/START"))
|
||||
if (cmderOptions.registerApp == true)
|
||||
{
|
||||
StartCmder(opt.second, false);
|
||||
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 (streqi(opt.first.c_str(), L"/SINGLE"))
|
||||
else if (cmderOptions.unRegisterApp == true)
|
||||
{
|
||||
StartCmder(opt.second, 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 (streqi(opt.first.c_str(), L"/REGISTER"))
|
||||
else if (cmderOptions.error == true)
|
||||
{
|
||||
RegisterShellMenu(opt.second, SHELL_MENU_REGISTRY_PATH_BACKGROUND);
|
||||
RegisterShellMenu(opt.second, SHELL_MENU_REGISTRY_PATH_LISTITEM);
|
||||
}
|
||||
else if (streqi(opt.first.c_str(), L"/UNREGISTER"))
|
||||
{
|
||||
UnregisterShellMenu(opt.second, SHELL_MENU_REGISTRY_PATH_BACKGROUND);
|
||||
UnregisterShellMenu(opt.second, SHELL_MENU_REGISTRY_PATH_LISTITEM);
|
||||
return 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
MessageBox(NULL, L"Unrecognized parameter.\n\nValid options:\n /START <path>\n /SINGLE <path>\n /REGISTER [USER/ALL]\n /UNREGISTER [USER/ALL]", MB_TITLE, MB_OK);
|
||||
return 1;
|
||||
StartCmder(cmderOptions.cmderStart, cmderOptions.cmderSingle, cmderOptions.cmderTask, cmderOptions.cmderTitle, cmderOptions.cmderIcon, cmderOptions.cmderCfgRoot, cmderOptions.cmderUserCfg, cmderOptions.cmderConEmuArgs);
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
54
launcher/src/app.manifest
Normal 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 -->
|
||||
<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>
|
109
launcher/src/resource.rc
Normal 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
@ -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]"
|
||||
}
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
27
launcher/src/version.rc2.sample
Normal 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
@ -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.
|
15
packignore
@ -2,8 +2,21 @@ launcher
|
||||
.gitignore
|
||||
.gitattributes
|
||||
.git
|
||||
*.rb
|
||||
.github
|
||||
*.md
|
||||
build
|
||||
scripts
|
||||
config\.history
|
||||
packignore
|
||||
icons\Thumbs.db
|
||||
icons\cmder_icon.psd
|
||||
icons\icon_16*.png
|
||||
icons\icon_32*.png
|
||||
icons\icon_48*.png
|
||||
icons\icon_256*.png
|
||||
Cmder.bat
|
||||
vendor\tmp
|
||||
appveyor.yml
|
||||
vendor\cmder.sh
|
||||
vendor\git-prompt.sh
|
||||
config\user-*
|
||||
|
@ -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 -Full
|
||||
.\build.ps1 -Compile
|
||||
|
||||
Executes a full build for cmder, including git. This is equivalent to the "full" style package in the releases
|
||||
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
|
||||
https://github.com/bliker/cmder - Project Home
|
||||
http://cmder.app/ - Project Home
|
||||
#>
|
||||
[CmdletBinding(SupportsShouldProcess=$true)]
|
||||
Param(
|
||||
@ -38,55 +42,138 @@ 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",
|
||||
|
||||
# Include git with the package build
|
||||
[switch]$Full
|
||||
# Config folder location
|
||||
[string]$config = "$PSScriptRoot\..\config",
|
||||
|
||||
# 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.
|
||||
$cmder_root = Resolve-Path "$PSScriptRoot\.."
|
||||
|
||||
# Dot source util functions into this scope
|
||||
. "$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"
|
||||
|
||||
# Check for requirements
|
||||
Ensure-Exists $sourcesPath
|
||||
Ensure-Executable "7z"
|
||||
New-Item -Type Directory -Path (Join-Path $saveTo "/tmp/") -ErrorAction SilentlyContinue >$null
|
||||
# Get the version string
|
||||
$version = Get-VersionStr
|
||||
|
||||
foreach ($s in $sources) {
|
||||
if($Full -eq $false -and $s.name -eq "msysgit"){
|
||||
Continue
|
||||
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."
|
||||
}
|
||||
|
||||
Write-Verbose "Getting $($s.name) from URL $($s.url)"
|
||||
|
||||
# We do not care about the extensions/type of archive
|
||||
$tempArchive = "tmp/$($s.name).tmp"
|
||||
Delete-Existing $tempArchive
|
||||
Delete-Existing $s.name
|
||||
|
||||
Invoke-WebRequest -Uri $s.url -OutFile $tempArchive -ErrorAction Stop
|
||||
Extract-Archive $tempArchive $s.name
|
||||
|
||||
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"
|
||||
Pop-Location
|
||||
}
|
||||
|
||||
Pop-Location
|
||||
if (-Not $noVendor) {
|
||||
# Check for requirements
|
||||
Ensure-Exists $sourcesPath
|
||||
Ensure-Executable "7z"
|
||||
|
||||
Push-Location -Path $launcher
|
||||
msbuild CmderLauncher.vcxproj /p:configuration=Release
|
||||
Pop-Location
|
||||
# Get the vendor sources
|
||||
$sources = Get-Content $sourcesPath | Out-String | ConvertFrom-Json
|
||||
|
||||
Write-Verbose "All good and done!"
|
||||
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"
|
||||
if (Test-Path $ConEmuXml -pathType leaf) {
|
||||
$ConEmuXmlSave = Join-Path $config "ConEmu.xml"
|
||||
Write-Verbose "Backup '$ConEmuXml' to '$ConEmuXmlSave'"
|
||||
Copy-Item $ConEmuXml $ConEmuXmlSave
|
||||
} 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 ($s in $sources) {
|
||||
Write-Verbose "Getting vendored $($s.name) $($s.version)..."
|
||||
|
||||
# We do not care about the extensions/type of archive
|
||||
$tempArchive = "tmp/$($s.name).tmp"
|
||||
Delete-Existing $tempArchive
|
||||
Delete-Existing $s.name
|
||||
|
||||
Download-File -Url $s.url -File $vend\$tempArchive -ErrorAction Stop
|
||||
Extract-Archive $tempArchive $s.name
|
||||
|
||||
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 ConEmu user configuration
|
||||
if ($ConEmuXml -ne "") {
|
||||
Write-Verbose "Restore '$ConEmuXmlSave' to '$ConEmuXml'"
|
||||
Copy-Item $ConEmuXmlSave $ConEmuXml
|
||||
}
|
||||
|
||||
# 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")
|
||||
}
|
||||
|
||||
# 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")
|
||||
}
|
||||
|
||||
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!"
|
||||
|
@ -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
|
||||
@ -19,7 +19,7 @@
|
||||
Samuel Vasko, Jack Bennett, Martin Kemp
|
||||
Part of the Cmder project.
|
||||
.LINK
|
||||
https://github.com/bliker/cmder - Project Home
|
||||
https://github.com/cmderdev/cmder - Project Home
|
||||
#>
|
||||
|
||||
[CmdletBinding(SupportsShouldProcess=$true)]
|
||||
@ -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\msysgit`"";
|
||||
"cmder.7z" = "-t7z -m0=lzma2 -mx=9 -mfb=64 -md=32m -ms=on";
|
||||
"cmder_mini.zip" = "-mm=Deflate -mfb=258 -mpass=15 -xr!`"vendor\git-for-windows`"";
|
||||
}
|
||||
|
||||
Delete-Existing "..\Version*"
|
||||
Cleanup-Git
|
||||
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
|
||||
|
||||
foreach ($t in $targets.GetEnumerator()) {
|
||||
Create-Archive $cmderRoot "$saveTo\$($t.Name)" $t.Value
|
||||
$hash = (Digest-MD5 "$saveTo\$($t.Name)")
|
||||
Add-Content "$saveTo\hashes.txt" $hash
|
||||
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
|
||||
$hash = (Digest-Hash "$saveTo\$($t.Name)")
|
||||
Add-Content -path "$saveTo\hashes.txt" -value ($t.Name + ' ' + $hash)
|
||||
}
|
||||
|
||||
Pop-Location
|
||||
|
266
scripts/update.ps1
Normal file
@ -0,0 +1,266 @@
|
||||
<#
|
||||
.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)
|
||||
|
||||
# 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
|
||||
|
||||
$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 | % {$_.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."
|
@ -1,4 +1,4 @@
|
||||
function Ensure-Exists ($path) {
|
||||
function Ensure-Exists($path) {
|
||||
if (-not (Test-Path $path)) {
|
||||
Write-Error "Missing required $path! Ensure it is installed"
|
||||
exit 1
|
||||
@ -6,67 +6,164 @@ function Ensure-Exists ($path) {
|
||||
return $true > $null
|
||||
}
|
||||
|
||||
function Ensure-Executable ($command) {
|
||||
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
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function Delete-Existing ($path) {
|
||||
Write-Verbose "Remove $path"
|
||||
Remove-Item -Recurse -force $path -ErrorAction SilentlyContinue
|
||||
function Delete-Existing($path) {
|
||||
if (Test-Path $path) {
|
||||
Write-Verbose "Remove existing $path"
|
||||
}
|
||||
Remove-Item -Recurse -Force $path -ErrorAction SilentlyContinue
|
||||
}
|
||||
|
||||
function Extract-Archive ($source, $target) {
|
||||
Invoke-Expression "7z x -y -o$($target) '$source' > `$null"
|
||||
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"
|
||||
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"
|
||||
function Create-Archive($source, $target, $params) {
|
||||
$command = "7z a -xr@`"$source\packignore`" $params `"$target`" `"$source\*`" > `$null"
|
||||
Write-Verbose "Creating Archive from '$source' in '$target' with parameters '$params'"
|
||||
Invoke-Expression $command
|
||||
if ($lastexitcode -ne 0) {
|
||||
Write-Error "Compressing $source failied"
|
||||
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"
|
||||
function Flatten-Directory($name) {
|
||||
$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-MD5 ($path) {
|
||||
if(Get-Command Get-FileHash -ErrorAction SilentlyContinue){
|
||||
return (Get-FileHash -Algorithm MD5 -Path $path).Hash
|
||||
function Digest-Hash($path) {
|
||||
if (Get-Command Get-FileHash -ErrorAction SilentlyContinue) {
|
||||
return (Get-FileHash -Algorithm SHA256 -Path $path).Hash
|
||||
}
|
||||
|
||||
return Invoke-Expression "md5sum $path"
|
||||
}
|
||||
|
||||
function Cleanup-Git () {
|
||||
$gitdir = '/vendor/msysgit/libexec/git-core/'
|
||||
Get-Childitem $gitdir -Exclude git.exe | Where-Object{!($_.PSIsContainer)} | Foreach-Object { Remove-Item $_.FullName }
|
||||
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) {
|
||||
echo "$Name=$Value" | Out-File -FilePath $env:GITHUB_ENV -Append -Encoding utf8
|
||||
}
|
||||
}
|
||||
|
||||
function Register-Cmder(){
|
||||
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 diesctory 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 | % { $_.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
|
||||
(
|
||||
@ -80,17 +177,73 @@ function Register-Cmder(){
|
||||
$Command = "%V"
|
||||
|
||||
, # Defaults to the icons folder in the cmder package.
|
||||
$icon = (Split-Path $PathToExe | join-path -ChildPath 'icons/cmder.ico')
|
||||
$icon = (Split-Path $PathToExe | Join-Path -ChildPath 'icons/cmder.ico')
|
||||
)
|
||||
Begin
|
||||
{
|
||||
New-PSDrive -Name HKCR -PSProvider Registry -Root HKEY_CLASSES_ROOT
|
||||
New-PSDrive -Name HKCR -PSProvider Registry -Root HKEY_CLASSES_ROOT > $null
|
||||
}
|
||||
Process
|
||||
{
|
||||
New-Item -Path "HKCR:\Directory\Shell\Cmder" -Force -Value $MenuText
|
||||
New-Item -Path "HKCR:\Directory\Shell\Cmder" -Force -Value $MenuText
|
||||
New-ItemProperty -Path "HKCR:\Directory\Shell\Cmder" -Force -Name "Icon" -Value `"$icon`"
|
||||
New-ItemProperty -Path "HKCR:\Directory\Shell\Cmder" -Force -Name "NoWorkingDirectory"
|
||||
New-Item -Path "HKCR:\Directory\Shell\Cmder\Command" -Force -Value "`"$PathToExe`" `"$Command`" "
|
||||
New-Item -Path "HKCR:\Directory\Shell\Cmder\Command" -Force -Value "`"$PathToExe`" `"$Command`" "
|
||||
|
||||
New-Item -Path "HKCR:\Directory\Background\Shell\Cmder" -Force -Value $MenuText
|
||||
New-ItemProperty -Path "HKCR:\Directory\Background\Shell\Cmder" -Force -Name "Icon" -Value `"$icon`"
|
||||
New-ItemProperty -Path "HKCR:\Directory\Background\Shell\Cmder" -Force -Name "NoWorkingDirectory"
|
||||
New-Item -Path "HKCR:\Directory\Background\Shell\Cmder\Command" -Force -Value "`"$PathToExe`" `"$Command`" "
|
||||
}
|
||||
End
|
||||
{
|
||||
Remove-PSDrive -Name HKCR
|
||||
}
|
||||
}
|
||||
|
||||
function Unregister-Cmder {
|
||||
Begin
|
||||
{
|
||||
New-PSDrive -Name HKCR -PSProvider Registry -Root HKEY_CLASSES_ROOT > $null
|
||||
}
|
||||
Process
|
||||
{
|
||||
Remove-Item -Path "HKCR:\Directory\Shell\Cmder" -Recurse
|
||||
Remove-Item -Path "HKCR:\Directory\Background\Shell\Cmder" -Recurse
|
||||
}
|
||||
End
|
||||
{
|
||||
Remove-PSDrive -Name HKCR
|
||||
}
|
||||
}
|
||||
|
||||
function Download-File {
|
||||
param (
|
||||
$Url,
|
||||
$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"
|
||||
}
|
||||
|
||||
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))
|
||||
}
|
||||
$wc.Proxy.Credentials = [System.Net.CredentialCache]::DefaultNetworkCredentials;
|
||||
$wc.DownloadFile($Url, $File)
|
||||
}
|
||||
|
312
config/ConEmu.xml → vendor/ConEmu.xml.default
vendored
@ -1,7 +1,7 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<key name="Software">
|
||||
<key name="ConEmu">
|
||||
<key name=".Vanilla" modified="2015-05-17 22:10:27" build="150513">
|
||||
<key name=".Vanilla" modified="2018-02-22 06:02:11" build="171109">
|
||||
<value name="ColorTable00" type="dword" data="00222827"/>
|
||||
<value name="ColorTable01" type="dword" data="009e5401"/>
|
||||
<value name="ColorTable02" type="dword" data="0004aa74"/>
|
||||
@ -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"/>
|
||||
@ -72,12 +73,12 @@
|
||||
<value name="StartType" type="hex" data="02"/>
|
||||
<value name="CmdLine" type="string" data=""/>
|
||||
<value name="StartTasksFile" type="string" data=""/>
|
||||
<value name="StartTasksName" type="string" data="{PowerShell}"/>
|
||||
<value name="StartTasksName" type="string" data="{cmd::Cmder}"/>
|
||||
<value name="StartFarFolders" type="hex" data="00"/>
|
||||
<value name="StartFarEditors" type="hex" data="00"/>
|
||||
<value name="StoreTaskbarkTasks" type="hex" data="00"/>
|
||||
<value name="StoreTaskbarCommands" type="hex" data="00"/>
|
||||
<value name="CmdLineHistory" type="multi"><line data=";C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\"/></value>
|
||||
<value name="CmdLineHistory" type="multi"></value>
|
||||
<value name="SingleInstance" type="hex" data="00"/>
|
||||
<value name="ShowHelpTooltips" type="hex" data="01"/>
|
||||
<value name="Multi" type="hex" data="01"/>
|
||||
@ -101,12 +102,12 @@
|
||||
<value name="FontName" type="string" data="Consolas"/>
|
||||
<value name="FontName2" type="string" data="Lucida Console"/>
|
||||
<value name="FontAutoSize" type="hex" data="00"/>
|
||||
<value name="FontSize" type="dword" data="00000010"/>
|
||||
<value name="FontSizeX" type="dword" data="00000000"/>
|
||||
<value name="FontSizeX2" type="dword" data="00000000"/>
|
||||
<value name="FontSizeX3" type="dword" data="00000000"/>
|
||||
<value name="FontSize" type="ulong" data="16"/>
|
||||
<value name="FontSizeX" type="ulong" data="0"/>
|
||||
<value name="FontSizeX2" type="ulong" data="0"/>
|
||||
<value name="FontSizeX3" type="ulong" data="0"/>
|
||||
<value name="FontCharSet" type="hex" data="00"/>
|
||||
<value name="Anti-aliasing" type="dword" data="00000006"/>
|
||||
<value name="Anti-aliasing" type="ulong" data="6"/>
|
||||
<value name="FontBold" type="hex" data="00"/>
|
||||
<value name="FontItalic" type="hex" data="00"/>
|
||||
<value name="Monospace" type="hex" data="01"/>
|
||||
@ -123,29 +124,29 @@
|
||||
<value name="ColorKeyTransparent" type="hex" data="00"/>
|
||||
<value name="ColorKeyValue" type="dword" data="00010101"/>
|
||||
<value name="UseCurrentSizePos" type="hex" data="01"/>
|
||||
<value name="WindowMode" type="dword" data="0000051f"/>
|
||||
<value name="ConWnd Width" type="dword" data="0000006f"/>
|
||||
<value name="ConWnd Height" type="dword" data="0000001a"/>
|
||||
<value name="WindowMode" type="dword" data="00000520"/>
|
||||
<value name="ConWnd Width" type="dword" data="00000078"/>
|
||||
<value name="ConWnd Height" type="dword" data="0000001e"/>
|
||||
<value name="Cascaded" type="hex" data="01"/>
|
||||
<value name="ConWnd X" type="dword" data="000003f8"/>
|
||||
<value name="ConWnd Y" type="dword" data="00000143"/>
|
||||
<value name="16bit Height" type="dword" data="00000000"/>
|
||||
<value name="AutoSaveSizePos" type="hex" data="00"/>
|
||||
<value name="ConWnd X" type="long" data="500"/>
|
||||
<value name="ConWnd Y" type="long" data="500"/>
|
||||
<value name="16bit Height" type="ulong" data="0"/>
|
||||
<value name="AutoSaveSizePos" type="hex" data="01"/>
|
||||
<value name="IntegralSize" type="hex" data="00"/>
|
||||
<value name="QuakeStyle" type="hex" data="00"/>
|
||||
<value name="QuakeAnimation" type="dword" data="0000012c"/>
|
||||
<value name="QuakeAnimation" type="ulong" data="300"/>
|
||||
<value name="HideCaption" type="hex" data="00"/>
|
||||
<value name="HideChildCaption" type="hex" data="01"/>
|
||||
<value name="FocusInChildWindows" type="hex" data="01"/>
|
||||
<value name="HideCaptionAlways" type="hex" data="00"/>
|
||||
<value name="HideCaptionAlwaysFrame" type="hex" data="00"/>
|
||||
<value name="HideCaptionAlwaysDelay" type="dword" data="000007d0"/>
|
||||
<value name="HideCaptionAlwaysDisappear" type="dword" data="000007d0"/>
|
||||
<value name="HideCaptionAlwaysDelay" type="ulong" data="2000"/>
|
||||
<value name="HideCaptionAlwaysDisappear" type="ulong" data="2000"/>
|
||||
<value name="DownShowHiddenMessage" type="hex" data="00"/>
|
||||
<value name="ConsoleFontName" type="string" data="Lucida Console"/>
|
||||
<value name="ConsoleFontWidth" type="dword" data="00000003"/>
|
||||
<value name="ConsoleFontHeight" type="dword" data="00000005"/>
|
||||
<value name="DefaultBufferHeight" type="dword" data="000003e8"/>
|
||||
<value name="ConsoleFontWidth" type="long" data="3"/>
|
||||
<value name="ConsoleFontHeight" type="long" data="5"/>
|
||||
<value name="DefaultBufferHeight" type="long" data="1000"/>
|
||||
<value name="AutoBufferHeight" type="hex" data="01"/>
|
||||
<value name="CmdOutputCP" type="dword" data="00000000"/>
|
||||
<value name="ComSpec.Type" type="hex" data="00"/>
|
||||
@ -153,7 +154,7 @@
|
||||
<value name="ComSpec.UpdateEnv" type="hex" data="00"/>
|
||||
<value name="ComSpec.EnvAddPath" type="hex" data="01"/>
|
||||
<value name="ComSpec.EnvAddExePath" type="hex" data="01"/>
|
||||
<value name="ComSpec.UncPaths" type="hex" data="00"/>
|
||||
<value name="ComSpec.UncPaths" type="hex" data="01"/>
|
||||
<value name="ComSpec.Path" type="string" data=""/>
|
||||
<value name="ConsoleTextSelection" type="hex" data="01"/>
|
||||
<value name="CTS.AutoCopy" type="hex" data="01"/>
|
||||
@ -167,7 +168,7 @@
|
||||
<value name="CTS.MBtnAction" type="hex" data="00"/>
|
||||
<value name="CTS.ColorIndex" type="hex" data="e0"/>
|
||||
<value name="ClipboardConfirmEnter" type="hex" data="01"/>
|
||||
<value name="ClipboardConfirmLonger" type="dword" data="000000c8"/>
|
||||
<value name="ClipboardConfirmLonger" type="ulong" data="200"/>
|
||||
<value name="FarGotoEditorOpt" type="hex" data="01"/>
|
||||
<value name="FarGotoEditorPath" type="string" data="far.exe /e%1:%2 "%3""/>
|
||||
<value name="FixFarBorders" type="hex" data="01"/>
|
||||
@ -198,7 +199,7 @@
|
||||
<value name="MouseSkipActivation" type="hex" data="01"/>
|
||||
<value name="MouseSkipMoving" type="hex" data="01"/>
|
||||
<value name="FarHourglass" type="hex" data="01"/>
|
||||
<value name="FarHourglassDelay" type="dword" data="000001f4"/>
|
||||
<value name="FarHourglassDelay" type="ulong" data="500"/>
|
||||
<value name="Dnd" type="hex" data="01"/>
|
||||
<value name="DndDrop" type="hex" data="01"/>
|
||||
<value name="DefCopy" type="hex" data="01"/>
|
||||
@ -212,8 +213,8 @@
|
||||
<value name="StatusBar.Show" type="hex" data="00"/>
|
||||
<value name="StatusBar.Flags" type="dword" data="00000002"/>
|
||||
<value name="StatusFontFace" type="string" data="Tahoma"/>
|
||||
<value name="StatusFontCharSet" type="dword" data="00000000"/>
|
||||
<value name="StatusFontHeight" type="dword" data="0000000e"/>
|
||||
<value name="StatusFontCharSet" type="ulong" data="0"/>
|
||||
<value name="StatusFontHeight" type="long" data="14"/>
|
||||
<value name="StatusBar.Color.Back" type="dword" data="00404040"/>
|
||||
<value name="StatusBar.Color.Light" type="dword" data="00ffffff"/>
|
||||
<value name="StatusBar.Color.Dark" type="dword" data="00a0a0a0"/>
|
||||
@ -253,35 +254,35 @@
|
||||
<value name="TabsLocation" type="hex" data="01"/>
|
||||
<value name="TabSelf" type="hex" data="01"/>
|
||||
<value name="TabLazy" type="hex" data="01"/>
|
||||
<value name="TabRecent" type="hex" data="01"/>
|
||||
<value name="TabDblClick" type="dword" data="00000001"/>
|
||||
<value name="TabRecent" type="hex" data="00"/>
|
||||
<value name="TabDblClick" type="ulong" data="1"/>
|
||||
<value name="TabsOnTaskBar" type="hex" data="02"/>
|
||||
<value name="TaskBarOverlay" type="hex" data="01"/>
|
||||
<value name="TabCloseMacro" type="string" data=""/>
|
||||
<value name="TabFontFace" type="string" data="Segoe UI"/>
|
||||
<value name="TabFontCharSet" type="dword" data="00000000"/>
|
||||
<value name="TabFontHeight" type="dword" data="00000010"/>
|
||||
<value name="TabFontCharSet" type="ulong" data="0"/>
|
||||
<value name="TabFontHeight" type="long" data="16"/>
|
||||
<value name="SaveAllEditors" type="string" data=""/>
|
||||
<value name="ToolbarAddSpace" type="dword" data="00000000"/>
|
||||
<value name="ToolbarAddSpace" type="long" data="0"/>
|
||||
<value name="TabConsole" type="string" data=" %n "/>
|
||||
<value name="TabSkipWords" type="string" data="Administrator:|Администратор:"/>
|
||||
<value name="TabPanels" type="string" data="<%c> %s"/>
|
||||
<value name="TabEditor" type="string" data="<%c.%i>{%s}"/>
|
||||
<value name="TabEditorModified" type="string" data="<%c.%i>[%s] *"/>
|
||||
<value name="TabViewer" type="string" data="<%c.%i>[%s]"/>
|
||||
<value name="TabLenMax" type="dword" data="00000014"/>
|
||||
<value name="TabLenMax" type="ulong" data="20"/>
|
||||
<value name="AdminTitleSuffix" type="string" data=" (Admin)"/>
|
||||
<value name="AdminShowShield" type="hex" data="01"/>
|
||||
<value name="HideInactiveConsoleTabs" type="hex" data="00"/>
|
||||
<value name="ShowFarWindows" type="hex" data="01"/>
|
||||
<value name="TryToCenter" type="hex" data="01"/>
|
||||
<value name="CenterConsolePad" type="dword" data="00000008"/>
|
||||
<value name="CenterConsolePad" type="ulong" data="8"/>
|
||||
<value name="ShowScrollbar" type="hex" data="02"/>
|
||||
<value name="ScrollBarAppearDelay" type="dword" data="00000064"/>
|
||||
<value name="ScrollBarDisappearDelay" type="dword" data="000003e8"/>
|
||||
<value name="IconID" type="dword" data="00000001"/>
|
||||
<value name="MainTimerElapse" type="dword" data="0000000a"/>
|
||||
<value name="MainTimerInactiveElapse" type="dword" data="000003e8"/>
|
||||
<value name="ScrollBarAppearDelay" type="ulong" data="100"/>
|
||||
<value name="ScrollBarDisappearDelay" type="ulong" data="1000"/>
|
||||
<value name="IconID" type="ulong" data="1"/>
|
||||
<value name="MainTimerElapse" type="ulong" data="10"/>
|
||||
<value name="MainTimerInactiveElapse" type="ulong" data="1000"/>
|
||||
<value name="AffinityMask" type="dword" data="00000000"/>
|
||||
<value name="SkipFocusEvents" type="hex" data="00"/>
|
||||
<value name="MonitorConsoleLang" type="hex" data="03"/>
|
||||
@ -297,32 +298,32 @@
|
||||
<value name="FindMatchWholeWords" type="hex" data="00"/>
|
||||
<value name="FindTransparent" type="hex" data="01"/>
|
||||
<value name="PanView.BackColor" type="dword" data="30ffffff"/>
|
||||
<value name="PanView.PFrame" type="dword" data="00000001"/>
|
||||
<value name="PanView.PFrame" type="long" data="1"/>
|
||||
<value name="PanView.PFrameColor" type="dword" data="28808080"/>
|
||||
<value name="PanView.SFrame" type="dword" data="00000001"/>
|
||||
<value name="PanView.SFrame" type="long" data="1"/>
|
||||
<value name="PanView.SFrameColor" type="dword" data="07c0c0c0"/>
|
||||
<value name="PanView.Thumbs.ImgSize" type="dword" data="00000060"/>
|
||||
<value name="PanView.Thumbs.SpaceX1" type="dword" data="00000001"/>
|
||||
<value name="PanView.Thumbs.SpaceY1" type="dword" data="00000001"/>
|
||||
<value name="PanView.Thumbs.SpaceX2" type="dword" data="00000005"/>
|
||||
<value name="PanView.Thumbs.SpaceY2" type="dword" data="00000014"/>
|
||||
<value name="PanView.Thumbs.LabelSpacing" type="dword" data="00000002"/>
|
||||
<value name="PanView.Thumbs.LabelPadding" type="dword" data="00000000"/>
|
||||
<value name="PanView.Thumbs.ImgSize" type="long" data="96"/>
|
||||
<value name="PanView.Thumbs.SpaceX1" type="long" data="1"/>
|
||||
<value name="PanView.Thumbs.SpaceY1" type="long" data="1"/>
|
||||
<value name="PanView.Thumbs.SpaceX2" type="long" data="5"/>
|
||||
<value name="PanView.Thumbs.SpaceY2" type="long" data="20"/>
|
||||
<value name="PanView.Thumbs.LabelSpacing" type="long" data="2"/>
|
||||
<value name="PanView.Thumbs.LabelPadding" type="long" data="0"/>
|
||||
<value name="PanView.Thumbs.FontName" type="string" data="Tahoma"/>
|
||||
<value name="PanView.Thumbs.FontHeight" type="dword" data="0000000e"/>
|
||||
<value name="PanView.Tiles.ImgSize" type="dword" data="00000030"/>
|
||||
<value name="PanView.Tiles.SpaceX1" type="dword" data="00000004"/>
|
||||
<value name="PanView.Tiles.SpaceY1" type="dword" data="00000004"/>
|
||||
<value name="PanView.Tiles.SpaceX2" type="dword" data="000000ac"/>
|
||||
<value name="PanView.Tiles.SpaceY2" type="dword" data="00000004"/>
|
||||
<value name="PanView.Tiles.LabelSpacing" type="dword" data="00000004"/>
|
||||
<value name="PanView.Tiles.LabelPadding" type="dword" data="00000001"/>
|
||||
<value name="PanView.Thumbs.FontHeight" type="long" data="14"/>
|
||||
<value name="PanView.Tiles.ImgSize" type="long" data="48"/>
|
||||
<value name="PanView.Tiles.SpaceX1" type="long" data="4"/>
|
||||
<value name="PanView.Tiles.SpaceY1" type="long" data="4"/>
|
||||
<value name="PanView.Tiles.SpaceX2" type="long" data="172"/>
|
||||
<value name="PanView.Tiles.SpaceY2" type="long" data="4"/>
|
||||
<value name="PanView.Tiles.LabelSpacing" type="long" data="4"/>
|
||||
<value name="PanView.Tiles.LabelPadding" type="long" data="1"/>
|
||||
<value name="PanView.Tiles.FontName" type="string" data="Tahoma"/>
|
||||
<value name="PanView.Tiles.FontHeight" type="dword" data="0000000e"/>
|
||||
<value name="PanView.Tiles.FontHeight" type="long" data="14"/>
|
||||
<value name="PanView.LoadPreviews" type="hex" data="03"/>
|
||||
<value name="PanView.LoadFolders" type="hex" data="01"/>
|
||||
<value name="PanView.LoadTimeout" type="dword" data="0000000f"/>
|
||||
<value name="PanView.MaxZoom" type="dword" data="00000258"/>
|
||||
<value name="PanView.LoadTimeout" type="ulong" data="15"/>
|
||||
<value name="PanView.MaxZoom" type="ulong" data="600"/>
|
||||
<value name="PanView.UsePicView2" type="hex" data="01"/>
|
||||
<value name="PanView.RestoreOnStartup" type="hex" data="00"/>
|
||||
<value name="Update.VerLocation" type="string" data=""/>
|
||||
@ -483,51 +484,98 @@
|
||||
<value name="DndLKey" type="hex" data="00"/>
|
||||
<value name="DndRKey" type="hex" data="a2"/>
|
||||
<value name="WndDragKey" type="dword" data="00121101"/>
|
||||
<key name="Tasks" modified="2015-05-17 22:10:27" build="150513">
|
||||
<value name="Count" type="dword" data="00000003"/>
|
||||
<key name="Task1" modified="2015-05-17 22:10:27" build="150513">
|
||||
<value name="Name" type="string" data="{cmd}"/>
|
||||
<value name="GuiArgs" type="string" data="/icon "%CMDER_ROOT%\cmder.exe""/>
|
||||
<value name="Cmd1" type="string" data="cmd /k "%ConEmuDir%\..\init.bat" -new_console:d:%USERPROFILE%"/>
|
||||
<value name="Active" type="dword" data="00000000"/>
|
||||
<value name="Count" type="dword" data="00000001"/>
|
||||
<key name="Tasks" modified="2018-02-22 06:02:12" build="171109">
|
||||
<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 "%CMDER_ROOT%\icons\cmder.ico""/>
|
||||
<value name="Cmd1" type="string" data="*cmd /k ""%ConEmuDir%\..\init.bat" ""/>
|
||||
<value name="Active" type="long" data="0"/>
|
||||
<value name="Count" type="long" data="1"/>
|
||||
<value name="Hotkey" type="dword" data="00000000"/>
|
||||
<value name="Flags" type="dword" data="00000000"/>
|
||||
</key>
|
||||
<key name="Task2" modified="2015-05-17 22:10:27" build="150513">
|
||||
<value name="Name" type="string" data="{PowerShell}"/>
|
||||
<value name="GuiArgs" type="string" data="/icon "%CMDER_ROOT%\cmder.exe""/>
|
||||
<value name="Cmd1" type="string" data="PowerShell -NoLogo -NoProfile -NoExit -Command "Invoke-Expression '. ''%ConEmuDir%\..\profile.ps1'''" -new_console:d:"%USERPROFILE%""/>
|
||||
<value name="Active" type="dword" data="00000000"/>
|
||||
<value name="Count" type="dword" data="00000001"/>
|
||||
<key name="Task2" modified="2018-02-22 06:05:13" build="171109">
|
||||
<value name="Name" type="string" data="{cmd::Cmder}"/>
|
||||
<value name="GuiArgs" type="string" data=" /icon "%CMDER_ROOT%\icons\cmder.ico""/>
|
||||
<value name="Cmd1" type="string" data="cmd /k ""%ConEmuDir%\..\init.bat" ""/>
|
||||
<value name="Active" type="long" data="0"/>
|
||||
<value name="Count" type="long" data="1"/>
|
||||
<value name="Hotkey" type="dword" data="00000000"/>
|
||||
<value name="Flags" type="dword" data="00000000"/>
|
||||
</key>
|
||||
<key name="Task3" modified="2015-05-17 22:10:27" build="150513">
|
||||
<value name="Name" type="string" data="{PowerShell as Admin}"/>
|
||||
<key name="Task3" modified="2018-02-22 06:05:13" build="171109">
|
||||
<value name="Name" type="string" data="{PowerShell::PowerShell as Admin}"/>
|
||||
<value name="Hotkey" type="dword" data="00000000"/>
|
||||
<value name="GuiArgs" type="string" data="/icon "%CMDER_ROOT%\cmder.exe""/>
|
||||
<value name="Cmd1" type="string" data="*PowerShell -NoLogo -NoProfile -NoExit -Command "Invoke-Expression '. ''%ConEmuDir%\..\profile.ps1'''" -new_console:d:"%USERPROFILE%""/>
|
||||
<value name="Active" type="dword" data="00000000"/>
|
||||
<value name="Count" type="dword" data="00000001"/>
|
||||
<value name="GuiArgs" type="string" data=" /icon "%CMDER_ROOT%\icons\cmder.ico""/>
|
||||
<value name="Cmd1" type="string" data="*PowerShell -ExecutionPolicy Bypass -NoLogo -NoProfile -NoExit -Command "Invoke-Expression 'Import-Module ''%ConEmuDir%\..\profile.ps1'''""/>
|
||||
<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="2015-02-24 18:49:50" build="140707">
|
||||
<value name="Name" type="string" data="{git sh}"/>
|
||||
<key name="Task4" modified="2018-02-22 06:05:13" build="171109">
|
||||
<value name="Name" type="string" data="{PowerShell::PowerShell}"/>
|
||||
<value name="Hotkey" type="dword" data="00000000"/>
|
||||
<value name="GuiArgs" type="string" data=" /icon "%CMDER_ROOT%\cmder.exe""/>
|
||||
<value name="Cmd1" type="string" data="cmd /k "%ConEmuDir%\..\init.bat & %CMDER_ROOT%\vendor\msysgit\bin\bash --login -i" -new_console:d:%USERPROFILE%"/>
|
||||
<value name="Cmd2" type="string" data="%CMDER_ROOT%\vendor\msysgit\git-bash.bat"/>
|
||||
<value name="Active" type="dword" data="00000000"/>
|
||||
<value name="Count" type="dword" data="00000001"/>
|
||||
<value name="GuiArgs" type="string" data=" /icon "%CMDER_ROOT%\icons\cmder.ico""/>
|
||||
<value name="Cmd1" type="string" data="PowerShell -ExecutionPolicy Bypass -NoLogo -NoProfile -NoExit -Command "Invoke-Expression 'Import-Module ''%ConEmuDir%\..\profile.ps1'''""/>
|
||||
<value name="Cmd2" type="string" data=""%CMDER_ROOT%\vendor\git-for-windows\git-bash.exe""/>
|
||||
<value name="Active" type="long" data="0"/>
|
||||
<value name="Count" type="long" data="1"/>
|
||||
<value name="Flags" type="dword" data="00000000"/>
|
||||
</key>
|
||||
<key name="Task5" modified="2018-02-22 06:05:13" build="171109">
|
||||
<value name="Name" type="string" data="{bash::mintty as Admin}"/>
|
||||
<value name="Flags" type="dword" data="00000000"/>
|
||||
<value name="Hotkey" type="dword" data="00000000"/>
|
||||
<value name="GuiArgs" type="string" data="/icon "%ConEmuDir%\..\git-for-windows\usr\share\git\git-for-windows.ico""/>
|
||||
<value name="Cmd1" type="string" data="*"%ConEmuDir%\..\git-for-windows\usr\bin\mintty.exe" /bin/bash -l"/>
|
||||
<value name="Active" type="long" data="0"/>
|
||||
<value name="Count" type="long" data="1"/>
|
||||
</key>
|
||||
<key name="Task6" modified="2018-02-22 06:05:13" build="171109">
|
||||
<value name="Name" type="string" data="{bash::mintty}"/>
|
||||
<value name="Flags" type="dword" data="00000000"/>
|
||||
<value name="Hotkey" type="dword" data="00000000"/>
|
||||
<value name="GuiArgs" type="string" data="/icon "%ConEmuDir%\..\git-for-windows\usr\share\git\git-for-windows.ico""/>
|
||||
<value name="Cmd1" type="string" data=""%ConEmuDir%\..\git-for-windows\usr\bin\mintty.exe" /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"/>
|
||||
</key>
|
||||
<key name="Task7" modified="2018-02-22 06:05:13" build="171109">
|
||||
<value name="Name" type="string" data="{bash::bash as Admin}"/>
|
||||
<value name="Flags" type="dword" data="00000000"/>
|
||||
<value name="Hotkey" type="dword" data="00000000"/>
|
||||
<value name="GuiArgs" type="string" data=" /icon "%CMDER_ROOT%\icons\cmder.ico""/>
|
||||
<value name="Active" type="long" data="0"/>
|
||||
<value name="Count" type="long" data="1"/>
|
||||
<value name="Cmd1" type="string" data="*"%ConEmuDir%\..\git-for-windows\usr\bin\bash.exe" --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 "%CMDER_ROOT%\icons\cmder.ico""/>
|
||||
<value name="Cmd1" type="string" data=""%ConEmuDir%\..\git-for-windows\usr\bin\bash.exe" --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%" & %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>
|
||||
</key>
|
||||
|
||||
<key name="Apps" modified="2015-05-17 22:10:27" build="150513">
|
||||
<value name="Count" type="dword" data="00000000"/>
|
||||
<key name="Apps" modified="2018-02-22 06:05:13" build="171109">
|
||||
<value name="Count" type="long" data="0"/>
|
||||
</key>
|
||||
<key name="Colors" modified="2015-05-17 22:10:27" build="150513">
|
||||
<key name="Palette1" modified="2015-05-17 22:10:27" build="150513">
|
||||
<key name="Colors" modified="2018-02-22 06:05:13" build="171109">
|
||||
<key name="Palette1" modified="2018-02-22 06:05:13" build="171109">
|
||||
<value name="Name" type="string" data="Monokai"/>
|
||||
<value name="ExtendColors" type="hex" data="00"/>
|
||||
<value name="ExtendColorIdx" type="hex" data="0e"/>
|
||||
@ -568,11 +616,11 @@
|
||||
<value name="ColorTable30" type="dword" data="0000ffff"/>
|
||||
<value name="ColorTable31" type="dword" data="00ffffff"/>
|
||||
</key>
|
||||
<value name="Count" type="dword" data="00000001"/>
|
||||
<value name="Count" type="long" data="1"/>
|
||||
</key>
|
||||
<value name="OneTabPerGroup" type="hex" data="00"/>
|
||||
<value name="ActivateSplitMouseOver" type="hex" data="01"/>
|
||||
<value name="TabBtnDblClick" type="dword" data="00000000"/>
|
||||
<value name="TabBtnDblClick" type="ulong" data="0"/>
|
||||
<value name="ConsoleExceptionHandler" type="hex" data="00"/>
|
||||
<value name="SaveCmdHistory" type="hex" data="00"/>
|
||||
<value name="CTS.IBeam" type="hex" data="01"/>
|
||||
@ -626,9 +674,9 @@
|
||||
<value name="StatusBar.Hide.WVDC" type="hex" data="01"/>
|
||||
<value name="StatusBar.Hide.Zoom" type="hex" data="01"/>
|
||||
<value name="StatusBar.Hide.Dpi" type="hex" data="01"/>
|
||||
<value name="TabFlashChanged" type="dword" data="00000008"/>
|
||||
<value name="TabFlashChanged" type="long" data="8"/>
|
||||
<value name="TabModifiedSuffix" type="string" data="[*]"/>
|
||||
<key name="HotKeys" modified="2015-05-17 22:10:27" build="150513">
|
||||
<key name="HotKeys" modified="2018-02-22 06:02:12" build="171109">
|
||||
<value name="KeyMacroVersion" type="hex" data="02"/>
|
||||
<value name="Multi.Modifier" type="dword" data="00000011"/>
|
||||
<value name="Multi.ArrowsModifier" type="dword" data="0000005b"/>
|
||||
@ -734,27 +782,27 @@
|
||||
<value name="PastePathKey" type="dword" data="00101144"/>
|
||||
<value name="PasteCygwinKey" type="dword" data="00005d2d"/>
|
||||
<value name="KeyMacro01" type="dword" data="00a01231"/>
|
||||
<value name="KeyMacro01.Text" type="string" data="Task("cmd")"/>
|
||||
<value name="KeyMacro01.Text" type="string" data="Task(1)"/>
|
||||
<value name="KeyMacro02" type="dword" data="00a01232"/>
|
||||
<value name="KeyMacro02.Text" type="string" data="Task("PowerShell")"/>
|
||||
<value name="KeyMacro02.Text" type="string" data="Task(2)"/>
|
||||
<value name="KeyMacro03" type="dword" data="000011d0"/>
|
||||
<value name="KeyMacro03.Text" type="string" data="FontSetSize(1,2)"/>
|
||||
<value name="KeyMacro04" type="dword" data="000011d1"/>
|
||||
<value name="KeyMacro04.Text" type="string" data="FontSetSize(1,-2)"/>
|
||||
<value name="KeyMacro05" type="dword" data="00a01233"/>
|
||||
<value name="KeyMacro05.Text" type="string" data="Task("PowerShell as Admin")"/>
|
||||
<value name="KeyMacro06" type="dword" data="00000000"/>
|
||||
<value name="KeyMacro06.Text" type="string" data=""/>
|
||||
<value name="KeyMacro07" type="dword" data="00000000"/>
|
||||
<value name="KeyMacro07.Text" type="string" data=""/>
|
||||
<value name="KeyMacro08" type="dword" data="00000000"/>
|
||||
<value name="KeyMacro08.Text" type="string" data=""/>
|
||||
<value name="KeyMacro09" type="dword" data="00000000"/>
|
||||
<value name="KeyMacro09.Text" type="string" data=""/>
|
||||
<value name="KeyMacro10" type="dword" data="00000000"/>
|
||||
<value name="KeyMacro10.Text" type="string" data=""/>
|
||||
<value name="KeyMacro11" type="dword" data="00000000"/>
|
||||
<value name="KeyMacro11.Text" type="string" data=""/>
|
||||
<value name="KeyMacro05.Text" type="string" data="Task(3)"/>
|
||||
<value name="KeyMacro06" type="dword" data="00a01234"/>
|
||||
<value name="KeyMacro06.Text" type="string" data="Task(4)"/>
|
||||
<value name="KeyMacro07" type="dword" data="00a01235"/>
|
||||
<value name="KeyMacro07.Text" type="string" data="Task(5)"/>
|
||||
<value name="KeyMacro08" type="dword" data="00a01236"/>
|
||||
<value name="KeyMacro08.Text" type="string" data="Task(6)"/>
|
||||
<value name="KeyMacro09" type="dword" data="00a01237"/>
|
||||
<value name="KeyMacro09.Text" type="string" data="Task(7)"/>
|
||||
<value name="KeyMacro10" type="dword" data="00a01238"/>
|
||||
<value name="KeyMacro10.Text" type="string" data="Task(8)"/>
|
||||
<value name="KeyMacro11" type="dword" data="00a01239"/>
|
||||
<value name="KeyMacro11.Text" type="string" data="Task(9)"/>
|
||||
<value name="KeyMacro12" type="dword" data="00000000"/>
|
||||
<value name="KeyMacro12.Text" type="string" data=""/>
|
||||
<value name="KeyMacro13" type="dword" data="00000000"/>
|
||||
@ -805,7 +853,55 @@
|
||||
<value name="DndLKey" type="hex" data="00"/>
|
||||
<value name="DndRKey" type="hex" data="a2"/>
|
||||
<value name="WndDragKey" type="dword" data="00121101"/>
|
||||
<value name="Multi.Unfasten" type="dword" data="00000000"/>
|
||||
<value name="Key.DebugProcess" type="dword" data="00105b44"/>
|
||||
<value name="Key.DumpProcess" type="dword" data="00000000"/>
|
||||
<value name="Key.DumpTree" type="dword" data="00000000"/>
|
||||
<value name="Multi.SplitSwap" type="dword" data="00125d58"/>
|
||||
<value name="Multi.SplitSwapU" type="dword" data="00125d26"/>
|
||||
<value name="Multi.SplitSwapD" type="dword" data="00125d28"/>
|
||||
<value name="Multi.SplitSwapL" type="dword" data="00125d25"/>
|
||||
<value name="Multi.SplitSwapR" type="dword" data="00125d27"/>
|
||||
<value name="Multi.GroupInputAll" type="dword" data="00105d47"/>
|
||||
<value name="Multi.GroupInputKey" type="dword" data="00125d47"/>
|
||||
<value name="Key.AltNumpad" type="dword" data="00000000"/>
|
||||
<value name="Key.JumpActiveMonitor" type="dword" data="00000000"/>
|
||||
<value name="Key.BufPrUp" type="dword" data="00121121"/>
|
||||
<value name="Key.BufPrDn" type="dword" data="00121122"/>
|
||||
<value name="Key.ResetTerm" type="dword" data="00000000"/>
|
||||
</key>
|
||||
<value name="StartCreateDelay" type="ulong" data="100"/>
|
||||
<value name="DefaultTerminalDebugLog" type="hex" data="00"/>
|
||||
<value name="LastMonitor" type="string" data="0,0,1440,1050"/>
|
||||
<value name="Restore2ActiveMon" type="hex" data="00"/>
|
||||
<value name="DownShowExOnTopMessage" type="hex" data="00"/>
|
||||
<value name="EnvironmentSet" type="multi">
|
||||
<line data="set PATH=%ConEmuBaseDir%\Scripts;%PATH%"/>
|
||||
</value>
|
||||
<value name="Update.InetTool" type="hex" data="00"/>
|
||||
<value name="Update.InetToolCmd" type="string" data=""/>
|
||||
<value name="SuppressBells" type="hex" data="01"/>
|
||||
<value name="ClipboardAllLinesPosix" type="hex" data="00"/>
|
||||
<value name="ClipboardFirstLinePosix" type="hex" data="00"/>
|
||||
<value name="VividColors" type="hex" data="01"/>
|
||||
<value name="AnsiExecution" type="hex" data="01"/>
|
||||
<value name="AnsiAllowedCommands" type="multi">
|
||||
<line data="cmd -cur_console:R /cGitShowBranch.cmd"/>
|
||||
</value>
|
||||
<value name="KillSshAgent" type="hex" data="01"/>
|
||||
<value name="ProcessCtrlZ" type="hex" data="00"/>
|
||||
<value name="JumpListAutoUpdate" type="hex" data="01"/>
|
||||
<value name="CompressLongStrings" type="hex" data="01"/>
|
||||
<value name="DynamicBufferHeight" type="hex" data="01"/>
|
||||
<value name="CTS.ResetOnRelease" type="hex" data="00"/>
|
||||
<value name="CTS.EraseBeforeReset" type="hex" data="01"/>
|
||||
<value name="Anti-aliasing2" type="hex" data="00"/>
|
||||
<value name="UseAltGrayPlus" type="hex" data="01"/>
|
||||
<value name="MouseDragWindow" type="hex" data="01"/>
|
||||
<value name="DebugLog" type="hex" data="00"/>
|
||||
<value name="StatusBar.Hide.TMode" type="hex" data="01"/>
|
||||
<value name="StatusBar.Hide.RMode" type="hex" data="01"/>
|
||||
<value name="StatusBar.Hide.CellI" type="hex" data="01"/>
|
||||
</key>
|
||||
</key>
|
||||
</key>
|
149
vendor/bin/alias.cmd
vendored
Normal file
@ -0,0 +1,149 @@
|
||||
@echo off
|
||||
|
||||
|
||||
if "%ALIASES%" == "" (
|
||||
set ALIASES="%CMDER_ROOT%\config\user_aliases.cmd"
|
||||
)
|
||||
|
||||
setlocal enabledelayedexpansion
|
||||
|
||||
if "%~1" == "" echo Use /? for help & echo. & goto :p_show
|
||||
|
||||
:: check command usage
|
||||
|
||||
rem #region parseargument
|
||||
goto parseargument
|
||||
|
||||
:do_shift
|
||||
shift
|
||||
|
||||
:parseargument
|
||||
set currentarg=%~1
|
||||
|
||||
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" (
|
||||
if "%~2" neq "" (
|
||||
if "%~3" equ "" (
|
||||
:: /d flag for delete existing alias
|
||||
call :p_del %~2
|
||||
shift
|
||||
goto :eof
|
||||
)
|
||||
)
|
||||
) else if "%currentarg%" neq "" (
|
||||
if "%~2" equ "" (
|
||||
:: Show the specified alias
|
||||
doskey /macros | %WINDIR%\System32\findstr /b %currentarg%= && exit /b
|
||||
echo insufficient parameters.
|
||||
goto :p_help
|
||||
) else (
|
||||
:: handle quotes within command definition, e.g. quoted long file names
|
||||
set _x=%*
|
||||
)
|
||||
)
|
||||
|
||||
rem #endregion parseargument
|
||||
|
||||
if "%ALIASES%" neq "%CMDER_ROOT%\config\user_aliases.cmd" (
|
||||
set _x=!_x:/f "%ALIASES%" =!
|
||||
|
||||
if not exist "%ALIASES%" (
|
||||
echo ;= @echo off>"%ALIASES%"
|
||||
echo ;= rem Call DOSKEY and use this file as the macrofile>>"%ALIASES%"
|
||||
echo ;= %%SystemRoot%%\system32\doskey /listsize=1000 /macrofile=%%0%%>>"%ALIASES%"
|
||||
echo ;= rem In batch mode, jump to the end of the file>>"%ALIASES%"
|
||||
echo ;= goto:eof>>"%ALIASES%"
|
||||
echo ;= Add aliases below here>>"%ALIASES%"
|
||||
)
|
||||
)
|
||||
|
||||
:: validate alias
|
||||
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!
|
||||
|
||||
:: trailing quotes added while validating
|
||||
set alias_value=!alias_value:~0,-1!
|
||||
|
||||
::remove spaces
|
||||
set _temp=%alias_name: =%
|
||||
|
||||
if not ["%_temp%"] == ["%alias_name%"] (
|
||||
echo Your alias name can not contain a space
|
||||
endlocal
|
||||
exit /b
|
||||
)
|
||||
|
||||
:: replace already defined alias
|
||||
%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
|
||||
exit /b
|
||||
|
||||
:p_del
|
||||
set del_alias=%~1
|
||||
|
||||
%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%"
|
||||
goto:eof
|
||||
|
||||
:p_reload
|
||||
doskey /macrofile="%ALIASES%"
|
||||
echo Aliases reloaded
|
||||
exit /b
|
||||
|
||||
:p_show
|
||||
doskey /macros|%WINDIR%\System32\findstr /v /r "^;=" | sort
|
||||
exit /b
|
||||
|
||||
:p_help
|
||||
echo.Usage:
|
||||
echo.
|
||||
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. /reload Reload the aliases file. Can be used with /f argument.
|
||||
echo. Default: %cmder_root%\config\user_aliases.cmd
|
||||
echo.
|
||||
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. For more information, read DOSKEY /?
|
||||
exit /b
|
133
vendor/bin/cexec.cmd
vendored
Normal 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
@ -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
@ -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
@ -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
@ -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
|
22
vendor/bin/timer.cmd
vendored
Normal 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
@ -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
@ -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!
|
650
vendor/clink.lua
vendored
Normal file
@ -0,0 +1,650 @@
|
||||
-- default script for clink, called by init.bat when injecting clink
|
||||
|
||||
-- !!! THIS FILE IS OVERWRITTEN WHEN CMDER IS UPDATED
|
||||
-- !!! Use "%CMDER_ROOT%\config\<whatever>.lua" to add your lua startup scripts
|
||||
|
||||
-- luacheck: globals clink
|
||||
|
||||
-- At first, load the original clink.lua file
|
||||
-- this is needed as we set the script path to this dir and therefore the original
|
||||
-- clink.lua is not loaded.
|
||||
local clink_lua_file = clink.get_env('CMDER_ROOT')..'\\vendor\\clink\\clink.lua'
|
||||
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[1;37;49m"
|
||||
end
|
||||
|
||||
|
||||
local function get_dirty_color()
|
||||
return dirty_color or "\x1b[33;3m"
|
||||
end
|
||||
|
||||
|
||||
local function get_conflict_color()
|
||||
return conflict_color or "\x1b[31;1m"
|
||||
end
|
||||
|
||||
local function get_unknown_color()
|
||||
return unknown_color or "\x1b[37;1m"
|
||||
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
|
||||
-- which echo) don't get the ugly '{lamb}' shown.
|
||||
---
|
||||
local function set_prompt_filter()
|
||||
-- get_cwd() is differently encoded than the clink.prompt.value, so everything other than
|
||||
-- pure ASCII will get garbled. So try to parse the current directory from the original prompt
|
||||
-- and only if that doesn't work, use get_cwd() directly.
|
||||
-- The matching relies on the default prompt which ends in X:\PATH\PATH>
|
||||
-- (no network path possible here!)
|
||||
local old_prompt = clink.prompt.value
|
||||
local cwd = old_prompt:match('.*(.:[^>]*)>')
|
||||
if cwd == nil then cwd = clink.get_cwd() end
|
||||
|
||||
-- environment systems like pythons virtualenv change the PROMPT and usually
|
||||
-- set some variable. But the variables are differently named and we would never
|
||||
-- get them all, so try to parse the env name out of the PROMPT.
|
||||
-- envs are usually put in round or square parentheses and before the old prompt
|
||||
local env = old_prompt:match('.*%(([^%)]+)%).+:')
|
||||
-- also check for square brackets
|
||||
if env == nil then env = old_prompt:match('.*%[([^%]]+)%].+:') end
|
||||
|
||||
-- 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
|
||||
|
||||
-- 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
|
||||
|
||||
uah = ''
|
||||
if prompt_useUserAtHost then
|
||||
uah = clink.get_env("USERNAME") .. "@" .. clink.get_env("COMPUTERNAME") .. ' '
|
||||
end
|
||||
|
||||
cr = "\n"
|
||||
if prompt_singleLine then
|
||||
cr = ' '
|
||||
end
|
||||
|
||||
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 ""
|
||||
|
||||
prompt = "{uah}{cwd}" .. version_control .. get_lamb_color() .. cr .. "{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
|
||||
|
||||
---
|
||||
-- Resolves closest directory location for specified directory.
|
||||
-- Navigates subsequently up one level and tries to find specified directory
|
||||
-- @param {string} path Path to directory will be checked. If not provided
|
||||
-- current directory will be used
|
||||
-- @param {string} dirname Directory name to search for
|
||||
-- @return {string} Path to specified directory or nil if such dir not found
|
||||
local function get_dir_contains(path, dirname)
|
||||
|
||||
-- return parent path for specified entry (either file or directory)
|
||||
local function pathname(path)
|
||||
local prefix = ""
|
||||
local i = path:find("[\\/:][^\\/:]*$")
|
||||
if i then
|
||||
prefix = path:sub(1, i-1)
|
||||
end
|
||||
return prefix
|
||||
end
|
||||
|
||||
-- Navigates up one level
|
||||
local function up_one_level(path)
|
||||
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)
|
||||
if path == nil then path = '.' end
|
||||
local found_dirs = clink.find_dirs(path..'/'..specified_dir)
|
||||
if #found_dirs > 0 then return true end
|
||||
return false
|
||||
end
|
||||
|
||||
-- Set default path to current directory
|
||||
if path == nil then path = '.' end
|
||||
|
||||
-- If we're already have .git directory here, then return current path
|
||||
if has_specified_dir(path, dirname) then
|
||||
return path..'/'..dirname
|
||||
else
|
||||
-- Otherwise go up one level and make a recursive call
|
||||
local parent_path = up_one_level(path)
|
||||
if parent_path == path then
|
||||
return nil
|
||||
else
|
||||
return get_dir_contains(parent_path, dirname)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
-- adapted from from clink-completions' git.lua
|
||||
local function get_git_dir(path)
|
||||
|
||||
-- return parent path for specified entry (either file or directory)
|
||||
local function pathname(path)
|
||||
local prefix = ""
|
||||
local i = path:find("[\\/:][^\\/:]*$")
|
||||
if i then
|
||||
prefix = path:sub(1, i-1)
|
||||
end
|
||||
|
||||
return prefix
|
||||
end
|
||||
|
||||
-- Checks if provided directory contains git directory
|
||||
local function has_git_dir(dir)
|
||||
return clink.is_dir(dir..'/.git') and dir..'/.git'
|
||||
end
|
||||
|
||||
local function has_git_file(dir)
|
||||
local gitfile = io.open(dir..'/.git')
|
||||
if not gitfile then return false end
|
||||
|
||||
local git_dir = gitfile:read():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
|
||||
|
||||
-- Set default path to current directory
|
||||
if not path or path == '.' then path = clink.get_cwd() end
|
||||
|
||||
-- Calculate parent path now otherwise we won't be
|
||||
-- able to do that inside of logical operator
|
||||
local parent_path = pathname(path)
|
||||
|
||||
return has_git_dir(path)
|
||||
or has_git_file(path)
|
||||
-- Otherwise go up one level and make a recursive call
|
||||
or (parent_path ~= path and get_git_dir(parent_path) or nil)
|
||||
end
|
||||
|
||||
local function get_hg_dir(path)
|
||||
return get_dir_contains(path, '.hg')
|
||||
end
|
||||
|
||||
local function get_svn_dir(path)
|
||||
return get_dir_contains(path, '.svn')
|
||||
end
|
||||
|
||||
---
|
||||
-- Find out current branch
|
||||
-- @return {nil|git branch name}
|
||||
---
|
||||
local function get_git_branch(git_dir)
|
||||
git_dir = git_dir or get_git_dir()
|
||||
|
||||
-- If git directory not found then we're probably outside of repo
|
||||
-- or something went wrong. The same is when head_file is nil
|
||||
local head_file = git_dir and io.open(git_dir..'/HEAD')
|
||||
if not head_file then return end
|
||||
|
||||
local HEAD = head_file:read()
|
||||
head_file:close()
|
||||
|
||||
-- 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/(.+)')
|
||||
|
||||
return branch_name or 'HEAD detached at '..HEAD:sub(1, 7)
|
||||
end
|
||||
|
||||
---
|
||||
-- Find out current branch information
|
||||
-- @return {false|mercurial branch information}
|
||||
---
|
||||
local function get_hg_branch()
|
||||
-- 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)
|
||||
|
||||
for line in file:lines() do
|
||||
local m = line:match("(.+)$")
|
||||
if m then
|
||||
file:close()
|
||||
return m
|
||||
end
|
||||
end
|
||||
file:close()
|
||||
|
||||
return false
|
||||
end
|
||||
|
||||
---
|
||||
-- Find out current branch
|
||||
-- @return {false|svn branch name}
|
||||
---
|
||||
local function get_svn_branch(svn_dir)
|
||||
local file = io_popenyield("svn info 2>nul")
|
||||
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 and conflict status of working dir
|
||||
-- @return {bool <status>, bool <is_conflict>}
|
||||
---
|
||||
local function get_git_status()
|
||||
local file = io_popenyield("git --no-optional-locks status --porcelain 2>nul")
|
||||
local conflict_found = false
|
||||
local is_status = true
|
||||
for line in file:lines() do
|
||||
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
|
||||
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 { 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
|
||||
file:close()
|
||||
return false
|
||||
end
|
||||
file:close()
|
||||
|
||||
return true
|
||||
end
|
||||
|
||||
---
|
||||
-- Get the status of working dir
|
||||
-- @return {bool}
|
||||
---
|
||||
local function get_svn_status()
|
||||
local file = io_popenyield("svn status -q")
|
||||
for line in file:lines() do
|
||||
file:close()
|
||||
return false
|
||||
end
|
||||
file:close()
|
||||
|
||||
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 ()
|
||||
return get_git_status()
|
||||
end)
|
||||
if not info then
|
||||
info = cached_info.git_info or {}
|
||||
else
|
||||
cached_info.git_info = info
|
||||
end
|
||||
return info
|
||||
end
|
||||
|
||||
---
|
||||
-- Get the status of working dir
|
||||
-- @return {bool}
|
||||
---
|
||||
local function get_git_status_setting()
|
||||
-- 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
|
||||
return true
|
||||
end
|
||||
end
|
||||
|
||||
local gitStatusConfig = io.popen("git --no-pager config cmder.status 2>nul")
|
||||
|
||||
for line in gitStatusConfig:lines() do
|
||||
if string.match(line, 'false') then
|
||||
gitStatusConfig:close()
|
||||
return false
|
||||
end
|
||||
end
|
||||
|
||||
local gitCmdStatusConfig = io.popen("git --no-pager config cmder.cmdstatus 2>nul")
|
||||
for line in gitCmdStatusConfig:lines() do
|
||||
if string.match(line, 'false') then
|
||||
gitCmdStatusConfig:close()
|
||||
return false
|
||||
end
|
||||
end
|
||||
gitStatusConfig:close()
|
||||
gitCmdStatusConfig:close()
|
||||
|
||||
return true
|
||||
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 = get_clean_color(),
|
||||
dirty = get_dirty_color(),
|
||||
conflict = get_conflict_color(),
|
||||
nostatus = get_unknown_color()
|
||||
}
|
||||
|
||||
local git_dir = get_git_dir()
|
||||
local color
|
||||
cmderGitStatusOptIn = get_git_status_setting()
|
||||
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
|
||||
-- Use git status if allowed.
|
||||
if cmderGitStatusOptIn then
|
||||
-- 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
|
||||
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
|
||||
|
||||
if gitConflict then
|
||||
color = colors.conflict
|
||||
end
|
||||
else
|
||||
color = colors.nostatus
|
||||
end
|
||||
clink.prompt.value = string.gsub(clink.prompt.value, "{git}", " "..color.."("..verbatim(branch)..")")
|
||||
return false
|
||||
end
|
||||
end
|
||||
|
||||
-- No git present or not in git file
|
||||
clink.prompt.value = string.gsub(clink.prompt.value, "{git}", "")
|
||||
return false
|
||||
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 result = ""
|
||||
|
||||
local hg_dir = get_hg_dir()
|
||||
if hg_dir then
|
||||
-- Colors for mercurial status
|
||||
local colors = {
|
||||
clean = get_clean_color(),
|
||||
dirty = get_dirty_color(),
|
||||
nostatus = get_unknown_color()
|
||||
}
|
||||
local output = get_hg_branch()
|
||||
|
||||
-- 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")
|
||||
local output = pipe:read('*all')
|
||||
local rc = { pipe:close() }
|
||||
|
||||
if output ~= nil and output ~= "" then color = colors.dirty end
|
||||
result = color .. "(" .. branch .. ")"
|
||||
end
|
||||
end
|
||||
|
||||
clink.prompt.value = string.gsub(clink.prompt.value, "{hg}", " "..verbatim(result))
|
||||
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 = get_clean_color(),
|
||||
dirty = get_dirty_color(),
|
||||
nostatus = get_unknown_color()
|
||||
}
|
||||
|
||||
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 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
|
||||
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
|
||||
|
||||
if svnStatus == nil then
|
||||
color = colors.nostatus
|
||||
elseif svnStatus then
|
||||
color = colors.clean
|
||||
else
|
||||
color = colors.dirty
|
||||
end
|
||||
|
||||
clink.prompt.value = string.gsub(clink.prompt.value, "{svn}", " "..color.."("..verbatim(branch)..")")
|
||||
return false
|
||||
end
|
||||
end
|
||||
|
||||
-- No svn present or not in svn file
|
||||
clink.prompt.value = string.gsub(clink.prompt.value, "{svn}", "")
|
||||
return false
|
||||
end
|
||||
|
||||
-- insert the set_prompt at the very beginning so that it runs first
|
||||
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
|
||||
local filename = completions_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
|
||||
|
||||
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
|
19
vendor/clink_settings.default
vendored
Normal file
@ -0,0 +1,19 @@
|
||||
# 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 = False
|
||||
|
||||
# name: The number of history lines to save
|
||||
# type: integer
|
||||
history.max_lines = 10000
|
||||
|
||||
# name: Share history between instances
|
||||
# type: boolean
|
||||
history.shared = True
|
99
vendor/cmder.sh
vendored
Normal file
@ -0,0 +1,99 @@
|
||||
# DO NOT EDIT THIS FILE IT WILL BE OVERWRITTEN ON UPDATE
|
||||
#
|
||||
# Add portable user customizations ${CMDER_ROOT}/config/user_profile.sh,
|
||||
# these customizations will follow Cmder if $CMDER_ROOT is copied
|
||||
# to another machine.
|
||||
#
|
||||
# Add system specific users customizations to $HOME/.bashrc, these
|
||||
# customizations will not follow Cmder to another machine.
|
||||
|
||||
function runProfiled {
|
||||
unset profile_d_scripts
|
||||
pushd "${1}" >/dev/null
|
||||
profile_d_scripts=$(ls *.sh 2>/dev/null)
|
||||
|
||||
if [ ! "x${profile_d_scripts}" = "x" ] ; then
|
||||
for x in ${profile_d_scripts} ; do
|
||||
# echo Sourcing "${1}/${x}"...
|
||||
. "${1}/${x}"
|
||||
done
|
||||
fi
|
||||
popd >/dev/null
|
||||
}
|
||||
|
||||
# We do this for bash as admin sessions since $CMDER_ROOT is not being set
|
||||
if [ "$CMDER_ROOT" == "" ] ; then
|
||||
case "$ConEmuDir" in *\\*) CMDER_ROOT=$( cd "$(cygpath -u "$ConEmuDir")/../.." ; pwd );; esac
|
||||
else
|
||||
case "$CMDER_ROOT" in *\\*) CMDER_ROOT="$(cygpath -u "$CMDER_ROOT")";; esac
|
||||
fi
|
||||
|
||||
# Remove any trailing '/'
|
||||
CMDER_ROOT=$(echo $CMDER_ROOT | sed 's:/*$::')
|
||||
|
||||
export CMDER_ROOT
|
||||
|
||||
if [ -d "/c/Program Files/Git" ] ; then
|
||||
GIT_INSTALL_ROOT="/c/Program Files/Git"
|
||||
elif [ -d "/c/Program Files(x86)/Git" ] ; then
|
||||
GIT_INSTALL_ROOT="/c/Program Files(x86)/Git"
|
||||
elif [ -d "${CMDER_ROOT}/vendor/git-for-windows" ] ; then
|
||||
GIT_INSTALL_ROOT=${CMDER_ROOT}/vendor/git-for-windows
|
||||
fi
|
||||
|
||||
if [[ ! "$PATH" =~ "${GIT_INSTALL_ROOT}/bin:" ]] ; then
|
||||
PATH="${GIT_INSTALL_ROOT}/bin:$PATH"
|
||||
fi
|
||||
|
||||
PATH="${CMDER_ROOT}/bin:${CMDER_ROOT}/vendor/bin:$PATH:${CMDER_ROOT}"
|
||||
|
||||
export PATH
|
||||
|
||||
# Drop *.sh or *.zsh files into "${CMDER_ROOT}\config\profile.d"
|
||||
# to source them at startup.
|
||||
if [ ! -d "${CMDER_ROOT}/config/profile.d" ] ; then
|
||||
mkdir -p "${CMDER_ROOT}/config/profile.d"
|
||||
fi
|
||||
|
||||
if [ -d "${CMDER_ROOT}/config/profile.d" ] ; then
|
||||
runProfiled "${CMDER_ROOT}/config/profile.d"
|
||||
fi
|
||||
|
||||
if [ -d "${CMDER_USER_CONFIG}/profile.d" ] ; then
|
||||
runProfiled "${CMDER_USER_CONFIG}/profile.d"
|
||||
fi
|
||||
|
||||
|
||||
# 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 [ "${CMDER_USER_CONFIG}" != "" ] ; then
|
||||
# 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
|
||||
|
||||
export PATH="${CMDER_USER_CONFIG}/bin:$PATH"
|
||||
|
||||
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
|
||||
if [ -f "${HOME}/.bashrc" ] ; then
|
||||
. "${HOME}/.bashrc"
|
||||
fi
|
113
vendor/cmder_exinit
vendored
Normal file
@ -0,0 +1,113 @@
|
||||
# Copy this file to your non integrated *nix-like environment,
|
||||
# Cygwin/MSys2/Git for Windows SDK, installs '/etc/profile.d/'
|
||||
# folder to integrate the externally installed Unix like environment
|
||||
# into Cmder so it has access to settings stored in Cmder/config
|
||||
# folder when launched.
|
||||
#
|
||||
# The destination file extension depends on the shell you use. For example:
|
||||
#
|
||||
# bash - Copy to /etc/profile.d/cmder_exinit.sh
|
||||
# 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 this file and be applied to the environment at startup.
|
||||
#
|
||||
# These customizations will follow Cmder if $CMDER_ROOT is copied
|
||||
# to another machine.
|
||||
#
|
||||
# Add system specific users customizations to $HOME/.bashrc, these
|
||||
# customizations will not follow Cmder to another machine.
|
||||
|
||||
# # Uncomment and edit the CMDER_ROOT line to use Cmder/config even when launched
|
||||
# # from outside Cmder.
|
||||
# CMDER_ROOT=${USERPROFILE}/cmder # This is not required if launched from Cmder.
|
||||
|
||||
function runProfiled {
|
||||
unset profile_d_scripts
|
||||
pushd "${1}" >/dev/null
|
||||
|
||||
if [ ! "x${ZSH_VERSION}" = "x" ]; then
|
||||
profile_d_scripts=$(ls *.zsh 2>/dev/null)
|
||||
elif [ ! "x${BASH_VERSION}" = "x" ]; then
|
||||
profile_d_scripts=$(ls *.sh 2>/dev/null)
|
||||
fi
|
||||
|
||||
if [ ! "x${profile_d_scripts}" = "x" ] ; then
|
||||
for x in ${profile_d_scripts} ; do
|
||||
echo Sourcing "${1}/${x}"...
|
||||
. "${1}/${x}"
|
||||
done
|
||||
fi
|
||||
popd >/dev/null
|
||||
}
|
||||
|
||||
# Check that we haven't already been sourced.
|
||||
[[ -z ${CMDER_EXINIT} ]] && CMDER_EXINIT="1" || return
|
||||
|
||||
# We do this for bash as admin sessions since $CMDER_ROOT is not being set
|
||||
if [ "$CMDER_ROOT" = "" -a "$ConEmuDir" != "" ] ; then
|
||||
if [ -d "${ConEmuDir}../../vendor" ] ; then
|
||||
case "$ConEmuDir" in *\\*) CMDER_ROOT=$( cd "$(cygpath -u "$ConEmuDir")/../.." ; pwd );; esac
|
||||
else
|
||||
echo "Running in ConEmu without Cmder, skipping Cmder integration."
|
||||
fi
|
||||
elif [ "$CMDER_ROOT" != "" ] ; then
|
||||
case "$CMDER_ROOT" in *\\*) CMDER_ROOT="$(cygpath -u "$CMDER_ROOT")";; esac
|
||||
fi
|
||||
|
||||
if [ ! "$CMDER_ROOT" = "" ] ; then
|
||||
# Remove any trailing '/'
|
||||
CMDER_ROOT=$(echo $CMDER_ROOT | sed 's:/*$::')
|
||||
|
||||
echo "Using \"CMDER_ROOT\" at \"${CMDER_ROOT}\"."
|
||||
|
||||
export CMDER_ROOT
|
||||
|
||||
PATH=${CMDER_ROOT}/bin:${CMDER_ROOT}/vendor/bin:$PATH:${CMDER_ROOT}
|
||||
|
||||
export PATH
|
||||
|
||||
# Drop *.sh or *.zsh files into "${CMDER_ROOT}\config\profile.d"
|
||||
# to source them at startup.
|
||||
if [ ! -d "${CMDER_ROOT}/config/profile.d" ] ; then
|
||||
mkdir -p "${CMDER_ROOT}/config/profile.d"
|
||||
fi
|
||||
|
||||
if [ -d "${CMDER_ROOT}/config/profile.d" ] ; then
|
||||
runProfiled "${CMDER_ROOT}/config/profile.d"
|
||||
fi
|
||||
|
||||
if [ -d "${CMDER_USER_CONFIG}/profile.d" ] ; then
|
||||
runProfiled "${CMDER_USER_CONFIG}/profile.d"
|
||||
fi
|
||||
|
||||
|
||||
# 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 [ "${CMDER_USER_CONFIG}" != "" ] ; then
|
||||
# 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
|
||||
|
||||
export PATH=${CMDER_USER_CONFIG}/bin:$PATH
|
||||
|
||||
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
|
60
vendor/cmder_prompt_config.lua.default
vendored
Normal file
@ -0,0 +1,60 @@
|
||||
-- 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
|
||||
-- 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[1;37;49m"
|
||||
dirty_color = "\x1b[33;3m"
|
||||
conflict_color = "\x1b[31;1m"
|
||||
unknown_color = "\x1b[37;1m" -- White = No VCS Status Branch Color
|
74
vendor/git-prompt.sh
vendored
Normal file
@ -0,0 +1,74 @@
|
||||
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}
|
||||
else
|
||||
TITLEPREFIX=$MSYSTEM
|
||||
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
|
||||
PS1="$PS1"'\[\033[32m\]' # change to green
|
||||
PS1="$PS1"'\u@\h ' # user@host<space>
|
||||
# PS1="$PS1"'\[\033[35m\]' # change to purple
|
||||
# PS1="$PS1"'$MSYSTEM ' # show MSYSTEM
|
||||
PS1="$PS1"'\[\033[33m\]' # change to brownish yellow
|
||||
PS1="$PS1"'\w' # current working directory
|
||||
if test -z "$WINELOADERNOEXEC"
|
||||
then
|
||||
GIT_EXEC_PATH="$(git --exec-path 2>/dev/null)"
|
||||
COMPLETION_PATH="${GIT_EXEC_PATH%/libexec/git-core}"
|
||||
COMPLETION_PATH="${COMPLETION_PATH%/lib/git-core}"
|
||||
COMPLETION_PATH="$COMPLETION_PATH/share/git/completion"
|
||||
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
|
||||
PS1="$PS1"'\n' # new line
|
||||
PS1="$PS1"'λ ' # prompt: always λ
|
||||
fi
|
||||
|
||||
MSYS2_PS1="$PS1" # for detection by MSYS2 SDK's bash.basrc
|
497
vendor/init.bat
vendored
@ -1,63 +1,448 @@
|
||||
@echo off
|
||||
|
||||
set CMDER_INIT_START=%time%
|
||||
|
||||
:: Init Script for cmd.exe
|
||||
:: Sets some nice defaults
|
||||
:: 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 /v command line arg or set to > 0 for verbose output to aid in debugging.
|
||||
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 thr path.
|
||||
if not defined nix_tools set nix_tools=1
|
||||
|
||||
set "CMDER_USER_FLAGS= "
|
||||
|
||||
:: Find root dir
|
||||
@if not defined CMDER_ROOT (
|
||||
for /f "delims=" %%i in ("%ConEmuDir%\..\..") do @set CMDER_ROOT=%%~fi
|
||||
)
|
||||
|
||||
:: Change the prompt style
|
||||
:: Mmm tasty lamb
|
||||
@prompt $E[1;32;40m$P$S{git}{hg}$S$_$E[1;30;40m{lamb}$S$E[0m
|
||||
|
||||
:: Pick right version of clink
|
||||
@if "%PROCESSOR_ARCHITECTURE%"=="x86" (
|
||||
set architecture=86
|
||||
) else (
|
||||
set architecture=64
|
||||
)
|
||||
|
||||
:: Run clink
|
||||
@"%CMDER_ROOT%\vendor\clink\clink_x%architecture%.exe" inject --quiet --profile "%CMDER_ROOT%\config"
|
||||
|
||||
:: Prepare for msysgit
|
||||
|
||||
:: I do not even know, copypasted from their .bat
|
||||
@set PLINK_PROTOCOL=ssh
|
||||
@if not defined TERM set TERM=cygwin
|
||||
|
||||
:: Check if msysgit is installed
|
||||
@if exist "%ProgramFiles%\Git" (
|
||||
set "GIT_INSTALL_ROOT=%ProgramFiles%\Git"
|
||||
) else if exist "%ProgramFiles(x86)%\Git" (
|
||||
set "GIT_INSTALL_ROOT=%ProgramFiles(x86)%\Git"
|
||||
) else if exist "%CMDER_ROOT%\vendor" (
|
||||
set "GIT_INSTALL_ROOT=%CMDER_ROOT%\vendor\msysgit"
|
||||
)
|
||||
|
||||
:: Add git to the path
|
||||
@if defined GIT_INSTALL_ROOT (
|
||||
set "PATH=%GIT_INSTALL_ROOT%\bin;%GIT_INSTALL_ROOT%\share\vim\vim74;%PATH%"
|
||||
:: 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"
|
||||
)
|
||||
|
||||
:: Enhance Path
|
||||
@set PATH=%CMDER_ROOT%\bin;%PATH%;%CMDER_ROOT%
|
||||
|
||||
:: Add aliases
|
||||
@doskey /macrofile="%CMDER_ROOT%\config\aliases"
|
||||
|
||||
:: Set home path
|
||||
@if not defined HOME set HOME=%USERPROFILE%
|
||||
|
||||
@if defined CMDER_START (
|
||||
@cd /d "%CMDER_START%"
|
||||
) else (
|
||||
@if "%CD%\" == "%CMDER_ROOT%" (
|
||||
@cd /d "%HOME%"
|
||||
if not defined CMDER_ROOT (
|
||||
if defined ConEmuDir (
|
||||
for /f "delims=" %%i in ("%ConEmuDir%\..\..") do (
|
||||
set "CMDER_ROOT=%%~fi"
|
||||
)
|
||||
) else (
|
||||
for /f "delims=" %%i in ("%~dp0\..") do (
|
||||
set "CMDER_ROOT=%%~fi"
|
||||
)
|
||||
)
|
||||
)
|
||||
|
||||
:: @call "%CMDER_ROOT%/bin/agent.cmd"
|
||||
:: Remove trailing '\' from %CMDER_ROOT%
|
||||
if "%CMDER_ROOT:~-1%" == "\" SET "CMDER_ROOT=%CMDER_ROOT:~0,-1%"
|
||||
|
||||
call "%cmder_root%\vendor\bin\cexec.cmd" /setpath
|
||||
call "%cmder_root%\vendor\lib\lib_base"
|
||||
call "%cmder_root%\vendor\lib\lib_path"
|
||||
call "%cmder_root%\vendor\lib\lib_console"
|
||||
call "%cmder_root%\vendor\lib\lib_git"
|
||||
call "%cmder_root%\vendor\lib\lib_profile"
|
||||
|
||||
:var_loop
|
||||
if "%~1" == "" (
|
||||
goto :start
|
||||
) 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 (
|
||||
%print_error% "'/max_depth' requires a number between 1 and 5!"
|
||||
exit /b
|
||||
)
|
||||
) else if /i "%1" == "/c" (
|
||||
if exist "%~2" (
|
||||
if not exist "%~2\bin" mkdir "%~2\bin"
|
||||
set "cmder_user_bin=%~2\bin"
|
||||
if not exist "%~2\config\profile.d" mkdir "%~2\config\profile.d"
|
||||
set "cmder_user_config=%~2\config"
|
||||
shift
|
||||
)
|
||||
) else if /i "%1" == "/user_aliases" (
|
||||
if exist "%~2" (
|
||||
set "user_aliases=%~2"
|
||||
shift
|
||||
)
|
||||
) else if /i "%1" == "/git_install_root" (
|
||||
if exist "%~2" (
|
||||
set "GIT_INSTALL_ROOT=%~2"
|
||||
shift
|
||||
) else (
|
||||
%print_error% "The Git install root folder "%~2", you specified does not exist!"
|
||||
exit /b
|
||||
)
|
||||
) 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 (
|
||||
%print_error% The home folder "%2", you specified does not exist!
|
||||
exit /b
|
||||
)
|
||||
) else if /i "%1" == "/svn_ssh" (
|
||||
set SVN_SSH=%2
|
||||
shift
|
||||
) else (
|
||||
set "CMDER_USER_FLAGS=%1 %CMDER_USER_FLAGS%"
|
||||
)
|
||||
shift
|
||||
goto var_loop
|
||||
|
||||
:start
|
||||
:: Sets CMDER_SHELL, CMDER_CLINK, CMDER_ALIASES
|
||||
%lib_base% cmder_shell
|
||||
%print_debug% init.bat "Env Var - CMDER_ROOT=%CMDER_ROOT%"
|
||||
%print_debug% init.bat "Env Var - debug_output=%debug_output%"
|
||||
|
||||
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"
|
||||
)
|
||||
|
||||
:: Pick right version of clink
|
||||
if "%PROCESSOR_ARCHITECTURE%"=="x86" (
|
||||
set clink_architecture=x86
|
||||
set architecture_bits=32
|
||||
) else (
|
||||
set clink_architecture=x64
|
||||
set architecture_bits=64
|
||||
)
|
||||
|
||||
if "%CMDER_CLINK%" == "1" (
|
||||
%print_verbose% "Injecting Clink!"
|
||||
|
||||
:: Run clink
|
||||
if defined CMDER_USER_CONFIG (
|
||||
if not exist "%CMDER_USER_CONFIG%\settings" if not exist "%CMDER_USER_CONFIG%\clink_settings" (
|
||||
echo Generating clink initial settings in "%CMDER_USER_CONFIG%\clink_settings"
|
||||
copy "%CMDER_ROOT%\vendor\clink_settings.default" "%CMDER_USER_CONFIG%\clink_settings"
|
||||
echo Additional *.lua files in "%CMDER_USER_CONFIG%" are loaded on startup.
|
||||
)
|
||||
|
||||
if not exist "%CMDER_USER_CONFIG%\cmder_prompt_config.lua" (
|
||||
echo Creating Cmder prompt config file: "%CMDER_USER_CONFIG%\cmder_prompt_config.lua"
|
||||
copy "%CMDER_ROOT%\vendor\cmder_prompt_config.lua.default" "%CMDER_USER_CONFIG%\cmder_prompt_config.lua"
|
||||
)
|
||||
|
||||
REM Cleanup lagacy Clink Settings file
|
||||
if exist "%CMDER_USER_CONFIG%\settings" if exist "%CMDER_USER_CONFIG%\clink_settings" (
|
||||
del "%CMDER_USER_CONFIG%\settings"
|
||||
)
|
||||
|
||||
REM Cleanup legacy CLink history file
|
||||
if exist "%CMDER_USER_CONFIG%\.history" if exist "%CMDER_USER_CONFIG%\clink_history" (
|
||||
del "%CMDER_USER_CONFIG%\.history"
|
||||
)
|
||||
"%CMDER_ROOT%\vendor\clink\clink_%clink_architecture%.exe" inject --quiet --profile "%CMDER_USER_CONFIG%" --scripts "%CMDER_ROOT%\vendor"
|
||||
) else (
|
||||
if not exist "%CMDER_ROOT%\config\settings" if not exist "%CMDER_ROOT%\config\clink_settings" (
|
||||
echo Generating clink initial settings in "%CMDER_ROOT%\config\clink_settings"
|
||||
copy "%CMDER_ROOT%\vendor\clink_settings.default" "%CMDER_ROOT%\config\clink_settings"
|
||||
echo Additional *.lua files in "%CMDER_ROOT%\config" are loaded on startup.
|
||||
)
|
||||
|
||||
if not exist "%CMDER_ROOT%\config\cmder_prompt_config.lua" (
|
||||
echo Creating Cmder prompt config file: "%CMDER_ROOT%\config\cmder_prompt_config.lua"
|
||||
copy "%CMDER_ROOT%\vendor\cmder_prompt_config.lua.default" "%CMDER_ROOT%\config\cmder_prompt_config.lua"
|
||||
)
|
||||
|
||||
REM Cleanup lagacy Clink Settings file
|
||||
if exist "%CMDER_ROOT%\config\settings" if exist "%CMDER_ROOT%\config\clink_settings" (
|
||||
del "%CMDER_ROOT%\config\settings"
|
||||
)
|
||||
|
||||
REM Cleanup legacy Clink history file
|
||||
if exist "%CMDER_ROOT%\config\.history" if exist "%CMDER_ROOT%\config\clink_history" (
|
||||
del "%CMDER_ROOT%\config\.history"
|
||||
)
|
||||
|
||||
"%CMDER_ROOT%\vendor\clink\clink_%clink_architecture%.exe" inject --quiet --profile "%CMDER_ROOT%\config" --scripts "%CMDER_ROOT%\vendor"
|
||||
)
|
||||
) else (
|
||||
%print_verbose% "WARNING: Incompatible 'ComSpec/Shell' Detetected Skipping Clink Injection!"
|
||||
)
|
||||
|
||||
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
|
||||
|
||||
:: 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
|
||||
:: * 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 :SPECIFIED_GIT
|
||||
) 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
|
||||
)
|
||||
)
|
||||
|
||||
%print_debug% init.bat "Looking for Git install root..."
|
||||
|
||||
:: 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%
|
||||
|
||||
:: check if git is in path...
|
||||
for /F "delims=" %%F in ('where git.exe 2^>nul ^| find "\cmd\git.exe"') do (
|
||||
:: get the absolute path to the user provided git binary
|
||||
%lib_git% is_git_shim "%%~dpF"
|
||||
%lib_git% get_user_git_version
|
||||
%lib_git% compare_git_versions
|
||||
|
||||
if defined GIT_INSTALL_ROOT (
|
||||
goto :FOUND_GIT
|
||||
)
|
||||
)
|
||||
|
||||
:: our last hope: our own git...
|
||||
:VENDORED_GIT
|
||||
if exist "%CMDER_ROOT%\vendor\git-for-windows" (
|
||||
set "GIT_INSTALL_ROOT=%CMDER_ROOT%\vendor\git-for-windows"
|
||||
%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 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
|
||||
if %nix_tools% equ 1 (
|
||||
%print_verbose% "Preferring Windows commands"
|
||||
set "path_position=append"
|
||||
) else (
|
||||
%print_verbose% "Preferring *nix commands"
|
||||
set "path_position="
|
||||
)
|
||||
|
||||
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%
|
||||
)
|
||||
)
|
||||
|
||||
:: 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.
|
||||
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
|
||||
:: Skip this if GIT WAS FOUND else we did 'endlocal' above!
|
||||
endlocal
|
||||
|
||||
: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 (
|
||||
%lib_path% enhance_path_recursive "%CMDER_USER_BIN%" 0 %max_depth%
|
||||
)
|
||||
%lib_path% enhance_path "%CMDER_ROOT%" append
|
||||
|
||||
:: Drop *.bat and *.cmd files into "%CMDER_ROOT%\config\profile.d"
|
||||
:: to run them at startup.
|
||||
%lib_profile% run_profile_d "%CMDER_ROOT%\config\profile.d"
|
||||
if defined CMDER_USER_CONFIG (
|
||||
%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.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 "%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%"
|
||||
)
|
||||
|
||||
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 (
|
||||
%lib_base% update_legacy_aliases
|
||||
)
|
||||
|
||||
:: 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"
|
||||
)
|
||||
)
|
||||
|
||||
:: Add aliases to the environment
|
||||
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" (
|
||||
echo Running Git for Windows one time Post Install....
|
||||
pushd "%GIT_INSTALL_ROOT%\"
|
||||
"%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%"
|
||||
%print_debug% init.bat "Env Var - HOME=%HOME%"
|
||||
|
||||
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
|
||||
%print_debug% init.bat "Calling - %CMDER_ROOT%\config\user_profile.cmd"
|
||||
call "%CMDER_ROOT%\config\user_profile.cmd"
|
||||
)
|
||||
|
||||
if defined CMDER_USER_CONFIG (
|
||||
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"
|
||||
)
|
||||
)
|
||||
|
||||
if not exist "%initialConfig%" (
|
||||
echo Creating user startup file: "%initialConfig%"
|
||||
copy "%CMDER_ROOT%\vendor\user_profile.cmd.default" "%initialConfig%"
|
||||
)
|
||||
|
||||
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'.
|
||||
)
|
||||
|
||||
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
|
||||
|
93
vendor/lib/lib_base.cmd
vendored
Normal file
@ -0,0 +1,93 @@
|
||||
@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 "%CMDER_SHELL%" equ "tcc" set CMDER_CLINK=0
|
||||
if "%CMDER_SHELL%" equ "tccle" set CMDER_CLINK=0
|
||||
)
|
||||
if not defined CMDER_ALIASES (
|
||||
set CMDER_ALIASES=1
|
||||
if "%CMDER_SHELL%" equ "tcc" set CMDER_ALIASES=0
|
||||
if "%CMDER_SHELL%" equ "tccle" set CMDER_ALIASES=0
|
||||
)
|
||||
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
|
84
vendor/lib/lib_console.cmd
vendored
Normal file
@ -0,0 +1,84 @@
|
||||
@echo off
|
||||
|
||||
call "%~dp0lib_base.cmd"
|
||||
set lib_console=call "%~dp0lib_console.cmd"
|
||||
|
||||
:: 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_error=%lib_console% show_error
|
||||
|
||||
if "%fast_init%" == "1" 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 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 ERROR: %~1
|
||||
exit /b
|
281
vendor/lib/lib_git.cmd
vendored
Normal 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
@ -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
@ -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
@ -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
|
235
vendor/profile.ps1
vendored
@ -1,52 +1,219 @@
|
||||
# Add Cmder modules directory to the autoload path.
|
||||
# Init Script for PowerShell
|
||||
# Created as part of cmder project
|
||||
|
||||
# !!! THIS FILE IS OVERWRITTEN WHEN CMDER IS UPDATED
|
||||
# !!! Use "%CMDER_ROOT%\config\user_profile.ps1" to add your own startup commands
|
||||
|
||||
$CMDER_INIT_START = $(Get-Date -UFormat %s)
|
||||
|
||||
# Compatibility with PS major versions <= 2
|
||||
if (!$PSScriptRoot) {
|
||||
$PSScriptRoot = Split-Path $Script:MyInvocation.MyCommand.Path
|
||||
}
|
||||
|
||||
if ($ENV:CMDER_USER_CONFIG) {
|
||||
# Write-Host "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 being set.
|
||||
if ($null -eq $ENV:CMDER_ROOT) {
|
||||
if (-Not($null -eq $ENV:ConEmuDir)) {
|
||||
$ENV:CMDER_ROOT = Resolve-Path($ENV:ConEmuDir + "\..\..")
|
||||
} else {
|
||||
$ENV:CMDER_ROOT = Resolve-Path($PSScriptRoot + "\..")
|
||||
}
|
||||
}
|
||||
|
||||
# Remove trailing '\'
|
||||
$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)
|
||||
|
||||
# Add Cmder modules directory to the autoload path.
|
||||
$CmderModulePath = Join-path $PSScriptRoot "psmodules/"
|
||||
|
||||
if( -not $env:PSModulePath.Contains($CmderModulePath) ){
|
||||
$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 "git" -ErrorAction Stop >$null
|
||||
Import-Module -Name "posh-git" -ErrorAction Stop >$null
|
||||
$gitStatus = $true
|
||||
} catch {
|
||||
Write-Warning "Missing git support, install posh-git with 'Install-Module posh-git' and restart cmder."
|
||||
$gitStatus = $false
|
||||
}
|
||||
$gitVersionVendor = (readVersion -gitPath "$ENV:CMDER_ROOT\vendor\git-for-windows\cmd")
|
||||
# Write-Host "GIT VENDOR: ${gitVersionVendor}"
|
||||
|
||||
function checkGit($Path) {
|
||||
if (Test-Path -Path (Join-Path $Path '.git/') ) {
|
||||
Write-VcsStatus
|
||||
return
|
||||
# Get user installed Git Version[s] and Compare with vendored if found.
|
||||
foreach ($git in (Get-Command -ErrorAction SilentlyContinue 'git')) {
|
||||
# Write-Host "GIT PATH: " + $git.Path
|
||||
$gitDir = Split-Path -Path $git.Path
|
||||
$gitDir = isGitShim -gitPath $gitDir
|
||||
$gitVersionUser = (readVersion -gitPath $gitDir)
|
||||
# Write-Host "GIT USER: ${gitVersionUser}"
|
||||
|
||||
$useGitVersion = compare_git_versions -userVersion $gitVersionUser -vendorVersion $gitVersionVendor
|
||||
# Write-Host "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))
|
||||
}
|
||||
}
|
||||
$SplitPath = split-path $path
|
||||
if ($SplitPath) {
|
||||
checkGit($SplitPath)
|
||||
|
||||
if ($useGitVersion -eq $gitVersionUser) {
|
||||
# Write-Host "Using GIT Dir: ${gitDir}"
|
||||
$ENV:GIT_INSTALL_ROOT = $gitPathUser
|
||||
$ENV:GIT_INSTALL_TYPE = 'USER'
|
||||
break
|
||||
}
|
||||
}
|
||||
|
||||
# Set up a Cmder prompt, adding the git prompt parts inside git repos
|
||||
function global:prompt {
|
||||
$realLASTEXITCODE = $LASTEXITCODE
|
||||
# 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'
|
||||
}
|
||||
|
||||
# Write-Host "GIT_INSTALL_ROOT: ${ENV:GIT_INSTALL_ROOT}"
|
||||
# Write-Host "GIT_INSTALL_TYPE: ${ENV:GIT_INSTALL_TYPE}"
|
||||
|
||||
if (-Not ($null -eq $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
|
||||
}
|
||||
|
||||
# Pre-assign default prompt hooks so the first run of cmder gets a working prompt.
|
||||
$env:gitLoaded = $false
|
||||
[ScriptBlock]$PrePrompt = {}
|
||||
[ScriptBlock]$PostPrompt = {}
|
||||
[ScriptBlock]$CmderPrompt = {
|
||||
$Host.UI.RawUI.ForegroundColor = "White"
|
||||
Write-Host $pwd.ProviderPath -NoNewLine -ForegroundColor Green
|
||||
if($gitStatus){
|
||||
Write-Host -NoNewline "PS "
|
||||
Microsoft.PowerShell.Utility\Write-Host $pwd.ProviderPath -NoNewLine -ForegroundColor Green
|
||||
if (Get-Command git -erroraction silentlycontinue) {
|
||||
checkGit($pwd.ProviderPath)
|
||||
}
|
||||
$global:LASTEXITCODE = $realLASTEXITCODE
|
||||
Write-Host "`nλ" -NoNewLine -ForegroundColor "DarkGray"
|
||||
return " "
|
||||
Microsoft.PowerShell.Utility\Write-Host "`nλ" -NoNewLine -ForegroundColor "DarkGray"
|
||||
}
|
||||
|
||||
# Load special features come from posh-git
|
||||
if ($gitStatus) {
|
||||
Enable-GitColors
|
||||
Start-SshAgent -Quiet
|
||||
# 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"
|
||||
}
|
||||
|
||||
# Move to the wanted location
|
||||
if (Test-Path Env:\CMDER_START) {
|
||||
Set-Location -Path $Env:CMDER_START
|
||||
} elseif ($Env:CMDER_ROOT -and $Env:CMDER_ROOT.StartsWith($pwd)) {
|
||||
Set-Location -Path $Env:USERPROFILE
|
||||
Push-Location $ENV:CMDER_ROOT\config\profile.d
|
||||
foreach ($x in Get-ChildItem *.psm1) {
|
||||
# Write-Host Write-Host Sourcing $x
|
||||
Import-Module $x
|
||||
}
|
||||
|
||||
foreach ($x in Get-ChildItem *.ps1) {
|
||||
# Write-Host Write-Host 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-Host Write-Host Sourcing $x
|
||||
Import-Module $x
|
||||
}
|
||||
|
||||
foreach ($x in Get-ChildItem *.ps1) {
|
||||
# Write-Host Write-Host 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)) {
|
||||
Write-Host -BackgroundColor Darkgreen -ForegroundColor White "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
|
||||
$host.UI.RawUI.WindowTitle = Microsoft.PowerShell.Management\Split-Path $pwd.ProviderPath -Leaf
|
||||
PrePrompt | Microsoft.PowerShell.Utility\Write-Host -NoNewline
|
||||
CmderPrompt
|
||||
PostPrompt | Microsoft.PowerShell.Utility\Write-Host -NoNewline
|
||||
$global:LASTEXITCODE = $realLASTEXITCODE
|
||||
return " "
|
||||
}
|
||||
|
||||
|
||||
# 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 -UFormat %s)
|
||||
# Write-Host "Elapsed Time: $(get-Date) `($($CMDER_INIT_END - $CMDER_INIT_START) total`)"
|
||||
|
169
vendor/psmodules/Cmder.ps1
vendored
Normal file
@ -0,0 +1,169 @@
|
||||
function readVersion($gitPath) {
|
||||
$gitExecutable = "${gitPath}\git.exe"
|
||||
|
||||
if (!(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 (-not($userVersion -eq $null)) {
|
||||
($userMajor, $userMinor, $userPatch, $userBuild) = $userVersion.split('.', 4)
|
||||
} else {
|
||||
return -1
|
||||
}
|
||||
|
||||
if (-not($vendorVersion -eq $null)) {
|
||||
($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-host "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 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 ($gitPathUser -ne '' -and $gitPathUser -ne $null) {
|
||||
# write-host "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 (!($env:Path -match [regex]::Escape("$gitRoot\cmd"))) {
|
||||
# write-host "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-host "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-host "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-host "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 version | where version -le ([version]"0.6.1.20160330")){
|
||||
Import-Module Posh-Git > $null
|
||||
}
|
||||
if($GitModule | select version | where version -ge ([version]"1.0.0")){
|
||||
Import-Module Posh-Git > $null
|
||||
$GitPromptSettings.AnsiConsole = $false
|
||||
}
|
||||
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
|
||||
}
|
||||
|
||||
function checkGit($Path) {
|
||||
if (Test-Path -Path (Join-Path $Path '.git') ) {
|
||||
if($env:gitLoaded -eq 'false') {
|
||||
$env:gitLoaded = Import-Git
|
||||
}
|
||||
|
||||
if (getGitStatusSetting -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
|
||||
}
|
||||
|
||||
return
|
||||
}
|
||||
$SplitPath = split-path $path
|
||||
if ($SplitPath) {
|
||||
checkGit($SplitPath)
|
||||
}
|
||||
}
|
||||
|
||||
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
|
||||
}
|
95
vendor/psmodules/PsGet/PsGet.psm1
vendored
@ -9,8 +9,16 @@
|
||||
#region Setup
|
||||
|
||||
Write-Debug 'Set up the global scope config variables.'
|
||||
$global:UserModuleBasePath = Join-Path -Path ([Environment]::GetFolderPath('MyDocuments')) -ChildPath 'WindowsPowerShell\Modules'
|
||||
$global:CommonGlobalModuleBasePath = Join-Path -Path $env:CommonProgramFiles -ChildPath 'Modules'
|
||||
if ([Environment]::GetFolderPath('MyDocuments')) {
|
||||
$global:UserModuleBasePath = Join-Path -Path ([Environment]::GetFolderPath('MyDocuments')) -ChildPath 'WindowsPowerShell\Modules'
|
||||
}
|
||||
else {
|
||||
# Support scenarios where PSGet is running without a MyDocuments special folder (e.g. executing within a DSC resource)
|
||||
$global:UserModuleBasePath = Join-Path -Path $env:ProgramFiles -ChildPath 'WindowsPowerShell\Modules'
|
||||
}
|
||||
|
||||
# NOTE: Path changed to align with current MS conventions
|
||||
$global:CommonGlobalModuleBasePath = Join-Path -Path $env:ProgramFiles -ChildPath 'WindowsPowerShell\Modules'
|
||||
|
||||
if (-not (Test-Path -Path:variable:global:PsGetDirectoryUrl)) {
|
||||
$global:PsGetDirectoryUrl = 'https://github.com/psget/psget/raw/master/Directory.xml'
|
||||
@ -96,16 +104,16 @@ Set-Variable -Name PSGET_PSD1 -Value 'PSD1' -Option Constant -Scope Script
|
||||
.PARAMETER DoNotPostInstall
|
||||
If defined, the PostInstallHook is not executed.
|
||||
|
||||
.PARAMERTER PostInstallHook
|
||||
.PARAMETER PostInstallHook
|
||||
Defines the name of a script inside the installed module folder which should be executed after installation.
|
||||
Default: definition in directory file or 'Install.ps1'
|
||||
|
||||
.PARAMETER Force
|
||||
OBSOLATE
|
||||
OBSOLETE
|
||||
Alternative name for 'Update'.
|
||||
|
||||
.PARAMETER Startup
|
||||
OBSOLATE
|
||||
OBSOLETE
|
||||
Alternative name for 'AddToProfile'.
|
||||
|
||||
.LINK
|
||||
@ -116,7 +124,7 @@ Set-Variable -Name PSGET_PSD1 -Value 'PSD1' -Option Constant -Scope Script
|
||||
|
||||
Description
|
||||
-----------
|
||||
Installs the module witout importing it to the current session
|
||||
Installs the module without importing it to the current session
|
||||
|
||||
.EXAMPLE
|
||||
# Install-Module PoshHg -AddToProfile
|
||||
@ -349,7 +357,7 @@ function Install-Module {
|
||||
.PARAMETER DoNotPostInstall
|
||||
If defined, the PostInstallHook is not executed.
|
||||
|
||||
.PARAMERTER PostInstallHook
|
||||
.PARAMETER PostInstallHook
|
||||
Defines the name of a script inside the installed module folder which should be executed after installation.
|
||||
Will not be check in combination with -All switch.
|
||||
Default: 'Install.ps1'
|
||||
@ -414,7 +422,7 @@ function Update-Module {
|
||||
|
||||
}
|
||||
else {
|
||||
Install-Module -Module:$Module -Destination:$Destination -ModuleHash:$ModuleHash -Global:$Global -DoNotImport:$DoNotImport -AddToProfile:$AddToProfile -DirectoryUrl:$DirectoryUrl -Updat -DoNotPostInstall:$DoNotPostInstall -PostInstallHook:$PostInstallHook
|
||||
Install-Module -Module:$Module -Destination:$Destination -ModuleHash:$ModuleHash -Global:$Global -DoNotImport:$DoNotImport -AddToProfile:$AddToProfile -DirectoryUrl:$DirectoryUrl -Update -DoNotPostInstall:$DoNotPostInstall -PostInstallHook:$PostInstallHook
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -440,7 +448,7 @@ function Update-Module {
|
||||
|
||||
Description
|
||||
-----------
|
||||
Retrieves information about all registerd modules that starts with PoshCo.
|
||||
Retrieves information about all registered modules that start with PoshCo.
|
||||
#>
|
||||
function Get-PsGetModuleInfo {
|
||||
[CmdletBinding()]
|
||||
@ -480,7 +488,9 @@ function Get-PsGetModuleInfo {
|
||||
|
||||
try {
|
||||
Write-Verbose "Downloading modules repository from $DirectoryUrl"
|
||||
$repoRaw = $client.DownloadString($DirectoryUrl)
|
||||
$stream = $client.OpenRead($DirectoryUrl)
|
||||
$repoXmlTemp = New-Object -TypeName System.Xml.XmlDocument
|
||||
$repoXmlTemp.Load($stream)
|
||||
$StatusCode = 200
|
||||
}
|
||||
catch [System.Net.WebException] {
|
||||
@ -489,7 +499,7 @@ function Get-PsGetModuleInfo {
|
||||
}
|
||||
|
||||
if ($StatusCode -eq 200) {
|
||||
$repoXml = [xml]$repoRaw
|
||||
$repoXml = [xml]$repoXmlTemp
|
||||
|
||||
$CacheEntry.ETag = $client.ResponseHeaders['ETag']
|
||||
if (-not (Test-Path -Path $PsGetDataPath)) {
|
||||
@ -629,7 +639,7 @@ function Get-PsGetModuleHash {
|
||||
.PARAMETER DoNotPostInstall
|
||||
If defined, the PostInstallHook is not executed.
|
||||
|
||||
.PARAMERTER PostInstallHook
|
||||
.PARAMETER PostInstallHook
|
||||
Defines the name of a script inside the installed module folder which should be executed after installation.
|
||||
Default: definition in directory file or 'Install.ps1'
|
||||
#>
|
||||
@ -684,7 +694,7 @@ function Install-ModuleFromDirectory {
|
||||
throw "Module $Module was not found in central repository"
|
||||
}
|
||||
|
||||
# $Module and $moduleData.Id are not equally by garantee, so we have to test again.
|
||||
# $Module and $moduleData.Id are not equally by guarantee, so we have to test again.
|
||||
if (Test-ModuleInstalledAndImport -ModuleName:$moduleData.ModuleName -Destination:$Destination -Update:$Update -DoNotImport:$DoNotImport -ModuleHash:$ModuleHash) {
|
||||
return
|
||||
}
|
||||
@ -754,7 +764,7 @@ function Install-ModuleFromDirectory {
|
||||
.PARAMETER DoNotPostInstall
|
||||
If defined, the PostInstallHook is not executed.
|
||||
|
||||
.PARAMERTER PostInstallHook
|
||||
.PARAMETER PostInstallHook
|
||||
Defines the name of a script inside the installed module folder which should be executed after installation.
|
||||
Default: 'Install.ps1'
|
||||
#>
|
||||
@ -863,7 +873,7 @@ function Install-ModuleFromWeb {
|
||||
.PARAMETER DoNotPostInstall
|
||||
If defined, the PostInstallHook is not executed.
|
||||
|
||||
.PARAMERTER PostInstallHook
|
||||
.PARAMETER PostInstallHook
|
||||
Defines the name of a script inside the installed module folder which should be executed after installation.
|
||||
Default: 'Install.ps1'
|
||||
#>
|
||||
@ -1010,7 +1020,7 @@ function Install-ModuleFromLocal {
|
||||
.PARAMETER DoNotPostInstall
|
||||
If defined, the PostInstallHook is not executed.
|
||||
|
||||
.PARAMERTER PostInstallHook
|
||||
.PARAMETER PostInstallHook
|
||||
Defines the name of a script inside the installed module folder which should be executed after installation.
|
||||
Default: 'Install.ps1'
|
||||
#>
|
||||
@ -1311,6 +1321,13 @@ function Import-ModuleGlobally {
|
||||
Write-Verbose "Importing installed module '$ModuleName' from '$($installedModule.ModuleBase)'"
|
||||
Import-Module -Name $ModuleBase -Global -Force:$Force
|
||||
|
||||
# For psget no further checks are needed and their execution cause
|
||||
# an error for the update process of 'psget'
|
||||
# https://github.com/psget/psget/issues/186
|
||||
if ($ModuleName -eq 'PsGet') {
|
||||
return
|
||||
}
|
||||
|
||||
$IdentityExtension = [System.IO.Path]::GetExtension((Get-ModuleFile -Path $ModuleBase -ModuleName $ModuleName))
|
||||
if ($IdentityExtension -eq '.dll') {
|
||||
# import module twice for binary modules to workaround PowerShell bug:
|
||||
@ -1471,7 +1488,7 @@ function Invoke-DownloadModuleFromWeb {
|
||||
Install the module inside of the provided directory into the defined destination
|
||||
and perform the following steps:
|
||||
|
||||
* Rename module if requestes by provided InstallWithModuleName
|
||||
* Rename module if requested by provided InstallWithModuleName
|
||||
* If a ModuleHash is provided, check if it matches.
|
||||
* Add the destination path to the PSModulePath if necessary (depends on provided parameters)
|
||||
* Place the conventions-matching module folder in the destination folder
|
||||
@ -1514,7 +1531,7 @@ function Invoke-DownloadModuleFromWeb {
|
||||
.PARAMETER DoNotPostInstall
|
||||
If defined, the PostInstallHook is not executed.
|
||||
|
||||
.PARAMERTER PostInstallHook
|
||||
.PARAMETER PostInstallHook
|
||||
Defines the name of a script inside the installed module folder which should be executed after installation.
|
||||
#>
|
||||
function Install-ModuleToDestination {
|
||||
@ -1628,7 +1645,7 @@ function Install-ModuleToDestination {
|
||||
|
||||
$isDestinationInPSModulePath = $env:PSModulePath.Contains($Destination)
|
||||
if ($isDestinationInPSModulePath) {
|
||||
if (-not (Get-Module $ModuleName -ListAvailable)) {
|
||||
if (-not (Get-Module $InstallWithModuleName -ListAvailable)) {
|
||||
throw 'For some unexpected reasons module was not installed.'
|
||||
}
|
||||
}
|
||||
@ -1639,14 +1656,14 @@ function Install-ModuleToDestination {
|
||||
}
|
||||
|
||||
if ($Update) {
|
||||
Write-Host "Module $ModuleName was successfully updated." -Foreground Green
|
||||
Write-Host "Module $InstallWithModuleName was successfully updated." -Foreground Green
|
||||
}
|
||||
else {
|
||||
Write-Host "Module $ModuleName was successfully installed." -Foreground Green
|
||||
Write-Host "Module $InstallWithModuleName was successfully installed." -Foreground Green
|
||||
}
|
||||
|
||||
if (-not $DoNotImport) {
|
||||
Import-ModuleGlobally -ModuleName:$ModuleName -ModuleBase:$targetFolderPath -Force:$Update
|
||||
Import-ModuleGlobally -ModuleName:$InstallWithModuleName -ModuleBase:$targetFolderPath -Force:$Update
|
||||
}
|
||||
|
||||
if ($isDestinationInPSModulePath -and $AddToProfile) {
|
||||
@ -1657,8 +1674,8 @@ function Install-ModuleToDestination {
|
||||
New-Item $PROFILE -Type File -Force -ErrorAction Stop
|
||||
}
|
||||
|
||||
if (Select-String $PROFILE -Pattern "Import-Module $ModuleName") {
|
||||
Write-Verbose "Import-Module $ModuleName command already in your profile"
|
||||
if (Select-String $PROFILE -Pattern "Import-Module $InstallWithModuleName") {
|
||||
Write-Verbose "Import-Module $InstallWithModuleName command already in your profile"
|
||||
}
|
||||
else {
|
||||
$signature = Get-AuthenticodeSignature -FilePath $PROFILE
|
||||
@ -1667,8 +1684,8 @@ function Install-ModuleToDestination {
|
||||
Write-Error "PsGet cannot modify code-signed profile '$PROFILE'."
|
||||
}
|
||||
else {
|
||||
Write-Verbose "Add Import-Module $ModuleName command to the profile"
|
||||
"`nImport-Module $ModuleName" | Add-Content $PROFILE
|
||||
Write-Verbose "Add Import-Module $InstallWithModuleName command to the profile"
|
||||
"`nImport-Module $InstallWithModuleName" | Add-Content $PROFILE
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1736,7 +1753,7 @@ function Test-ModuleInstalledAndImport {
|
||||
return $false
|
||||
}
|
||||
|
||||
Write-Warning "The module '$ModuleName' was installed at more then one location. Installed paths:`n`t$($installedModule.ModuleBase | Format-List | Out-String)`n'$($firstInstalledModule.ModuleBase)' is the searched destination."
|
||||
Write-Warning "The module '$ModuleName' was installed at more than one location. Installed paths:`n`t$($installedModule.ModuleBase | Format-List | Out-String)`n'$($firstInstalledModule.ModuleBase)' is the searched destination."
|
||||
$installedModule = $targetModule
|
||||
}
|
||||
elseif ((Split-Path $installedModule.ModuleBase) -ne $Destination) {
|
||||
@ -1779,9 +1796,9 @@ function Test-ModuleInstalledAndImport {
|
||||
|
||||
<#
|
||||
.SYNOPSIS
|
||||
Extract the content of the referenced zip file to the defind destination
|
||||
Extract the content of the referenced zip file to the defined destination
|
||||
|
||||
.PARAMATER Path
|
||||
.PARAMETER Path
|
||||
Path to a zip file with the file extension '.zip'
|
||||
|
||||
.Parameter Destination
|
||||
@ -1801,7 +1818,7 @@ function Expand-ZipModule {
|
||||
|
||||
# Check if powershell v3+ and .net v4.5 is available
|
||||
$netFailed = $true
|
||||
if ( $PSVersionTable.PSVersion.Major -ge 3 -and (Get-ChildItem -Path 'HKLM:\SOFTWARE\Microsoft\NET Framework Setup\NDP\v4' -Recurse | Get-ItemProperty -Name Version | Where-Object { $_.Version -like '4.5*' }) ) {
|
||||
if ( $PSVersionTable.PSVersion.Major -ge 3 -and (Get-ChildItem -Path 'HKLM:\SOFTWARE\Microsoft\NET Framework Setup\NDP\v4' -Recurse | Get-ItemProperty -Name Version | Where-Object { $_.Version -like '4.5*' -Or $_.Version -ge '4.5' }) ) {
|
||||
Write-Debug 'Attempting unzip using the .NET Framework...'
|
||||
|
||||
try {
|
||||
@ -1839,7 +1856,7 @@ function Expand-ZipModule {
|
||||
|
||||
<#
|
||||
.SYNOPSIS
|
||||
Update '$env:PSModulePath' from 'User' and 'Machine' scope envrionment variables
|
||||
Update '$env:PSModulePath' from 'User' and 'Machine' scope environment variables
|
||||
#>
|
||||
function Update-PSModulePath {
|
||||
process {
|
||||
@ -1910,14 +1927,20 @@ function Invoke-DownloadNuGetPackage {
|
||||
}
|
||||
|
||||
Write-Verbose "Querying '$Source' repository for package with Id '$NuGetPackageId'"
|
||||
$Url = "{1}Packages()?`$filter=tolower(Id)+eq+'{0}'&`$orderby=Id" -f $NuGetPackageId.ToLower(), $Source
|
||||
Write-Debug "NuGet query url: $Url"
|
||||
|
||||
try {
|
||||
$Url = "{1}Packages()?`$filter=tolower(Id)+eq+'{0}'&`$orderby=Id" -f $NuGetPackageId.ToLower(), $Source
|
||||
Write-Debug "Trying NuGet query url: $Url"
|
||||
$XmlDoc = [xml]$WebClient.DownloadString($Url)
|
||||
}
|
||||
catch {
|
||||
throw "Unable to download from NuGet feed: $($_.Exception.InnerException.Message)"
|
||||
try {
|
||||
$Url = "{1}Packages(Id='{0}')?`$orderby=Id" -f $NuGetPackageId, $Source
|
||||
Write-Debug "Trying NuGet query url: $Url"
|
||||
$XmlDoc = [xml]$WebClient.DownloadString($Url)
|
||||
}
|
||||
catch {
|
||||
throw "Unable to download from NuGet feed: $($_.Exception.InnerException.Message)"
|
||||
}
|
||||
}
|
||||
|
||||
if ($PackageVersion) {
|
||||
@ -2110,7 +2133,7 @@ function TabExpansion {
|
||||
Get-PsGetModuleInfo -ModuleName "$lastword*" | % { $_.Id } | sort -Unique
|
||||
}
|
||||
elseif ( Test-Path -Path Function:\$tabExpansionBackup ) {
|
||||
& $teBackup $line $lastWord
|
||||
& $tabExpansionBackup $line $lastWord
|
||||
}
|
||||
}
|
||||
}
|
||||
|
40
vendor/sources.json
vendored
@ -1,22 +1,22 @@
|
||||
[
|
||||
{
|
||||
"name": "msysgit",
|
||||
"version": "1.9.5-preview20150319",
|
||||
"url": "https://github.com/msysgit/msysgit/releases/download/Git-1.9.5-preview20150319/PortableGit-1.9.5-preview20150319.7z"
|
||||
},
|
||||
{
|
||||
"name": "clink",
|
||||
"version": "0.4.4",
|
||||
"url": "https://github.com/mridgers/clink/releases/download/0.4.4/clink_0.4.4.zip"
|
||||
},
|
||||
{
|
||||
"name": "conemu-maximus5",
|
||||
"version": "150513",
|
||||
"url": "https://github.com/Maximus5/ConEmu/releases/download/v15.05.13/ConEmuPack.150513.7z"
|
||||
},
|
||||
{
|
||||
"name": "clink-completions",
|
||||
"version": "0.1.0",
|
||||
"url": "https://github.com/vladimir-kotikov/clink-completions/archive/0.1.0.zip"
|
||||
}
|
||||
{
|
||||
"name": "git-for-windows",
|
||||
"version": "2.38.0.windows.1",
|
||||
"url": "https://github.com/git-for-windows/git/releases/download/v2.38.0.windows.1/PortableGit-2.38.0-64-bit.7z.exe"
|
||||
},
|
||||
{
|
||||
"name": "clink",
|
||||
"version": "1.3.47",
|
||||
"url": "https://github.com/chrisant996/clink/releases/download/v1.3.47/clink.1.3.47.d5796b.zip"
|
||||
},
|
||||
{
|
||||
"name": "conemu-maximus5",
|
||||
"version": "22.08.07",
|
||||
"url": "https://github.com/Maximus5/ConEmu/releases/download/v22.08.07/ConEmuPack.220807.7z"
|
||||
},
|
||||
{
|
||||
"name": "clink-completions",
|
||||
"version": "0.4.1",
|
||||
"url": "https://github.com/vladimir-kotikov/clink-completions/archive/0.4.1.zip"
|
||||
}
|
||||
]
|
||||
|
15
vendor/user_aliases.cmd.default
vendored
Normal file
@ -0,0 +1,15 @@
|
||||
;= @echo off
|
||||
;= rem Call DOSKEY and use this file as the macrofile
|
||||
;= %SystemRoot%\system32\doskey /listsize=1000 /macrofile=%0%
|
||||
;= rem In batch mode, jump to the end of the file
|
||||
;= goto:eof
|
||||
;= Add aliases below here
|
||||
e.=explorer .
|
||||
gl=git log --oneline --all --graph --decorate $*
|
||||
ls=ls --show-control-chars -F --color $*
|
||||
pwd=cd
|
||||
clear=cls
|
||||
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
@ -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
@ -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
@ -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"
|