Compare commits
583 Commits
v0.4.2
...
8715c2b6f9
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
8715c2b6f9 | ||
|
|
98a748dccc | ||
|
|
bef031a414 | ||
|
|
ce0e953182 | ||
|
|
9a5caf75c3 | ||
|
|
446f4a3a32 | ||
|
|
da75912d26 | ||
|
|
4ed23c2a18 | ||
|
|
23ae334bef | ||
|
|
ec75ae1486 | ||
|
|
368570592f | ||
|
|
806793421e | ||
|
|
1f377b242d | ||
|
|
a4906b129a | ||
|
|
5c6e8925ad | ||
|
|
a18eff689d | ||
|
|
274742d6d9 | ||
|
|
cdebcbd4dc | ||
|
|
cdf303a847 | ||
|
|
dd35fe825c | ||
|
|
5c4a971aca | ||
|
|
7522b4d0ff | ||
|
|
b0f314837e | ||
|
|
8a9ba7745a | ||
|
|
b7d75a2749 | ||
|
|
fe0d9b0aa6 | ||
|
|
7dba691ccc | ||
|
|
099e2154ba | ||
|
|
f2efb25ad7 | ||
|
|
e45c3d5b4e | ||
|
|
69f821baef | ||
|
|
11559d0962 | ||
|
|
79c33095fc | ||
|
|
0ec6bcbcef | ||
|
|
3cde067339 | ||
|
|
c05ef32270 | ||
|
|
7eb913ec7b | ||
|
|
4e63093d25 | ||
|
|
e5d50698d2 | ||
|
|
79c31c2d84 | ||
|
|
aab266a661 | ||
|
|
a4c9acb49f | ||
|
|
6205c7f3c5 | ||
|
|
e4af014013 | ||
|
|
c9f649f40f | ||
|
|
1f27ca2607 | ||
|
|
a1288c7480 | ||
|
|
4bfec52ba5 | ||
|
|
3f01be3baa | ||
|
|
8e2ffeabce | ||
|
|
fc68e2621b | ||
|
|
b2a8a3041c | ||
|
|
c507d54700 | ||
|
|
31c5ad7534 | ||
|
|
14ac10547c | ||
|
|
ae1638ee17 | ||
|
|
c5f76ec51c | ||
|
|
d319a2fae4 | ||
|
|
72a5703a08 | ||
|
|
91b4d4e463 | ||
|
|
17719ea370 | ||
|
|
707a3faa54 | ||
|
|
dfe58e6147 | ||
|
|
c49dab3888 | ||
|
|
47ff07e496 | ||
|
|
61a8fb95e4 | ||
|
|
f757336d75 | ||
|
|
cf529c1678 | ||
|
|
631f09b9a8 | ||
|
|
65aed76605 | ||
|
|
9036d83635 | ||
|
|
179c4de4ed | ||
|
|
f3b84c97e1 | ||
|
|
b5b3aeb645 | ||
|
|
e5172d4207 | ||
|
|
50e7f5f5d0 | ||
|
|
88cdae79a8 | ||
|
|
4f3b97b198 | ||
|
|
54a8317d0e | ||
|
|
3a46aa74f9 | ||
|
|
aca5b37898 | ||
|
|
0394a12c9f | ||
|
|
e61d04aa1b | ||
|
|
c0c9f7c0dd | ||
|
|
905fe5fc9f | ||
|
|
89ab53a71b | ||
|
|
7dccac6105 | ||
|
|
44051ec718 | ||
|
|
c7469b8594 | ||
|
|
5dfee2cbd9 | ||
|
|
679a829744 | ||
|
|
2a51ab984c | ||
|
|
2b2ebadd6a | ||
|
|
2b15a23fe8 | ||
|
|
d30c3dfadd | ||
|
|
ef8dbb6305 | ||
|
|
623ba806e1 | ||
|
|
ea9dd03f55 | ||
|
|
92d20f33fe | ||
|
|
15caef83e6 | ||
|
|
19992402e2 | ||
|
|
182bbb94a2 | ||
|
|
20c3e22572 | ||
|
|
d3c2c084db | ||
|
|
cfbecc049d | ||
|
|
9de171fb83 | ||
|
|
2f48c765e3 | ||
|
|
ca005cbecd | ||
|
|
ee28d34f29 | ||
|
|
295191b9eb | ||
|
|
16b2aa8596 | ||
|
|
522ee0355e | ||
|
|
e5ca956897 | ||
|
|
a071f3d420 | ||
|
|
66888c418c | ||
|
|
b5f712fa04 | ||
|
|
1509401599 | ||
|
|
6506f4ae59 | ||
|
|
5a5fa52b57 | ||
|
|
b7d4c68ebe | ||
|
|
00a6c53178 | ||
|
|
67bc1a2a08 | ||
|
|
0bb3c9a26e | ||
|
|
4394941c71 | ||
|
|
175ea23bfc | ||
|
|
cef100e5d9 | ||
|
|
afba6c32c5 | ||
|
|
31f5bd095b | ||
|
|
e1add0ed28 | ||
|
|
79bc6a684b | ||
|
|
bae4db8e27 | ||
|
|
4cbba3f3cb | ||
|
|
e9fbb7f317 | ||
|
|
044f2436f8 | ||
|
|
b7369162d2 | ||
|
|
a13663e5e9 | ||
|
|
79dd9e2303 | ||
|
|
b4fa50a666 | ||
|
|
5a67fc7b0e | ||
|
|
9dab34e7ee | ||
|
|
c5eeae74b7 | ||
|
|
9009002b6e | ||
|
|
9bf23b3f6b | ||
|
|
3ec94c17bc | ||
|
|
ed8ba628e5 | ||
|
|
7c638473d6 | ||
|
|
d37140ead6 | ||
|
|
fdb0d97a61 | ||
|
|
0c1e9c0d60 | ||
|
|
e1a2255a58 | ||
|
|
f6b2c814c0 | ||
|
|
efb30231ee | ||
|
|
8cb6c19210 | ||
|
|
51c2618b5a | ||
|
|
279df59b5d | ||
|
|
d8373d0eba | ||
|
|
74fe97f2e2 | ||
|
|
e62f15f375 | ||
|
|
21dc73b556 | ||
|
|
a10325f6fb | ||
|
|
1ecef6fc16 | ||
|
|
67df3dc76a | ||
|
|
7ecfaea278 | ||
|
|
97151d18bf | ||
|
|
7ad7a1580d | ||
|
|
46f2954bc4 | ||
|
|
0c88f559e2 | ||
|
|
8a0979578a | ||
|
|
7ee28a00ae | ||
|
|
82330f870e | ||
|
|
54aecdc478 | ||
|
|
d5038a22ee | ||
|
|
c0bc493d21 | ||
|
|
1c75c7d386 | ||
|
|
251b125cbb | ||
|
|
efd2235ff3 | ||
|
|
1db2ff7ec5 | ||
|
|
4d5f3a6b63 | ||
|
|
62003308a7 | ||
|
|
cb037cfca9 | ||
|
|
15fffdf0c9 | ||
|
|
c1b245b4c9 | ||
|
|
d14225c0b9 | ||
|
|
d60be7dc80 | ||
|
|
146a1f3ed6 | ||
|
|
12fe10100b | ||
|
|
298d590306 | ||
|
|
8e6aae08b6 | ||
|
|
cb33ba114e | ||
|
|
6369ead491 | ||
|
|
ae350b4bfa | ||
|
|
cd5bb28fb7 | ||
|
|
f27a4e2a02 | ||
|
|
0f432d0375 | ||
|
|
8b67c59247 | ||
|
|
fdd7901f7e | ||
|
|
2eec7c4b2b | ||
|
|
64e3848c97 | ||
|
|
833cd7d3ba | ||
|
|
2f1b644a40 | ||
|
|
6a5c248d35 | ||
|
|
96df152220 | ||
|
|
a22c5025d7 | ||
|
|
cce0c92c0b | ||
|
|
90d7083b24 | ||
|
|
b3ab76e573 | ||
|
|
66913d5fc1 | ||
|
|
f5174ccac0 | ||
|
|
82489e7459 | ||
|
|
ad562a7b09 | ||
|
|
08c42e5acf | ||
|
|
aac9cf4fa0 | ||
|
|
a26b21da89 | ||
|
|
bb95c9a4d0 | ||
|
|
80dea3f71a | ||
|
|
0057a657d2 | ||
|
|
816270d545 | ||
|
|
2caa0432df | ||
|
|
e0d8b80cdf | ||
|
|
f094979ddb | ||
|
|
0c8144aaa8 | ||
|
|
3249e82873 | ||
|
|
66adad3135 | ||
|
|
f2e5bf4441 | ||
|
|
601b0595d4 | ||
|
|
c47fcb2225 | ||
|
|
550c7ca62a | ||
|
|
3256c276b4 | ||
|
|
04f43fff63 | ||
|
|
82e8c84000 | ||
|
|
31203d76ce | ||
|
|
572a948f2c | ||
|
|
b6ee49cfa6 | ||
|
|
0334c5db78 | ||
|
|
c45ebec261 | ||
|
|
ad2781b62c | ||
|
|
35dc11cce3 | ||
|
|
8d9e7443ec | ||
|
|
697ab225ea | ||
|
|
babbc5eadb | ||
|
|
f28dba7660 | ||
|
|
c5eba4b56a | ||
|
|
0b70819781 | ||
|
|
069fe8cae2 | ||
|
|
043f54e707 | ||
|
|
b635554e52 | ||
|
|
9e35616568 | ||
|
|
615dbda583 | ||
|
|
4b421a4a87 | ||
|
|
0fe06eb52b | ||
|
|
e8c6b8306f | ||
|
|
d1457253c4 | ||
|
|
1bcdaa5614 | ||
|
|
85dd67721f | ||
|
|
a25ee67cd3 | ||
|
|
67d48e7a79 | ||
|
|
49e69277af | ||
|
|
332284fec3 | ||
|
|
4897253932 | ||
|
|
6559c6b083 | ||
|
|
587d7da2cb | ||
|
|
7d55563556 | ||
|
|
53271966da | ||
|
|
ec4daf8e25 | ||
|
|
edd0842273 | ||
|
|
c1edc20462 | ||
|
|
ced7573241 | ||
|
|
24788fa894 | ||
|
|
dab98f4292 | ||
|
|
84cb775679 | ||
|
|
4e802f1dc5 | ||
|
|
b8efe6985f | ||
|
|
e047179ea0 | ||
|
|
197b3095b6 | ||
|
|
54c23079be | ||
|
|
a93dbde0c8 | ||
|
|
2a3d4f2670 | ||
|
|
e6ba4d8430 | ||
|
|
9284f101c8 | ||
|
|
685444655c | ||
|
|
027545f14c | ||
|
|
2e0322bc0e | ||
|
|
df7a4381c4 | ||
|
|
25dd1b9b0a | ||
|
|
a1a1631fd2 | ||
|
|
47f3ffef7b | ||
|
|
54b5583d1a | ||
|
|
30851a78e8 | ||
|
|
bc6b7b582e | ||
|
|
3927fb2a39 | ||
|
|
028f64a588 | ||
|
|
26ff496829 | ||
|
|
cb583f305c | ||
|
|
88b29d3183 | ||
|
|
02fdb27cc5 | ||
|
|
5fd53c1b2b | ||
|
|
696e3ae582 | ||
|
|
e7a29b7f1a | ||
|
|
e53120f3c2 | ||
|
|
3f463f4b73 | ||
|
|
83964026ec | ||
|
|
f79658a93c | ||
|
|
23fd37559e | ||
|
|
1fadc53743 | ||
|
|
0eaa898e15 | ||
|
|
0aeca76f63 | ||
|
|
8cf6c1fce3 | ||
|
|
736dd820a6 | ||
|
|
db73d1e45f | ||
|
|
6c31c1f2d8 | ||
|
|
fcce9b778b | ||
|
|
b309a55ed6 | ||
|
|
8b2b834818 | ||
|
|
9a63f5b2cc | ||
|
|
a7a116cb33 | ||
|
|
bc90fb1038 | ||
|
|
e307b6a8ac | ||
|
|
c9e8589689 | ||
|
|
e09682c219 | ||
|
|
967babbcb7 | ||
|
|
4973bf8cbe | ||
|
|
6421b74c66 | ||
|
|
463329a080 | ||
|
|
fd2144f8e9 | ||
|
|
18a579a204 | ||
|
|
58d5ea264f | ||
|
|
4b9d23cc3a | ||
|
|
f3e694d3d6 | ||
|
|
b9a0e516c6 | ||
|
|
198d421ab0 | ||
|
|
6caf34b17a | ||
|
|
f0a91b1579 | ||
|
|
c3e5663cf4 | ||
|
|
bcc6fcd2e7 | ||
|
|
3c3d681ca0 | ||
|
|
3e83c26cd5 | ||
|
|
ec841d5382 | ||
|
|
d2e4252487 | ||
|
|
7660dad4eb | ||
|
|
ddfa973c19 | ||
|
|
def0eb8586 | ||
|
|
c39ee82ac5 | ||
|
|
e1bde1971d | ||
|
|
79c90c5b97 | ||
|
|
06ffbaa2f4 | ||
|
|
63e7023342 | ||
|
|
88a0685097 | ||
|
|
ed3225ed84 | ||
|
|
96c997c38a | ||
|
|
c824d00986 | ||
|
|
c052796d52 | ||
|
|
1077204965 | ||
|
|
77476596f4 | ||
|
|
efd5443be4 | ||
|
|
8c88fbe10f | ||
|
|
06a67de14f | ||
|
|
8bb05406c8 | ||
|
|
3f31800158 | ||
|
|
f69489fc8f | ||
|
|
1f115dea92 | ||
|
|
f81424f1db | ||
|
|
1d09095ab9 | ||
|
|
bf6f25310c | ||
|
|
4c1e4fef7a | ||
|
|
ddd4824567 | ||
|
|
f31f58aa79 | ||
|
|
22bb143820 | ||
|
|
78b918087e | ||
|
|
91ce709d7b | ||
|
|
214ec0c5a5 | ||
|
|
0cb9254e63 | ||
|
|
4bbb339844 | ||
|
|
92b081c076 | ||
|
|
32ab0267fb | ||
|
|
8a0f190474 | ||
|
|
a189a4c754 | ||
|
|
b7b765c16e | ||
|
|
7713c6c21d | ||
|
|
c49184dcb1 | ||
|
|
fc3803991a | ||
|
|
f6011543c0 | ||
|
|
7390bb58c5 | ||
|
|
81482b47f4 | ||
|
|
6cb1dcaa43 | ||
|
|
78e4a4899c | ||
|
|
d15997cca0 | ||
|
|
1558f4ffe4 | ||
|
|
764cca73d1 | ||
|
|
1757eb5bec | ||
|
|
6cfac57162 | ||
|
|
d36d330244 | ||
|
|
4203de6d3f | ||
|
|
098e3c709a | ||
|
|
1a8e151efb | ||
|
|
6c8d22d396 | ||
|
|
a0ee1d886a | ||
|
|
bf6f1625ec | ||
|
|
3271377b7e | ||
|
|
f36bb65b45 | ||
|
|
c722982c39 | ||
|
|
e1109fff15 | ||
|
|
59c6567ff3 | ||
|
|
61f6901767 | ||
|
|
8277c80860 | ||
|
|
4093ba169c | ||
|
|
e3a9d253f7 | ||
|
|
80c67c8aa8 | ||
|
|
421969c3da | ||
|
|
e15b79750b | ||
|
|
37abe596c7 | ||
|
|
e6b44e1461 | ||
|
|
b9cb961da6 | ||
|
|
55c4b777fb | ||
|
|
2231727adb | ||
|
|
0a7e29d92f | ||
|
|
a105a42519 | ||
|
|
d20c2c786b | ||
|
|
14abed44a5 | ||
|
|
65fee64132 | ||
|
|
348688b5ce | ||
|
|
0cb84fc531 | ||
|
|
8a36c459d5 | ||
|
|
c7414ab070 | ||
|
|
d16f9e7ad8 | ||
|
|
3cbd2ed013 | ||
|
|
398f518b2f | ||
|
|
97a62def11 | ||
|
|
7ed49126a4 | ||
|
|
d976a34705 | ||
|
|
8b01c71819 | ||
|
|
1ee5e368f6 | ||
|
|
8fc71aae66 | ||
|
|
0589cc2f0c | ||
|
|
931a66498f | ||
|
|
8ec0a0289a | ||
|
|
2d8ce475f8 | ||
|
|
f8766722d4 | ||
|
|
1319e0b17b | ||
|
|
5e17bf0736 | ||
|
|
ca50bddc56 | ||
|
|
c78fc583b0 | ||
|
|
04cafc4181 | ||
|
|
f8300fa587 | ||
|
|
407ca567f1 | ||
|
|
320fd5c2dd | ||
|
|
e4c616245a | ||
|
|
5986130dfa | ||
|
|
19610479bd | ||
|
|
e3d2151bad | ||
|
|
89d205e946 | ||
|
|
15d13af7d5 | ||
|
|
3df8ed13a4 | ||
|
|
5a4a364250 | ||
|
|
00bee04c2c | ||
|
|
4475e8c24c | ||
|
|
5a49987338 | ||
|
|
76f1f1dcf3 | ||
|
|
0175cfbfb6 | ||
|
|
48483a5c99 | ||
|
|
71e4cc9413 | ||
|
|
a00c0117a2 | ||
|
|
c1bc81c664 | ||
|
|
1b7ef30a50 | ||
|
|
efad2b96db | ||
|
|
56a200499e | ||
|
|
1c58f1d623 | ||
|
|
6cdd56e22f | ||
|
|
53acb847bc | ||
|
|
2b006457c7 | ||
|
|
fbc1672e3d | ||
|
|
542123ce04 | ||
|
|
59eb7f7935 | ||
|
|
74482d6e2c | ||
|
|
529ac2f778 | ||
|
|
b73c3228e4 | ||
|
|
26f7c1f9d1 | ||
|
|
f078232499 | ||
|
|
8cd91f6df3 | ||
|
|
5670c0f975 | ||
|
|
99d4177e89 | ||
|
|
d07b1c86be | ||
|
|
fe494c52b1 | ||
|
|
bc50328006 | ||
|
|
90afe204b1 | ||
|
|
d981b77ed7 | ||
|
|
541a9a55b5 | ||
|
|
cd3fc15bcb | ||
|
|
4e50038b41 | ||
|
|
a8354ee38f | ||
|
|
c4907c8ce5 | ||
|
|
3c3c680b00 | ||
|
|
3a32f45334 | ||
|
|
8e1843f90b | ||
|
|
dc01de98dc | ||
|
|
971061d231 | ||
|
|
d04dd831e4 | ||
|
|
8dcfda9787 | ||
|
|
c938021bef | ||
|
|
3fcf0fb72a | ||
|
|
e99406fbe4 | ||
|
|
60073be993 | ||
|
|
d3df4c7020 | ||
|
|
adce92e312 | ||
|
|
4973545fe1 | ||
|
|
8425c97102 | ||
|
|
1876b8bdc7 | ||
|
|
99ff3a8e45 | ||
|
|
cae251905c | ||
|
|
f738ce90e0 | ||
|
|
2f2bb20550 | ||
|
|
591ede0507 | ||
|
|
09665fead3 | ||
|
|
60ee2f1c2b | ||
|
|
d6d8197869 | ||
|
|
b1da42b543 | ||
|
|
e874550d29 | ||
|
|
6cd9657446 | ||
|
|
2790c613aa | ||
|
|
7b868bc60b | ||
|
|
c1b3511c06 | ||
|
|
1e3c859ae0 | ||
|
|
faab67800f | ||
|
|
7f9d92cbe9 | ||
|
|
4e287a0231 | ||
|
|
8c9c331d7e | ||
|
|
37ce54051e | ||
|
|
f31b047671 | ||
|
|
aaff616332 | ||
|
|
cfc1b73c74 | ||
|
|
0d2967423b | ||
|
|
cb3681ffdd | ||
|
|
4c343c6f34 | ||
|
|
ff158add1f | ||
|
|
2c64cd5cce | ||
|
|
c43ab28fb0 | ||
|
|
dd00e1f55a | ||
|
|
2b3acee97c | ||
|
|
d96558c3df | ||
|
|
b8db557ffe | ||
|
|
300256b196 | ||
|
|
7ba1b316f7 | ||
|
|
822d41e885 | ||
|
|
0253572975 | ||
|
|
0328c1de81 | ||
|
|
c6ee9dedb9 | ||
|
|
88136811b9 | ||
|
|
7c816d0822 | ||
|
|
a5fe62e502 | ||
|
|
892be42988 | ||
|
|
c0eb98c3f9 | ||
|
|
1ddbd0aa4e | ||
|
|
4f1e505a7a | ||
|
|
dcec804681 | ||
|
|
a127f46a06 | ||
|
|
c8d277c51d | ||
|
|
42477d6893 | ||
|
|
4c1fb826be | ||
|
|
a0c29d1174 | ||
|
|
2f0b340fe0 | ||
|
|
cbe242bb94 | ||
|
|
a088c6dbd3 | ||
|
|
036aba2420 | ||
|
|
60269c7777 | ||
|
|
e90f561584 | ||
|
|
4bd18c1386 | ||
|
|
fe51185f74 | ||
|
|
a35395bd51 | ||
|
|
f1225b1ff3 | ||
|
|
63d727d5c5 | ||
|
|
46864ee23a | ||
|
|
46728d8bc3 | ||
|
|
daa9a7c012 | ||
|
|
0f595b8cbf | ||
|
|
26b001a5fc | ||
|
|
3704d2520d | ||
|
|
41e89605f0 | ||
|
|
065ea59114 | ||
|
|
64bb2ed101 | ||
|
|
c48c73909d | ||
|
|
68d113f335 | ||
|
|
8bb66b53e0 | ||
|
|
84c36f1789 | ||
|
|
2214c1dee3 |
1
.github/FUNDING.yml
vendored
@@ -1 +0,0 @@
|
||||
custom: ['https://www.buymeacoffee.com/veeso']
|
||||
5
.github/ISSUE_TEMPLATE/bug_report.md
vendored
@@ -28,6 +28,11 @@ A clear and concise description of what you expected to happen.
|
||||
- Protocol used
|
||||
- Remote server version and name
|
||||
|
||||
## Log
|
||||
|
||||
Report the snippet of the log file containing the unexpected behaviour.
|
||||
If there is any information you consider to be confidential, shadow it.
|
||||
|
||||
## Additional information
|
||||
|
||||
Add any other context about the problem here.
|
||||
|
||||
35
.github/ISSUE_TEMPLATE/copy.md
vendored
Normal file
@@ -0,0 +1,35 @@
|
||||
---
|
||||
name: Copy
|
||||
about: Report a typo/error in a repository document
|
||||
title: "[COPY] - ISSUE_TITLE"
|
||||
labels: documentation
|
||||
assignees: veeso
|
||||
|
||||
---
|
||||
|
||||
## Report
|
||||
|
||||
### DOCUMENT NAME
|
||||
|
||||
This sentence at row ROW_NUMBER doesn't seem right:
|
||||
|
||||
> Write down here the wrong sentence
|
||||
|
||||
and I think it should be changed to:
|
||||
|
||||
> Write down here the correct sentence
|
||||
|
||||
`Copy paste the template above for all the sentences to fix`
|
||||
|
||||
---
|
||||
|
||||
`Copy paste the template above for all the documents to fix`
|
||||
|
||||
## Additional information
|
||||
|
||||
> ❗ Report LANGUAGE checks only if it concerns the documents above
|
||||
> ❗ If the documents concerns more than one language, copy paste the checks below for each check you want to report
|
||||
> ❗ The PR mention regards the indicated language. If you check the box, I may add you to a PR where I need to translate a new section of the user manual/README or other documents. I promise I won't stress you anyway.
|
||||
|
||||
- [ ] I am C1/C2 speaker for this language: LANGUAGE
|
||||
- [ ] You can mention me in a PR in case a review for translations is needed
|
||||
23
.github/ISSUE_TEMPLATE/security.md
vendored
Normal file
@@ -0,0 +1,23 @@
|
||||
---
|
||||
name: Security report
|
||||
about: Create a report of a security vulnerability
|
||||
title: "[SECURITY] - ISSUE_TITLE"
|
||||
labels: security
|
||||
assignees: veeso
|
||||
|
||||
---
|
||||
|
||||
## Description
|
||||
|
||||
Severity:
|
||||
|
||||
- [ ] **critical**
|
||||
- [ ] high
|
||||
- [ ] medium
|
||||
- [ ] low
|
||||
|
||||
A clear and concise description of the security vulnerability.
|
||||
|
||||
## Additional information
|
||||
|
||||
Add any other context about the problem here.
|
||||
6
.github/PULL_REQUEST_TEMPLATE.md
vendored
@@ -32,3 +32,9 @@ Please select relevant options.
|
||||
- [ ] I have introduced no new *C-bindings*
|
||||
- [ ] The changes I've made are Windows, MacOS, UNIX, Linux compatible (or I've handled them using `cfg target_os`)
|
||||
- [ ] I increased or maintained the code coverage for the project, compared to the previous commit
|
||||
|
||||
## Acceptance tests
|
||||
|
||||
wait for a *project maintainer* to fulfill this section...
|
||||
|
||||
- [ ] regression test: ...
|
||||
|
||||
16
.github/actions-rs/grcov.yml
vendored
Normal file
@@ -0,0 +1,16 @@
|
||||
branch: false
|
||||
ignore-not-existing: true
|
||||
llvm: true
|
||||
output-type: lcov
|
||||
ignore:
|
||||
- "/*"
|
||||
- "C:/*"
|
||||
- "../*"
|
||||
- src/main.rs
|
||||
- src/activity_manager.rs
|
||||
- src/cli_opts.rs
|
||||
- src/support.rs
|
||||
- src/system/notifications.rs
|
||||
- "src/ui/activities/*"
|
||||
- src/ui/context.rs
|
||||
- src/ui/input.rs
|
||||
21
.github/workflows/aur-pub.yml
vendored
@@ -1,21 +0,0 @@
|
||||
name: aur-pub
|
||||
on:
|
||||
push:
|
||||
tags:
|
||||
- "*"
|
||||
jobs:
|
||||
aur-publish:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
|
||||
- name: Publish AUR package
|
||||
uses: KSXGitHub/github-actions-deploy-aur@v2.2.3
|
||||
with:
|
||||
pkgname: termscp
|
||||
pkgbuild: ./dist/pkgs/arch/PKGBUILD
|
||||
commit_username: ${{ secrets.AUR_USERNAME }}
|
||||
commit_email: ${{ secrets.AUR_EMAIL }}
|
||||
ssh_private_key: ${{ secrets.AUR_KEY }}
|
||||
commit_message: Update AUR package
|
||||
ssh_keyscan_types: rsa,dsa,ecdsa,ed25519
|
||||
46
.github/workflows/build-artifacts.yml
vendored
Normal file
@@ -0,0 +1,46 @@
|
||||
name: "Build artifacts"
|
||||
|
||||
on:
|
||||
workflow_dispatch:
|
||||
|
||||
env:
|
||||
TERMSCP_VERSION: "0.17.0"
|
||||
|
||||
jobs:
|
||||
build-binaries:
|
||||
name: Build - ${{ matrix.platform.release_for }}
|
||||
strategy:
|
||||
matrix:
|
||||
platform:
|
||||
- release_for: MacOS-x86_64
|
||||
os: macos-latest
|
||||
target: x86_64-apple-darwin
|
||||
script: macos.sh
|
||||
|
||||
- release_for: MacOS-M1
|
||||
os: macos-latest
|
||||
target: aarch64-apple-darwin
|
||||
script: macos.sh
|
||||
|
||||
runs-on: ${{ matrix.platform.os }}
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- uses: dtolnay/rust-toolchain@stable
|
||||
with:
|
||||
toolchain: stable
|
||||
targets: ${{ matrix.platform.target }}
|
||||
- name: Build release
|
||||
run: cargo build --release --target ${{ matrix.platform.target }}
|
||||
- name: Prepare artifact files
|
||||
run: |
|
||||
mkdir -p .artifact
|
||||
mv target/${{ matrix.platform.target }}/release/termscp .artifact/termscp
|
||||
tar -czf .artifact/termscp-v${{ env.TERMSCP_VERSION }}-${{ matrix.platform.target }}.tar.gz -C .artifact termscp
|
||||
ls -l .artifact/
|
||||
- name: "Upload artifact"
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
if-no-files-found: error
|
||||
retention-days: 1
|
||||
name: termscp-${{ matrix.platform.target }}
|
||||
path: .artifact/termscp-v${{ env.TERMSCP_VERSION }}-${{ matrix.platform.target }}.tar.gz
|
||||
22
.github/workflows/coverage.yml
vendored
@@ -1,22 +0,0 @@
|
||||
name: coverage
|
||||
|
||||
on: [push, pull_request]
|
||||
|
||||
env:
|
||||
CARGO_TERM_COLOR: always
|
||||
|
||||
jobs:
|
||||
coverage:
|
||||
name: Generate coverage
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@v2
|
||||
|
||||
- name: Run cargo-tarpaulin
|
||||
uses: actions-rs/tarpaulin@v0.1
|
||||
with:
|
||||
args: "--ignore-tests -- --test-threads 1"
|
||||
|
||||
- name: Upload to codecov.io
|
||||
uses: codecov/codecov-action@v1
|
||||
23
.github/workflows/install.yml
vendored
Normal file
@@ -0,0 +1,23 @@
|
||||
name: Install.sh
|
||||
|
||||
on:
|
||||
push:
|
||||
branches: [main]
|
||||
tags:
|
||||
- "v*"
|
||||
|
||||
env:
|
||||
CARGO_TERM_COLOR: always
|
||||
|
||||
jobs:
|
||||
build:
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- name: Install dependencies
|
||||
run: sudo apt update && sudo apt install -y curl wget libsmbclient
|
||||
- name: Install termscp from script
|
||||
run: |
|
||||
./install.sh -v=0.12.3 -f
|
||||
which termscp || exit 1
|
||||
20
.github/workflows/linux.yml
vendored
@@ -1,6 +1,14 @@
|
||||
name: Linux
|
||||
|
||||
on: [push, pull_request]
|
||||
on:
|
||||
pull_request:
|
||||
paths-ignore:
|
||||
- "*.md"
|
||||
- "./site/**/*"
|
||||
push:
|
||||
paths-ignore:
|
||||
- "*.md"
|
||||
- "./site/**/*"
|
||||
|
||||
env:
|
||||
CARGO_TERM_COLOR: always
|
||||
@@ -11,15 +19,17 @@ jobs:
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- uses: actions-rs/toolchain@v1
|
||||
- name: Install dependencies
|
||||
run: sudo apt update && sudo apt install -y libdbus-1-dev libsmbclient-dev
|
||||
- uses: dtolnay/rust-toolchain@stable
|
||||
with:
|
||||
toolchain: stable
|
||||
override: true
|
||||
components: rustfmt, clippy
|
||||
- uses: actions-rs/cargo@v1
|
||||
- name: Run tests
|
||||
uses: actions-rs/cargo@v1
|
||||
with:
|
||||
command: test
|
||||
args: --all-features --no-fail-fast
|
||||
args: --no-default-features --features github-actions --no-fail-fast
|
||||
- name: Format
|
||||
run: cargo fmt --all -- --check
|
||||
- name: Clippy
|
||||
|
||||
21
.github/workflows/macos.yml
vendored
@@ -1,6 +1,14 @@
|
||||
name: MacOS
|
||||
|
||||
on: [push, pull_request]
|
||||
on:
|
||||
pull_request:
|
||||
paths-ignore:
|
||||
- "*.md"
|
||||
- "./site/**/*"
|
||||
push:
|
||||
paths-ignore:
|
||||
- "*.md"
|
||||
- "./site/**/*"
|
||||
|
||||
env:
|
||||
CARGO_TERM_COLOR: always
|
||||
@@ -8,12 +16,15 @@ env:
|
||||
jobs:
|
||||
build:
|
||||
runs-on: macos-latest
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- uses: dtolnay/rust-toolchain@stable
|
||||
with:
|
||||
toolchain: stable
|
||||
components: rustfmt, clippy
|
||||
- name: Build
|
||||
run: cargo build --verbose
|
||||
run: cargo build
|
||||
- name: Run tests
|
||||
run: cargo test --verbose --features githubActions -- --test-threads 1
|
||||
run: cargo test --verbose --features github-actions
|
||||
- name: Clippy
|
||||
run: cargo clippy
|
||||
run: cargo clippy -- -Dwarnings
|
||||
|
||||
24
.github/workflows/stale.yml
vendored
Normal file
@@ -0,0 +1,24 @@
|
||||
name: Close inactive issues
|
||||
on:
|
||||
schedule:
|
||||
- cron: "30 1 * * *"
|
||||
|
||||
jobs:
|
||||
close-issues:
|
||||
runs-on: ubuntu-latest
|
||||
permissions:
|
||||
issues: write
|
||||
pull-requests: write
|
||||
steps:
|
||||
- uses: actions/stale@v4.1.1
|
||||
with:
|
||||
days-before-issue-stale: 30
|
||||
days-before-issue-close: 7
|
||||
stale-issue-label: "stale"
|
||||
stale-issue-message: "This issue is stale because it has been open for 30 days with no activity."
|
||||
close-issue-message: "This issue was closed because it has been inactive for 7 days since being marked as stale."
|
||||
days-before-pr-stale: -1
|
||||
days-before-pr-close: -1
|
||||
repo-token: ${{ secrets.GITHUB_TOKEN }}
|
||||
exempt-issue-labels: "backlog"
|
||||
exempt-all-milestones: true
|
||||
43
.github/workflows/website.yml
vendored
Normal file
@@ -0,0 +1,43 @@
|
||||
# Simple workflow for deploying static content to GitHub Pages
|
||||
name: Deploy static content to Pages
|
||||
|
||||
on:
|
||||
# Runs on pushes targeting the default branch
|
||||
push:
|
||||
branches: ["main"]
|
||||
paths:
|
||||
- "./site/**/*"
|
||||
|
||||
# Allows you to run this workflow manually from the Actions tab
|
||||
workflow_dispatch:
|
||||
|
||||
# Sets permissions of the GITHUB_TOKEN to allow deployment to GitHub Pages
|
||||
permissions:
|
||||
contents: read
|
||||
pages: write
|
||||
id-token: write
|
||||
|
||||
# Allow one concurrent deployment
|
||||
concurrency:
|
||||
group: "pages"
|
||||
cancel-in-progress: true
|
||||
|
||||
jobs:
|
||||
# Single deploy job since we're just deploying
|
||||
deploy:
|
||||
environment:
|
||||
name: github-pages
|
||||
url: ${{ steps.deployment.outputs.page_url }}
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v3
|
||||
- name: Setup Pages
|
||||
uses: actions/configure-pages@v5
|
||||
- name: Upload artifact
|
||||
uses: actions/upload-pages-artifact@v3
|
||||
with:
|
||||
path: "./site/"
|
||||
- name: Deploy to GitHub Pages
|
||||
id: deployment
|
||||
uses: actions/deploy-pages@v4
|
||||
20
.github/workflows/windows.yml
vendored
@@ -1,6 +1,14 @@
|
||||
name: Windows
|
||||
|
||||
on: [push, pull_request]
|
||||
on:
|
||||
pull_request:
|
||||
paths-ignore:
|
||||
- "*.md"
|
||||
- "./site/**/*"
|
||||
push:
|
||||
paths-ignore:
|
||||
- "*.md"
|
||||
- "./site/**/*"
|
||||
|
||||
env:
|
||||
CARGO_TERM_COLOR: always
|
||||
@@ -11,9 +19,13 @@ jobs:
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- uses: dtolnay/rust-toolchain@stable
|
||||
with:
|
||||
toolchain: stable
|
||||
components: rustfmt, clippy
|
||||
- name: Build
|
||||
run: cargo build --verbose
|
||||
run: cargo build
|
||||
- name: Run tests
|
||||
run: cargo test --verbose --features githubActions -- --test-threads 1
|
||||
run: cargo test --verbose --features github-actions
|
||||
- name: Clippy
|
||||
run: cargo clippy
|
||||
run: cargo clippy -- -Dwarnings
|
||||
|
||||
3
.gitignore
vendored
@@ -21,3 +21,6 @@ dist/pkgs/arch/*.tar.gz
|
||||
|
||||
# Macos
|
||||
.DS_Store
|
||||
|
||||
dist/pkgs/
|
||||
dist/build/macos/openssl/
|
||||
|
||||
560
CHANGELOG.md
@@ -1,6 +1,30 @@
|
||||
# Changelog
|
||||
|
||||
- [Changelog](#changelog)
|
||||
- [0.17.0](#0170)
|
||||
- [0.16.1](#0161)
|
||||
- [0.16.0](#0160)
|
||||
- [0.15.0](#0150)
|
||||
- [0.14.0](#0140)
|
||||
- [0.13.0](#0130)
|
||||
- [0.12.3](#0123)
|
||||
- [0.12.2](#0122)
|
||||
- [0.12.1](#0121)
|
||||
- [0.12.0](#0120)
|
||||
- [0.11.3](#0113)
|
||||
- [0.11.2](#0112)
|
||||
- [0.11.1](#0111)
|
||||
- [0.11.0](#0110)
|
||||
- [0.10.0](#0100)
|
||||
- [0.9.0](#090)
|
||||
- [0.8.2](#082)
|
||||
- [0.8.1](#081)
|
||||
- [0.8.0](#080)
|
||||
- [0.7.0](#070)
|
||||
- [0.6.1](#061)
|
||||
- [0.6.0](#060)
|
||||
- [0.5.1](#051)
|
||||
- [0.5.0](#050)
|
||||
- [0.4.2](#042)
|
||||
- [0.4.1](#041)
|
||||
- [0.4.0](#040)
|
||||
@@ -16,6 +40,540 @@
|
||||
|
||||
---
|
||||
|
||||
## 0.17.0
|
||||
|
||||
Released on 24/03/2025
|
||||
|
||||
- **Queuing transfers**:
|
||||
- the logic of selecting files has been extended!
|
||||
- From now on selecting file will put the files into a **transfer queue**, which is shown on the bottom panel.
|
||||
- When a file is selected the file is added to the queue with a destination path, which is the **current other explorer path at the moment of selection.**
|
||||
- It is possible to navigate to the transfer queue by using `P` and pressing `ENTER` or `DELETE` on a file will remove it from the transfer queue.
|
||||
- Other commands will work as well on the transfer queue, like `COPY`, `MOVE`, `DELETE`, `RENAME`.
|
||||
- [issue 308](https://github.com/veeso/termscp/issues/308): added `--wno-keyring` flag to disable keyring
|
||||
- [issue 316](https://github.com/veeso/termscp/issues/316): Local directory path is not switching to what's specified in the bookmark. Now the local directory path is correctly set following this hierarchy:
|
||||
1. Local directory path specified for the host bridge
|
||||
2. Local directory path specified in the bookmark
|
||||
3. Working directory
|
||||
- [issue 317](https://github.com/veeso/termscp/issues/317): the return value of `--version` should be `0`
|
||||
- [issue 319](https://github.com/veeso/termscp/issues/319): fixed a crash when the local directory specified in the auth form does not exist
|
||||
- [issue 327](https://github.com/veeso/termscp/issues/327): fixed a panic when trying to go up from local directory on localhost in the auth form
|
||||
- [issue 330](https://github.com/veeso/termscp/issues/330): add suppaftp/pavao/kube to allowed logs
|
||||
- Dependencies:
|
||||
- `argh` to `0.1.13`
|
||||
- `bytesize` to `2`
|
||||
- `dirs` to `6`
|
||||
- `magic-crypt` to `4`
|
||||
- `notify` to `8`
|
||||
- `ssh2-config` to `0.4`
|
||||
- `remotefs-ssh` to `0.6`
|
||||
- `rust` edition to `2024`
|
||||
|
||||
## 0.16.1
|
||||
|
||||
Released on 12/11/2024
|
||||
|
||||
- Just fixed this: e45c3d5b4ef64653e5b6cc4f3703e3b67514306d
|
||||
- `fix: gg rust 1.82 for introducing a nice breaking change in config which was not mentioned in changelog`
|
||||
|
||||
## 0.16.0
|
||||
|
||||
Released on 14/10/2024
|
||||
|
||||
- [**Multi Host support**](https://github.com/veeso/termscp/issues/285):
|
||||
- Now it is possible to work on two different remotes `remote A -> remote B` instead of just `localhost -> remote`
|
||||
- Cli arguments now accept an additional `remote-args` for the left panel.
|
||||
- For more details read this issue <https://github.com/veeso/termscp/issues/285>.
|
||||
- Change between auth forms with `<BACKTAB>`
|
||||
- Bookmarks are automatically loaded into the last auth form.
|
||||
- [Issue 289](https://github.com/veeso/termscp/issues/289): Use `uzers` instead of the dead package `users` which has several vulnerabilities
|
||||
- [Issue 290](https://github.com/veeso/termscp/issues/290): Password prompt was broken
|
||||
- [Issue 298](https://github.com/veeso/termscp/issues/298): tuirealm 2.x
|
||||
- Fixed some performance issues where sometimes the app froze for a couple of seconds, thanks to this <https://github.com/veeso/tui-realm/pull/78>.
|
||||
- [Issue 292](https://github.com/veeso/termscp/issues/292): New version alert was not displayed due to a semver regex issue.
|
||||
- [Issue 291](https://github.com/veeso/termscp/issues/291): Show `..` directory before all the others in the explorer. If you click on it you'll go the parent directory (same as pressing `<U>`). No, you can't select it for transfers and it's actually been implemented in the worse way possible, because this little change would require a huge refactoring of the explorer component. I promise I will do it one day, but I dunno when.
|
||||
- Logging: filter out messages not related to termscp or remotefs
|
||||
|
||||
## 0.15.0
|
||||
|
||||
Released on 03/10/2024
|
||||
|
||||
- [Issue 249](https://github.com/veeso/termscp/issues/249): The old *find* command has been replaced with a brand new explorer with support to 🪄 **Fuzzy search** 🪄. The command is still `<F>`.
|
||||
- [Issue 283](https://github.com/veeso/termscp/issues/283): **Find command can now be cancelled** by pressing `<CTRL+C>`. While scanning the directory it will also display the current progress.
|
||||
- [Issue 268](https://github.com/veeso/termscp/issues/268): 📦 **Pods and container explorer** 🐳 for Kube protocol.
|
||||
- BREAKING ‼️ Kube address argument has changed to `namespace[@<cluster_url>][$<path>]`
|
||||
- Pod and container argumets have been removed; from now on you will connect with the following syntax to the provided namespace: `/pod-name/container-name/path/to/file`
|
||||
- [Issue 279](https://github.com/veeso/termscp/issues/279): do not clear screen
|
||||
- [Issue 277](https://github.com/veeso/termscp/issues/277): Fix a bug in the configuration page, which caused being stuck if the added SSH key was empty
|
||||
- [Issue 272](https://github.com/veeso/termscp/issues/272): `isolated-tests` feature to run tests for releasing on distributions which run in isolated environments
|
||||
- [Issue 280](https://github.com/veeso/termscp/issues/280): Autocompletion when pressing `<TAB>` on the `Go to` popup.
|
||||
|
||||
## 0.14.0
|
||||
|
||||
Released on 17/07/2024
|
||||
|
||||
- [Issue 226](https://github.com/veeso/termscp/issues/226): Use ssh-agent
|
||||
- [Issue 241](https://github.com/veeso/termscp/issues/241): Jump to next entry after select
|
||||
- [Issue 242](https://github.com/veeso/termscp/issues/242): Added `Kube` protocol support
|
||||
- [Issue 255](https://github.com/veeso/termscp/issues/255): New keybindings `Alt + A` to deselect all files
|
||||
- [Issue 256](https://github.com/veeso/termscp/issues/256): Filter files in current folder. You can now filter files by pressing `/`. Both wildmatch and regex are accepted to filter files.
|
||||
- [Issue 257](https://github.com/veeso/termscp/issues/257): CLI remote args cannot handle '@' in the username
|
||||
|
||||
## 0.13.0
|
||||
|
||||
Released on 03/03/2024
|
||||
|
||||
- Added CLI subcommands
|
||||
- Changed `-t` to `theme`
|
||||
- Changed `-u` to `update`
|
||||
- Changed `-c` to `config`
|
||||
- Introduced support for [WebDAV](https://www.rfc-editor.org/rfc/rfc4918)
|
||||
- It is now possible also to connect directly to WebDAV server with the syntax `http(s)://username:password@google.com`
|
||||
- Bugfix:
|
||||
- [Issue 232](https://github.com/veeso/termscp/issues/232): AWS S3 wasn't working anymore due to rust-s3 outdate
|
||||
- Dependencies:
|
||||
- Added `remotefs-webdav 0.1.1`
|
||||
|
||||
## 0.12.3
|
||||
|
||||
Released on 06/10/2023
|
||||
|
||||
- Dropped ratatui support, reverted to tui-realm 1.8
|
||||
|
||||
## 0.12.2
|
||||
|
||||
Released on 01/10/2023
|
||||
|
||||
- [Issue 205](https://github.com/veeso/termscp/issues/205): Allow windows build without SMB support
|
||||
- [Issue 215](https://github.com/veeso/termscp/issues/215): termscp not respecting port in SSH config. The port specified for the host in the SSH configuration wasn't evaluated.
|
||||
- [Issue 213](https://github.com/veeso/termscp/issues/215): termscp panicks if the terminal window is too small
|
||||
|
||||
## 0.12.1
|
||||
|
||||
Released on 06/07/2023
|
||||
|
||||
- [Issue 169](https://github.com/veeso/termscp/issues/169): Local working directory can now be specified in connection form and be saved into bookmarks.
|
||||
- [Issue 188](https://github.com/veeso/termscp/issues/188): The breadcrumbs path is not fallbacked after a failed enter into the directory
|
||||
|
||||
- SMB support is now a feature (you can build rust without default features to disable smb).
|
||||
- If SSH connection timeout is 0, the connection won't timeout.
|
||||
|
||||
## 0.12.0
|
||||
|
||||
Released on 16/05/2023
|
||||
|
||||
- **Change file permissions**: you can now change file permissions easily with the permissions popup pressing `Z` in the explorer.
|
||||
- [Issue 172](https://github.com/veeso/termscp/issues/172)
|
||||
- **SMB protocol**: Support for SMB protocol has been added thanks to the [remotefs-smb](https://github.com/veeso/remotefs-rs-smb) library and the [pavao](https://github.com/veeso/pavao) project. You may notice that the interface is quiet different between Windows and Linux/MacOs/BSD due to the fact that SMB is natively supported on Windows systems.
|
||||
- [Issue 182](https://github.com/veeso/termscp/issues/182)
|
||||
- [Issue 153](https://github.com/veeso/termscp/issues/153): show a loading message when loading directory's content
|
||||
- [Issue 176](https://github.com/veeso/termscp/issues/176): debug log is now written to CACHE_DIR
|
||||
- [Issue 173](https://github.com/veeso/termscp/issues/173): allow unknown fields in ssh2 configuration file
|
||||
- [Issue 175](https://github.com/veeso/termscp/issues/175): don't prompt for password if a ssh key is set for that host
|
||||
- Fixed an issue that didn't use the `User` specified in ssh2-config
|
||||
|
||||
## 0.11.3
|
||||
|
||||
Released on 19/04/2023
|
||||
|
||||
- [Issue 166](https://github.com/veeso/termscp/issues/166): fixed SCP relative paths on Windows
|
||||
|
||||
## 0.11.2
|
||||
|
||||
Released on 18/04/2023
|
||||
|
||||
- [Issue 154](https://github.com/veeso/termscp/issues/154): fixed SCP relative paths on Windows
|
||||
|
||||
## 0.11.1
|
||||
|
||||
Released on 07/03/2022
|
||||
|
||||
- [Issue 150](https://github.com/veeso/termscp/issues/150)
|
||||
- fixed config directory not being created
|
||||
- before setting default ssh config path; check wheter it actually exists
|
||||
- Security:
|
||||
- removed `remove_dir_all` crate with `tempfile 3.4`
|
||||
- Dependencies:
|
||||
- Bump `ssh2-config` to `0.1.6`
|
||||
|
||||
## 0.11.0
|
||||
|
||||
Released on 20/02/2023
|
||||
|
||||
> 🦥 The lazy update
|
||||
|
||||
- **Transfers optimized**:
|
||||
- If local/remote file have the same "last modification time" (`mtime`), the file is not transferred
|
||||
- When the file is exchanged, all times attributes are set (if supported by the protocol)
|
||||
- **Default ssh config path**:
|
||||
- SSH configuration path is now `~/.ssh/config` by default
|
||||
- Added ARM64 Linux builds
|
||||
- **Bugfix**:
|
||||
- Fixed [Issue 126](https://github.com/veeso/termscp/issues/126)
|
||||
- Fixed [Issue 141](https://github.com/veeso/termscp/issues/141)
|
||||
- Dependencies:
|
||||
- Bump `remotefs-ssh` to `0.1.3`
|
||||
- Bump `self_update` to `0.35`
|
||||
- Bump `ssh2-config` to `0.1.4`
|
||||
- Bump `toml` to `0.7`
|
||||
|
||||
## 0.10.0
|
||||
|
||||
Released on 15/10/2022
|
||||
|
||||
> ⭐ 500 stars update ⭐
|
||||
> Thank you for supporting termscp and make it reaching 500 stars on Github
|
||||
|
||||
- **Changed keybindings for BACKTAB**: backtab will now change the explorer tab
|
||||
- To active the LOG PANEL, use `P`
|
||||
- **Yes/No dialogs** are now answerable by pressing `Y` or `N` on your keyboard ([Issue 121](https://github.com/veeso/termscp/issues/121))
|
||||
- **Use ssh2 config IdentityFile** as fallback for key based authentication
|
||||
- **Bugfix**
|
||||
- Fixed [Issue 122](https://github.com/veeso/termscp/issues/122)
|
||||
- Fixed version comparison when going above 0.9
|
||||
- Dependencies:
|
||||
- Bump `argh` to `0.1.9`
|
||||
- Bump `chrono` to `0.4.22`
|
||||
- Bump `keyring` to `1.2.0`
|
||||
- Bump `notify-rust` to `4.5.10`
|
||||
- Bump `open` to `3.0.3`
|
||||
- Bump `rpassword` to `7.0.0`
|
||||
- Changed `regex` to `lazy-regex 2.3.0`
|
||||
- Bump `remotefs-ftp` to `0.1.2`
|
||||
- Bump `remotefs-ssh` to `0.1.2`
|
||||
- Bump `self_update` to `0.32`
|
||||
- Bump `ssh2-config` to `0.1.3`
|
||||
- Bump `tuirealm` to `1.8.0`
|
||||
- Bump `tui-realm-stdlib` to `1.1.7`
|
||||
- Bump `unicode-width` to `0.1.10`
|
||||
- Added `version-compare 0.1.0`
|
||||
- Bump `whoami` to `1.2.3`
|
||||
- Bump `wildmatch` to `2.1.1`
|
||||
- Removed libssl dependency
|
||||
|
||||
## 0.9.0
|
||||
|
||||
Released on 18/06/2022
|
||||
|
||||
> 🏖️ Tenerife Update 🍹
|
||||
|
||||
- **Bookmark name as hostname for CLI arguments**
|
||||
- It is now possible to provide the name of the bookmark you want to connect to, instead of the address in command line arguments
|
||||
|
||||
To do so it is enough to run termscp as follows:
|
||||
|
||||
```sh
|
||||
termscp -b <bookmark-name>
|
||||
```
|
||||
|
||||
If the password is stored in the bookmark, it will be used, otherwise you will be prompted to type the password in.
|
||||
- **Remote directory path in authentication form and in bookmarks parameters**:
|
||||
- It is now possible to configure the directory path you want to enter when you connect to the remote host from the authentication form
|
||||
- This parameter can be stored into bookmarks as you already do with the other parameters
|
||||
- You can find this field scrolling down in the authentication form
|
||||
- **File system watcher**:
|
||||
- It is now possible to synchronize changes from a local path to the remote host
|
||||
- Press `<T>` to start synchronizing changes from the selected directory/file to the remote directory
|
||||
- The changes will be automatically applied to the remote host with a maximum delay of 5 seconds
|
||||
- These changes are (if possible) applied: file removed, file changed, file renamed
|
||||
- Press `<CTRL+T>` to show all the currently synchronized files
|
||||
- **Enhancements**:
|
||||
- Improved s3 auth form scrolling
|
||||
- **Bugfix**:
|
||||
- Fixed SSH key list showing `{hostname} at {username}` instead of `{username} at {hostname}`
|
||||
- Dependencies:
|
||||
- Updated `edit` to `0.1.4`
|
||||
- Updated `log` to `0.4.17`
|
||||
- Updated `magic-crypt` to `3.1.10`
|
||||
- Updated `open` to `2.1.3`
|
||||
- Updated `regex` to `1.5.6`
|
||||
- Updated `rpassword` to `6.0.1`
|
||||
- Updated `self_update` to `0.30.0`
|
||||
- Updated `simplelog` to `0.12.0`
|
||||
- Updated `toml` to `0.5.9`
|
||||
- Updated `tui-realm` to `1.6.0`
|
||||
|
||||
## 0.8.2
|
||||
|
||||
Released on 26/04/2022
|
||||
|
||||
- **Enhancements**
|
||||
- Write exitcode to log when termscp terminates
|
||||
- Bugfix:
|
||||
- [Issue 104](https://github.com/veeso/termscp/issues/104): Fixed termscp panics when displaying long non-ascii filenames
|
||||
|
||||
## 0.8.1
|
||||
|
||||
Released on 22/03/2022
|
||||
|
||||
- **Added support for S3 compatible backends**
|
||||
- Changed `AWS S3` to `S3` in ui
|
||||
- Added new `endpoint` and `new-path-style` to s3 connection parameters
|
||||
- Bugfix:
|
||||
- [Issue 92](https://github.com/veeso/termscp/issues/92): updated ssh2-config to 0.1.3, which solves this issue.
|
||||
- [Issue 99](https://github.com/veeso/termscp/issues/99): Fixed AltGr characters not allowed in auth form
|
||||
- Dependencies:
|
||||
- Updated `keyring` to `1.1.2`
|
||||
- Updated `notify-rust` to `4.5.6`
|
||||
- Updated `open` to `2.0.3`
|
||||
- Updated `rand` to `0.8.5`
|
||||
- Updated `regex` to `1.5.5`
|
||||
- Updated `remotefs-rs-aws-s3` to `0.2.0`
|
||||
- Updated `tui-realm` to `1.5.0`
|
||||
- Updated `tui-realm-stdlib` to `1.1.6`
|
||||
|
||||
## 0.8.0
|
||||
|
||||
Released on 06/01/2022
|
||||
|
||||
> ❄️ Winter update 2022 ⛄
|
||||
|
||||
- **Enhancements**:
|
||||
- **Synchronized browsing**:
|
||||
- From now on, if synchronized browsing is *enabled* and you try to enter a directory that doesn't exist on the other host, you will be asked whether you'd like to create the directory.
|
||||
- **Find** feature:
|
||||
- A "wait popup" will now be displayed while searching files
|
||||
- If find command doesn't return any result show an info dialog and not an empty explorer
|
||||
- It is now possible to keep navigating on the other explorer while "found tab" is open
|
||||
- ❗ It is not possible though to have the "found tab" on both explorers (otherwise you wouldn't be able to tell whether you're transferring files)
|
||||
- Files found from search are now displayed with their relative path from working directory
|
||||
- **Ui**:
|
||||
- Transfer abortion is now more responsive
|
||||
- Selected files will now be rendered with **Reversed, underlined and italic** text modifiers instead of being prepended with `*`.
|
||||
- Error popup message height is now calculated based on the content it must display.
|
||||
- **Midnight commander keys**
|
||||
- `<F1>`: Show help
|
||||
- `<F2>`: Save file as (actually I invented this)
|
||||
- `<F3>`: View file
|
||||
- `<F4>`: Open file (with text editor)
|
||||
- `<F5>`: Copy file
|
||||
- `<F6>`: Rename file
|
||||
- `<F7>`: Make directory
|
||||
- `<F8>`: Remove file
|
||||
- `<F10>`: Quit
|
||||
- Added footer with most used key bindings
|
||||
- ❗ `<TAB>` will now switch explorer tab (will do what `<LEFT>` and `<RIGHT>` currently do)
|
||||
- ❗ Use `<BACKTAB>` to switch between explorer tab and log tab. ❗ Backtab is `<SHIFT + TAB>`
|
||||
- **Tui-realm migration**:
|
||||
- migrated application to tui-realm 1.x
|
||||
- Improved application performance
|
||||
- Changed the buffer size to **65535** (was 65536) for transfer I/O
|
||||
- **Aws s3 connection parameters extension** 🦊:
|
||||
- Added `Access Key` to Aws-s3 connection parameters
|
||||
- Added `Security Access Key` to Aws-s3 connection parameters
|
||||
- Added `Security token` to Aws-s3 connection parameters
|
||||
- Added `Session token` to Aws-s3 connection parameters
|
||||
- **SSH Config**
|
||||
- Added `ssh config` parameter in configuration
|
||||
- It is now possible to specify the ssh configuration file to use
|
||||
- The supported parameters are described at <https://github.com/veeso/ssh2-config>.
|
||||
- If the field is left empty, **no file will be loaded**.
|
||||
- **By default, no file will be used**.
|
||||
- **Symlink command**:
|
||||
- You can now create symlinks, pressing `<K>` key on the file explorer.
|
||||
- **Less verbose logging**:
|
||||
- By default the log level is now set to `INFO`
|
||||
- It is now possible to enable the `TRACE` level with the `-D` CLI option.
|
||||
- Dependencies:
|
||||
- Added `unicode-width 0.1.8`
|
||||
- Updated `argh` to `0.1.7`
|
||||
- Updated `keyring` to `1.0.0`
|
||||
- Updated `magic-crypt` to `3.1.9`
|
||||
- Updated `open` to `2.0.2`
|
||||
- Updated `notify-rust` to `4.5.5`
|
||||
- Updated `self_update` to `0.28.0`
|
||||
- Updated `simplelog` to `0.11.1`
|
||||
- Updated `tempfile` to `3.2.0`
|
||||
- Updated `tui-realm` to `1.4.2`
|
||||
- Updated `tui-realm-stdlib` to `1.1.5`
|
||||
- Updated `whoami` to `1.2.1`
|
||||
- Updated `wildmatch` to `2.1.0`
|
||||
- Removed `rust-s3`, `ssh2`, `suppaftp`; replaced by `remotefs 0.2.0`, `remotefs-aws-s3 0.1.0`, `remotefs-ftp 0.1.0` and `remotefs-ssh 0.1.0`
|
||||
- Removed `crossterm` (since bridged by tui-realm)
|
||||
- Removed `textwrap` (unused)
|
||||
|
||||
## 0.7.0
|
||||
|
||||
Released on 12/10/2021
|
||||
|
||||
> 🍁 Autumn update 2021 🍇
|
||||
|
||||
- **Aws S3** 🪣
|
||||
- Added support for the aws-s3 protocol.
|
||||
- Operate on your bucket directly from the file explorer.
|
||||
- You can also save your buckets as bookmarks.
|
||||
- Aws s3 reads credentials directly from your credentials file at `$HOME/.aws/credentials` or from environment. Read more in the user manual.
|
||||
- **Auto update** ⬇️
|
||||
- Possibility to update termscp directly via GUI or CLI.
|
||||
- Install update via CLI running `(sudo) termscp --update`.
|
||||
- Install update via GUI from auth form: when the "new version message" is displayed press `<CTRL+R>`, then enter `YES` in the radio input asking whether to install the update.
|
||||
- **Notifications** 📫
|
||||
- termscp will now send Desktop notifications in these cases
|
||||
- on transfer completed (minimum transfer size can be specified in configuration; default 512MB)
|
||||
- on transfer error (same as above)
|
||||
- on update available
|
||||
- Added "notifications enabled" in configuration (Default enabled)
|
||||
- Added "Notifications: minimum transfer size": if transfer size is greater or equal than the specified value, notifications for transfer will be displayed.
|
||||
- **Prompt user when about to replace existing file on a file transfer** ❓
|
||||
- Whenever a file transfer is about to replace an existing file on local/remote host, you will be prompted if you're sure you really want to replace that file.
|
||||
- You may want to disable this option. You can go to configuration and set "Prompt when replacing existing files?" to "NO"
|
||||
- **❗ BREAKING CHANGES ❗**:
|
||||
- Added a new key in themes: `misc_info_dialog`: if your theme won't load, just reload it. If you're using a customised theme, you can add to it the missing key via a text editor. Just edit the `theme.toml` in your `$CONFIG_DIR/termscp/theme.toml` and add `misc_info_dialog` (Read more in manual at Themes).
|
||||
- Enhancements:
|
||||
- Reuse mounts in UI, in order to reduce executable size
|
||||
- File list can now be "rewinded", which means that moving with arrows will now allow you to go from top to bottom of the list pressing `<UP>` and viceversa pressing `<DOWN>`.
|
||||
- Bugfix:
|
||||
- Fixed [Issue 70](https://github.com/veeso/termscp/issues/70): Unable to type characters with `CTRL+ALT` (e.g. italian layout `CTRL+ALT+ò` => `@`) due to a crossterm issue. Fixed with tui-realm-stdlib `0.6.3`.
|
||||
- Dependencies:
|
||||
- Added `notify_rust 4.5.3`
|
||||
- Added `rust-s3 0.27-rc4`
|
||||
- Added `self_update 0.27.0`
|
||||
- Updated `argh` to `0.1.6`
|
||||
- Updated `dirs` to `4.0.0`
|
||||
- Updated `tui-realm-stdlib` to `0.6.3`
|
||||
- Removed `ureq`
|
||||
|
||||
## 0.6.1
|
||||
|
||||
Released on 31/08/2021
|
||||
|
||||
- Enhancements:
|
||||
- Now that tui-rs supports title alignment, UI has been improved
|
||||
- Added new `Directory already exists` variant for file transfer errors
|
||||
- Bugfix:
|
||||
- Fixed [Issue 58](https://github.com/veeso/termscp/issues/58):When uploading a directory, create directory only if it doesn't exist
|
||||
- Fixed [Issue 59](https://github.com/veeso/termscp/issues/59): When copying files with tricky copy, the upper progress bar shows no text
|
||||
- Dependencies:
|
||||
- Updated `bitflags` to `1.3.2`
|
||||
- Updated `bytesize` to `1.1.0`
|
||||
- Updated `crossterm` to `0.20`
|
||||
- Updated `open` to `2.0.1`
|
||||
- Added `tui-realm-stdlib 0.6.0`
|
||||
- Replaced `ftp4` with `suppaftp 4.1.2`
|
||||
- Updated `tui-realm` to `0.6.0`
|
||||
|
||||
## 0.6.0
|
||||
|
||||
Released on 23/07/2021
|
||||
|
||||
> 🍹 Summer update 2021 🍨
|
||||
|
||||
- **Open any file** in explorer:
|
||||
- Open file with default program for file type with `<V>`
|
||||
- Open file with a specific program with `<W>`
|
||||
- **Themes**:
|
||||
- You can now set colors for 26 elements in the application
|
||||
- Colors can be any RGB, also **CSS colors** syntax is supported (e.g. `aquamarine`)
|
||||
- Configure theme from settings or import from CLI using the `-t <theme file>` argument
|
||||
- You can find several themes in the `themes/` directory
|
||||
- **Keyring support for Linux**
|
||||
- From now on keyring will be available for Linux only
|
||||
- Read the manual to find out if your system supports the keyring and how you can enable it
|
||||
- libdbus is now a dependency
|
||||
- added `with-keyring` feature
|
||||
- **❗ BREAKING CHANGE ❗**: if you start using keyring on Linux, all the saved password will be lost
|
||||
- **In-app release notes**
|
||||
- Possibility to see the release note of the new available release whenever a new version is available
|
||||
- Just press `<CTRL+R>` when a new version is available from the auth activity to read the release notes
|
||||
- **Installation script**:
|
||||
- From now on, in case cargo is used to install termscp, all the cargo dependencies will be installed
|
||||
- **Start termscp from configuration**: Start termscp with `-c` or `--config` to start termscp from configuration page
|
||||
- Enhancements:
|
||||
- Show a "wait" message when deleting, copying and moving files and when executing commands
|
||||
- Replaced all `...` with `…` in texts
|
||||
- Check if remote host is valid in authentication form
|
||||
- Check if port number is valid in authentication form
|
||||
- From now on, if you try to leave setup without making any change, you won't be prompted whether to save configuration or not
|
||||
- Bugfix:
|
||||
- Fixed broken input cursor when typing UTF8 characters (tui-realm 0.3.2)
|
||||
- Fixed save bookmark dialog: you could switch out from dialog with `<TAB>`
|
||||
- Fixed transfer interruption: it was not possible to abort a transfer if the size of the file was less than 65k
|
||||
- Changed `Remote address` to `Remote host` in authentication form
|
||||
- Dependencies:
|
||||
- Added `argh 0.1.5`
|
||||
- Added `open 1.7.0`
|
||||
- Removed `getopts`
|
||||
- Updated `rand` to `0.8.4`
|
||||
- Updated `textwrap` to `0.14.2`
|
||||
- Updated `tui-realm` to `0.4.3`
|
||||
|
||||
## 0.5.1
|
||||
|
||||
Released on 21/06/2021
|
||||
|
||||
- Enhancements:
|
||||
- **CI now uses containers to test file transfers (SSH/FTP)**
|
||||
- Improved coverage
|
||||
- Found many bugs which has now been fixed
|
||||
- Build in CI won't fail due to test servers not responding
|
||||
- We're now able to test all the functionalities of the file transfers
|
||||
- **Status bar improvements**
|
||||
- "Show hidden files" in status bar
|
||||
- Status bar has now been splitted into two, one for each explorer tab
|
||||
- **Error message if terminal window is too small**
|
||||
- If the terminal window has less than 24 lines, then an error message is displayed in the auth activity
|
||||
- Changed auth layout to absolute sizes
|
||||
- Bugfix:
|
||||
- Fixed UI not showing connection errors
|
||||
- Fixed termscp on Windows dying whenever opening a file with text editor
|
||||
- Fixed broken input cursor when typing UTF8 characters (tui-realm 0.3.2)
|
||||
- Fixed [Issue 44](https://github.com/veeso/termscp/issues/44): Could not move files to other paths in FTP
|
||||
- Fixed [Issue 43](https://github.com/veeso/termscp/issues/43): Could not remove non-empty directories in FTP
|
||||
- Fixed [Issue 39](https://github.com/veeso/termscp/issues/39): Help panels as `ScrollTable` to allow displaying entire content on small screens
|
||||
- Fixed [Issue 38](https://github.com/veeso/termscp/issues/38): Transfer size was wrong when transferring "selected" files (with mark)
|
||||
- Fixed [Issue 37](https://github.com/veeso/termscp/issues/37): progress bar not visible when editing remote files
|
||||
- Dependencies:
|
||||
- Updated `textwrap` to `0.14.0`
|
||||
- Updated `tui-realm` to `0.4.2`
|
||||
|
||||
## 0.5.0
|
||||
|
||||
Released on 23/05/2021
|
||||
|
||||
> 🌸 Spring Update 2021 🌷
|
||||
|
||||
- **Synchronized browsing**:
|
||||
- Added the possibility to enabled the synchronized brower navigation
|
||||
- when you enter a directory, the same directory will be entered on the other tab
|
||||
- Enable sync browser with `<Y>`
|
||||
- Read more on manual: [Synchronized browsing](docs/man.md#Synchronized-browsing-)
|
||||
- **Remote and Local hosts file formatter**:
|
||||
- Added the possibility to set different formatters for local and remote hosts
|
||||
- **Work on multiple files**:
|
||||
- Added the possibility to work on **multiple files simultaneously**
|
||||
- Select a file with `<M>`, the file when selected will have a `*` prepended to its name
|
||||
- Select all files in the current directory with `<CTRL+A>`
|
||||
- Read more on manual: [Work on multiple files](docs/man.md#Work-on-multiple-files-)
|
||||
- **Logging**:
|
||||
- termscp now writes a log file, useful to debug and to contribute to fix issues.
|
||||
- Read more on [manual](docs/man.md)
|
||||
- **File transfer changes**
|
||||
- *SFTP*
|
||||
- Added **COPY** command to SFTP (Please note that Copy command is not supported by SFTP natively, so here it just uses the `cp` shell command as it does in SCP).
|
||||
- *FTP*
|
||||
- Added support for file copy (achieved through *tricky-copy*: the file is first downloaded, then uploaded with a different file name)
|
||||
- **Double progress bar**:
|
||||
- From now one two progress bar will be displayed:
|
||||
- the first, on top, displays the full transfer state (e.g. when downloading a directory of 10 files, the progress of the entire transfer)
|
||||
- the second, on bottom, displays the transfer of the individual file being written (as happened for the old versions)
|
||||
- changed the progress bar colour from `LightGreen` to `Green`
|
||||
- Enhancements
|
||||
- Added a status bar in the file explorer showing whether the sync browser is enabled and which file sorting mode is selected
|
||||
- Removed the goold old figlet title
|
||||
- Protocol input as first field in UI
|
||||
- Port is now updated to standard for selected protocol
|
||||
- when you change the protocol in the authentication form and the current port is standard (`< 1024`), the port will be automatically changed to default value for the selected protocol (e.g. current port: `123`, protocol changed to `FTP`, port becomes `21`)
|
||||
- Bugfix:
|
||||
- Fixed wrong text wrap in log box
|
||||
- Fixed empty bookmark name causing termscp to crash
|
||||
- Fixed error message not being shown after an upload failure
|
||||
- Fixed default protocol not being loaded from config
|
||||
- [Issue 23](https://github.com/veeso/termscp/issues/23): Remove created file if transfer failed or was abrupted
|
||||
- Dependencies:
|
||||
- Added `tui-realm 0.3.0`
|
||||
- Removed `tui` (as direct dependency)
|
||||
- Updated `regex` to `1.5.4`
|
||||
|
||||
## 0.4.2
|
||||
|
||||
Released on 13/04/2021
|
||||
@@ -88,7 +646,7 @@ Released on 28/02/2021
|
||||
- Added `EXTRA` and `LENGTH` parameters to format keys.
|
||||
- Now keys are provided with this syntax `{KEY_NAME[:LEN[:EXTRA]}`
|
||||
- **Check for updates**:
|
||||
- TermSCP will now check for updates on startup and will show in the main page if there is a new version available
|
||||
- termscp will now check for updates on startup and will show in the main page if there is a new version available
|
||||
- This feature may be disabled from setup (Check for updates => No)
|
||||
- Enhancements:
|
||||
- Default choice for deleting file set to "NO" (way too easy to delete files by mistake)
|
||||
|
||||
@@ -2,75 +2,131 @@
|
||||
|
||||
## Our Pledge
|
||||
|
||||
In the interest of fostering an open and welcoming environment, we as
|
||||
contributors and maintainers pledge to making participation in our project and
|
||||
our community a harassment-free experience for everyone, regardless of age, body
|
||||
size, disability, ethnicity, sex characteristics, gender identity and expression,
|
||||
level of experience, education, socio-economic status, nationality, personal
|
||||
appearance, race, religion, or sexual identity and orientation.
|
||||
We as members, contributors, and leaders pledge to make participation in our
|
||||
community a harassment-free experience for everyone, regardless of age, body
|
||||
size, visible or invisible disability, ethnicity, sex characteristics, gender
|
||||
identity and expression, level of experience, education, socio-economic status,
|
||||
nationality, personal appearance, race, caste, color, religion, or sexual
|
||||
identity and orientation.
|
||||
|
||||
We pledge to act and interact in ways that contribute to an open, welcoming,
|
||||
diverse, inclusive, and healthy community.
|
||||
|
||||
## Our Standards
|
||||
|
||||
Examples of behavior that contributes to creating a positive environment
|
||||
include:
|
||||
Examples of behavior that contributes to a positive environment for our
|
||||
community include:
|
||||
|
||||
* Using welcoming and inclusive language
|
||||
* Being respectful of differing viewpoints and experiences
|
||||
* Gracefully accepting constructive criticism
|
||||
* Focusing on what is best for the community
|
||||
* Showing empathy towards other community members
|
||||
* Demonstrating empathy and kindness toward other people
|
||||
* Being respectful of differing opinions, viewpoints, and experiences
|
||||
* Giving and gracefully accepting constructive feedback
|
||||
* Accepting responsibility and apologizing to those affected by our mistakes,
|
||||
and learning from the experience
|
||||
* Focusing on what is best not just for us as individuals, but for the overall
|
||||
community
|
||||
|
||||
Examples of unacceptable behavior by participants include:
|
||||
Examples of unacceptable behavior include:
|
||||
|
||||
* The use of sexualized language or imagery and unwelcome sexual attention or
|
||||
advances
|
||||
* Trolling, insulting/derogatory comments, and personal or political attacks
|
||||
* The use of sexualized language or imagery, and sexual attention or advances of
|
||||
any kind
|
||||
* Trolling, insulting or derogatory comments, and personal or political attacks
|
||||
* Public or private harassment
|
||||
* Publishing others' private information, such as a physical or electronic
|
||||
address, without explicit permission
|
||||
* Publishing others' private information, such as a physical or email address,
|
||||
without their explicit permission
|
||||
* Other conduct which could reasonably be considered inappropriate in a
|
||||
professional setting
|
||||
professional setting
|
||||
|
||||
## Our Responsibilities
|
||||
## Enforcement Responsibilities
|
||||
|
||||
Project maintainers are responsible for clarifying the standards of acceptable
|
||||
behavior and are expected to take appropriate and fair corrective action in
|
||||
response to any instances of unacceptable behavior.
|
||||
Community leaders are responsible for clarifying and enforcing our standards of
|
||||
acceptable behavior and will take appropriate and fair corrective action in
|
||||
response to any behavior that they deem inappropriate, threatening, offensive,
|
||||
or harmful.
|
||||
|
||||
Project maintainers have the right and responsibility to remove, edit, or
|
||||
reject comments, commits, code, wiki edits, issues, and other contributions
|
||||
that are not aligned to this Code of Conduct, or to ban temporarily or
|
||||
permanently any contributor for other behaviors that they deem inappropriate,
|
||||
threatening, offensive, or harmful.
|
||||
Community leaders have the right and responsibility to remove, edit, or reject
|
||||
comments, commits, code, wiki edits, issues, and other contributions that are
|
||||
not aligned to this Code of Conduct, and will communicate reasons for moderation
|
||||
decisions when appropriate.
|
||||
|
||||
## Scope
|
||||
|
||||
This Code of Conduct applies both within project spaces and in public spaces
|
||||
when an individual is representing the project or its community. Examples of
|
||||
representing a project or community include using an official project e-mail
|
||||
address, posting via an official social media account, or acting as an appointed
|
||||
representative at an online or offline event. Representation of a project may be
|
||||
further defined and clarified by project maintainers.
|
||||
This Code of Conduct applies within all community spaces, and also applies when
|
||||
an individual is officially representing the community in public spaces.
|
||||
Examples of representing our community include using an official email address,
|
||||
posting via an official social media account, or acting as an appointed
|
||||
representative at an online or offline event.
|
||||
|
||||
## Enforcement
|
||||
|
||||
Instances of abusive, harassing, or otherwise unacceptable behavior may be
|
||||
reported by contacting the project team at christian.visintin1997@gmail.com. All
|
||||
complaints will be reviewed and investigated and will result in a response that
|
||||
is deemed necessary and appropriate to the circumstances. The project team is
|
||||
obligated to maintain confidentiality with regard to the reporter of an incident.
|
||||
Further details of specific enforcement policies may be posted separately.
|
||||
reported to the community leaders responsible for enforcement at
|
||||
[INSERT CONTACT METHOD].
|
||||
All complaints will be reviewed and investigated promptly and fairly.
|
||||
|
||||
Project maintainers who do not follow or enforce the Code of Conduct in good
|
||||
faith may face temporary or permanent repercussions as determined by other
|
||||
members of the project's leadership.
|
||||
All community leaders are obligated to respect the privacy and security of the
|
||||
reporter of any incident.
|
||||
|
||||
## Enforcement Guidelines
|
||||
|
||||
Community leaders will follow these Community Impact Guidelines in determining
|
||||
the consequences for any action they deem in violation of this Code of Conduct:
|
||||
|
||||
### 1. Correction
|
||||
|
||||
**Community Impact**: Use of inappropriate language or other behavior deemed
|
||||
unprofessional or unwelcome in the community.
|
||||
|
||||
**Consequence**: A private, written warning from community leaders, providing
|
||||
clarity around the nature of the violation and an explanation of why the
|
||||
behavior was inappropriate. A public apology may be requested.
|
||||
|
||||
### 2. Warning
|
||||
|
||||
**Community Impact**: A violation through a single incident or series of
|
||||
actions.
|
||||
|
||||
**Consequence**: A warning with consequences for continued behavior. No
|
||||
interaction with the people involved, including unsolicited interaction with
|
||||
those enforcing the Code of Conduct, for a specified period of time. This
|
||||
includes avoiding interactions in community spaces as well as external channels
|
||||
like social media. Violating these terms may lead to a temporary or permanent
|
||||
ban.
|
||||
|
||||
### 3. Temporary Ban
|
||||
|
||||
**Community Impact**: A serious violation of community standards, including
|
||||
sustained inappropriate behavior.
|
||||
|
||||
**Consequence**: A temporary ban from any sort of interaction or public
|
||||
communication with the community for a specified period of time. No public or
|
||||
private interaction with the people involved, including unsolicited interaction
|
||||
with those enforcing the Code of Conduct, is allowed during this period.
|
||||
Violating these terms may lead to a permanent ban.
|
||||
|
||||
### 4. Permanent Ban
|
||||
|
||||
**Community Impact**: Demonstrating a pattern of violation of community
|
||||
standards, including sustained inappropriate behavior, harassment of an
|
||||
individual, or aggression toward or disparagement of classes of individuals.
|
||||
|
||||
**Consequence**: A permanent ban from any sort of public interaction within the
|
||||
community.
|
||||
|
||||
## Attribution
|
||||
|
||||
This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4,
|
||||
available at <https://www.contributor-covenant.org/version/1/4/code-of-conduct.html>
|
||||
This Code of Conduct is adapted from the [Contributor Covenant][homepage],
|
||||
version 2.1, available at
|
||||
[https://www.contributor-covenant.org/version/2/1/code_of_conduct.html][v2.1].
|
||||
|
||||
Community Impact Guidelines were inspired by
|
||||
[Mozilla's code of conduct enforcement ladder][Mozilla CoC].
|
||||
|
||||
For answers to common questions about this code of conduct, see the FAQ at
|
||||
[https://www.contributor-covenant.org/faq][FAQ]. Translations are available at
|
||||
[https://www.contributor-covenant.org/translations][translations].
|
||||
|
||||
[homepage]: https://www.contributor-covenant.org
|
||||
|
||||
For answers to common questions about this code of conduct, see
|
||||
<https://www.contributor-covenant.org/faq>
|
||||
[v2.1]: https://www.contributor-covenant.org/version/2/1/code_of_conduct.html
|
||||
[Mozilla CoC]: https://github.com/mozilla/diversity
|
||||
[FAQ]: https://www.contributor-covenant.org/faq
|
||||
[translations]: https://www.contributor-covenant.org/translations
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
# Contributing
|
||||
|
||||
Before contributing to this repository, please first discuss the change you wish to make via issue of this repository before making a change.
|
||||
Please note we have a [code of conduct](CODE_OF_CONDUCT.md), please follow it in all your interactions with the project.
|
||||
Please note we have a [code of conduct](CODE_OF_CONDUCT.md). Please follow it in all your interactions with the project.
|
||||
|
||||
- [Contributing](#contributing)
|
||||
- [Project mission](#project-mission)
|
||||
@@ -9,6 +9,7 @@ Please note we have a [code of conduct](CODE_OF_CONDUCT.md), please follow it in
|
||||
- [Open an issue](#open-an-issue)
|
||||
- [Questions](#questions)
|
||||
- [Bug reports](#bug-reports)
|
||||
- [Copy error](#copy-error)
|
||||
- [Feature requests](#feature-requests)
|
||||
- [Preferred contributions](#preferred-contributions)
|
||||
- [Pull Request Process](#pull-request-process)
|
||||
@@ -19,16 +20,20 @@ Please note we have a [code of conduct](CODE_OF_CONDUCT.md), please follow it in
|
||||
|
||||
## Project mission
|
||||
|
||||
TermSCP was born because, as a terminal lover and Linux user, I wanted something like WinSCP on Linux and on terminal. I my previous job I used SFTP/SCP pratically everyday and that made me to desire an application like termscp so much, that eventually I started to work on it in the spare time. I saw there was a very cool library to create terminal user interface (`tui-rs`), so I started to code it. I wrote termscp as an experiment, I designed kinda nothing at the time. I just said
|
||||
termscp was born because, as a terminal lover and Linux user, I wanted something like WinSCP on Linux and on terminal. At my previous job, I used SFTP/SCP practically everyday and that made me desire an application like termscp so much that eventually I started to work on it in my spare time.
|
||||
|
||||
> Ok, there must be a `FileTransfer` trait somehow, I'll have more views, so I'll use something like Android activities, and there must be a module to interact with the local host".
|
||||
I saw there was a very cool library to create terminal user interfaces (`tui-rs`, now `ratatui`), so I started to code it.
|
||||
|
||||
I wrote termscp as an experiment. I didn't design anything at the time. I just said,
|
||||
|
||||
> "Ok, there must be a FileTransfer trait somehow. I'll have more views, so I'll use something like Android activities, and there must be a module to interact with the local host."
|
||||
|
||||
And so in december 2020 I had the first version of termscp running and it worked, but was very simple, raw and minimal.
|
||||
A lot of things have changed since them, both the features the project provides and my personal view of this project.
|
||||
|
||||
Today I don't see TermSCP as a WinSCP clone anymore. I've also thought about changing the name as the time passed by, but I liked it and it would be hard to change the name on the registries, etc.
|
||||
Today I don't see termscp as a WinSCP clone anymore. I've also thought about changing the name as the time passed by, but I liked it and it would be hard to change the name on the registries, etc.
|
||||
|
||||
Right now I see TermSCP as a **rich-featured file transfer client for terminals**. All I want is to provide all the features users need to use it correctly, I want it to be **safe and reliable** and eventually I want people to consider termscp **the first choice as a file transfer client**.
|
||||
Right now I see termscp as a **rich-featured file transfer client for terminals**. All I want is to provide all the features users need to use it correctly, I want it to be **safe and reliable** and eventually I want people to consider termscp **the first choice as a file transfer client**.
|
||||
|
||||
### Project goals
|
||||
|
||||
@@ -45,6 +50,7 @@ Open an issue when:
|
||||
|
||||
- You have questions or concerns regarding the project or the application itself.
|
||||
- You have a bug to report.
|
||||
- You have a copy error to report. (Error in documentation; bad translation or sentence)
|
||||
- You have a feature or a suggestion to improve termscp to submit.
|
||||
|
||||
### Questions
|
||||
@@ -61,6 +67,7 @@ Don't set other labels to your issue, not even priority.
|
||||
|
||||
When you open a bug try to be the most precise as possible in describing your issue. I'm not saying you should always be that precise, since sometimes it's very easy for maintainers to understand what you're talking about. Just try to be reasonable to understand sometimes we might not know what you're talking about or we just don't have the technical knowledge you might think.
|
||||
Please always provide the environment you're working on and consider that we don't provide any support for older version of termscp, at least for those not classified as LTS (if we'll ever have them).
|
||||
If you can, provide the log file or the snippet involving your issue. You can find in the [user manual](docs/man.md) the location of the log file. Please, if you can, enable the **debug mode**, before submitting the log, in order to provide us with a better overview of the problem.
|
||||
Last but not least: the template I've written must be used. Full stop.
|
||||
|
||||
Maintainers will may add additional labels to your issue:
|
||||
@@ -68,7 +75,16 @@ Maintainers will may add additional labels to your issue:
|
||||
- **duplicate**: the issue is duplicated; the reference to the related issue will be added to your description. Your issue will be closed.
|
||||
- **priority**: this must be fixed asap
|
||||
- **sorcery**: it is not possible to find out what's causing your bug, nor is reproducible on our test environments.
|
||||
- **wontfix**: your bug has a very high ratio between the probability to encounter it and the difficult to fix it, or it just isn't a bug, but a feature.
|
||||
- **wontfix**: your bug has a very high ratio between the difficulty to fix it and the probability to encounter it, or it just isn't a bug, but a feature.
|
||||
|
||||
### Copy error
|
||||
|
||||
If you want to report a copy error, create an issue using the `copy` template.
|
||||
The `Documentation` label should already be set and the issue should already be assigned to `veeso`.
|
||||
|
||||
If you want to fix the copy by yourself you can fork the project and open a PR, otherwise I will fix it by myself.
|
||||
The copy issue is accepted **also if you're not a C1/C2 speaker**, but a speaker of that level in case the language is different from Italian/English is preferred.
|
||||
Please fullfil the form on the bottom of the template if you want.
|
||||
|
||||
### Feature requests
|
||||
|
||||
@@ -83,8 +99,6 @@ Said so, follow these steps:
|
||||
- Open an issue using the `feature request` template describing with accuracy your suggestion
|
||||
- Wait for the maintainer feedback on your idea
|
||||
|
||||
If you want to implement the feature by yourself and your suggestion gets approved, start writing the code. Remember that on [docs.rs](https://docs.rs/termscp) there is the documentation for the project. Open a PR related to your issue. See [Pull request process for more details](#pull-request-process)
|
||||
|
||||
It is very important to follow these steps, since it will prevent you from working on a feature that will be rejected and trust me, none of us wants to deal with this situation.
|
||||
|
||||
Always mind that your suggestion, may be rejected: I'll always provide a feedback on the reasons that brought me to reject your feature, just try not to get mad about that.
|
||||
@@ -96,10 +110,10 @@ Always mind that your suggestion, may be rejected: I'll always provide a feedbac
|
||||
At the moment, these kind of contributions are more appreciated and should be preferred:
|
||||
|
||||
- Fix for issues described in [Known Issues](./README.md#known-issues-) or [issues reported by the community](https://github.com/veeso/termscp/issues)
|
||||
- New file transfers: for further details see [Implementing File Transfer](#implementing-file-transfers)
|
||||
- Code optimizations: any optimization to the code is welcome
|
||||
- **New file transfers**: for further details see [Implementing File Transfer](#implementing-file-transfers). ⚠️ this is going to be deprecated SOON! We're moving the file transfers into another library. Please see [remotefs-rs](https://github.com/veeso/remotefs-rs).
|
||||
- **Code optimizations**: any optimization to the code is welcome
|
||||
- See also features described in [Upcoming features](./README.md##upcoming-features-). Open an issue first though.
|
||||
- A **logo** for the project: I'd really love to have a logo for termscp 💛
|
||||
- README/User manual **translations**: really appreciated atm. Please just add a folder into `docs/` with the language code. Language code with two characters is used in case the language is understandable by all the countries where this language is spoken (e.g. `it-CH`, `it-IT` are not really different, so I just created `it`, but there is a big difference from `zh-CN` and `zh-TW` for instance). Don't worry about flags in README, I will implement that part if it's too complicated.
|
||||
|
||||
For any other kind of contribution, especially for new features, please submit a new issue first.
|
||||
|
||||
@@ -115,7 +129,9 @@ Let's make it simple and clear:
|
||||
6. Report changes to the PR you opened, writing a report of what you changed and what you have introduced.
|
||||
7. Update the `CHANGELOG.md` file with details of changes to the application. In changelog report changes under a chapter called `PR{PULL_REQUEST_NUMBER}` (e.g. PR12).
|
||||
8. Assign a maintainer to the reviewers.
|
||||
9. Request maintainers to merge your changes.
|
||||
9. Wait for a maintainer to fullfil the acceptance tests
|
||||
10. Wait for a maintainer to complete the acceptance tests
|
||||
11. Request maintainers to merge your changes.
|
||||
|
||||
### Software guidelines
|
||||
|
||||
|
||||
5753
Cargo.lock
generated
142
Cargo.toml
@@ -1,17 +1,17 @@
|
||||
[package]
|
||||
authors = ["Christian Visintin"]
|
||||
authors = ["Christian Visintin <christian.visintin@veeso.dev>"]
|
||||
categories = ["command-line-utilities"]
|
||||
description = "TermSCP is a SCP/SFTP/FTPS client for command line with an integrated UI to explore the remote file system. Basically WinSCP on a terminal."
|
||||
documentation = "https://docs.rs/termscp"
|
||||
edition = "2018"
|
||||
homepage = "https://github.com/veeso/termscp"
|
||||
include = ["src/**/*", "LICENSE", "README.md", "CHANGELOG.md"]
|
||||
keywords = ["scp-client", "sftp-client", "ftp-client", "winscp", "command-line-utility"]
|
||||
description = "termscp is a feature rich terminal file transfer and explorer with support for SCP/SFTP/FTP/Kube/S3/WebDAV"
|
||||
edition = "2024"
|
||||
homepage = "https://termscp.veeso.dev"
|
||||
include = ["src/**/*", "build.rs", "LICENSE", "README.md", "CHANGELOG.md"]
|
||||
keywords = ["terminal", "ftp", "scp", "sftp", "tui"]
|
||||
license = "MIT"
|
||||
name = "termscp"
|
||||
readme = "README.md"
|
||||
repository = "https://github.com/veeso/termscp"
|
||||
version = "0.4.2"
|
||||
version = "0.17.0"
|
||||
rust-version = "1.85.0"
|
||||
|
||||
[package.metadata.rpm]
|
||||
package = "termscp"
|
||||
@@ -22,61 +22,97 @@ buildflags = ["--release"]
|
||||
[package.metadata.rpm.targets]
|
||||
termscp = { path = "/usr/bin/termscp" }
|
||||
|
||||
[package.metadata.deb]
|
||||
maintainer = "Christian Visintin <christian.visintin@veeso.dev>"
|
||||
copyright = "2025, Christian Visintin <christian.visintin@veeso.dev>"
|
||||
extended-description-file = "docs/misc/README.deb.txt"
|
||||
|
||||
[[bin]]
|
||||
name = "termscp"
|
||||
path = "src/main.rs"
|
||||
|
||||
[dependencies]
|
||||
bitflags = "1.2.1"
|
||||
bytesize = "1.0.1"
|
||||
chrono = "0.4.19"
|
||||
content_inspector = "0.2.4"
|
||||
crossterm = "0.19.0"
|
||||
dirs = "3.0.1"
|
||||
edit = "0.1.3"
|
||||
getopts = "0.2.21"
|
||||
hostname = "0.3.1"
|
||||
lazy_static = "1.4.0"
|
||||
magic-crypt = "3.1.7"
|
||||
rand = "0.8.3"
|
||||
regex = "1.4.5"
|
||||
rpassword = "5.0.1"
|
||||
ssh2 = "0.9.0"
|
||||
tempfile = "3.1.0"
|
||||
textwrap = "0.13.4"
|
||||
thiserror = "^1.0.0"
|
||||
toml = "0.5.8"
|
||||
whoami = "1.1.1"
|
||||
wildmatch = "2.0.0"
|
||||
argh = "^0.1"
|
||||
bitflags = "^2"
|
||||
bytesize = "^2"
|
||||
chrono = "^0.4"
|
||||
content_inspector = "^0.2"
|
||||
dirs = "^6"
|
||||
edit = "^0.1"
|
||||
filetime = "^0.2"
|
||||
hostname = "^0.4"
|
||||
keyring = { version = "^3", features = [
|
||||
"apple-native",
|
||||
"windows-native",
|
||||
"sync-secret-service",
|
||||
"vendored",
|
||||
] }
|
||||
lazy-regex = "^3"
|
||||
lazy_static = "^1"
|
||||
log = "^0.4"
|
||||
magic-crypt = "4"
|
||||
notify = "8"
|
||||
notify-rust = { version = "^4", default-features = false, features = ["d"] }
|
||||
nucleo = "0.5"
|
||||
open = "^5.0"
|
||||
rand = "^0.9"
|
||||
regex = "^1"
|
||||
remotefs = "^0.3"
|
||||
remotefs-aws-s3 = "0.4"
|
||||
remotefs-kube = "0.4"
|
||||
remotefs-webdav = "^0.2"
|
||||
rpassword = "^7"
|
||||
self_update = { version = "^0.42", default-features = false, features = [
|
||||
"rustls",
|
||||
"archive-tar",
|
||||
"archive-zip",
|
||||
"compression-flate2",
|
||||
"compression-zip-deflate",
|
||||
] }
|
||||
serde = { version = "^1", features = ["derive"] }
|
||||
simplelog = "^0.12"
|
||||
ssh2-config = "^0.4"
|
||||
tempfile = "3"
|
||||
thiserror = "2"
|
||||
tokio = { version = "1.44", features = ["rt"] }
|
||||
toml = "^0.8"
|
||||
tui-realm-stdlib = "2"
|
||||
tuirealm = "2"
|
||||
unicode-width = "^0.2"
|
||||
version-compare = "^0.2"
|
||||
whoami = "^1.5"
|
||||
wildmatch = "^2"
|
||||
|
||||
[dependencies.ftp4]
|
||||
features = ["secure"]
|
||||
version = "^4.0.2"
|
||||
[target."cfg(not(target_os = \"macos\"))".dependencies]
|
||||
remotefs-smb = { version = "^0.3", optional = true }
|
||||
|
||||
[dependencies.serde]
|
||||
features = ["derive"]
|
||||
version = "^1.0.0"
|
||||
[target."cfg(target_family = \"unix\")".dependencies]
|
||||
remotefs-ftp = { version = "^0.2", features = ["vendored", "native-tls"] }
|
||||
remotefs-ssh = { version = "^0.6", features = ["ssh2-vendored"] }
|
||||
uzers = "0.12"
|
||||
|
||||
[dependencies.tui]
|
||||
default-features = false
|
||||
features = ["crossterm"]
|
||||
version = "0.14.0"
|
||||
[target."cfg(target_family = \"windows\")".dependencies]
|
||||
remotefs-ftp = { version = "^0.2", features = ["native-tls"] }
|
||||
remotefs-ssh = { version = "^0.6" }
|
||||
|
||||
[dependencies.ureq]
|
||||
features = ["json"]
|
||||
version = "2.1.0"
|
||||
[dev-dependencies]
|
||||
pretty_assertions = "^1"
|
||||
serial_test = "^3"
|
||||
|
||||
[build-dependencies]
|
||||
cfg_aliases = "0.2"
|
||||
vergen-git2 = { version = "1", features = ["build", "cargo", "rustc", "si"] }
|
||||
|
||||
[features]
|
||||
githubActions = []
|
||||
default = ["smb", "keyring"]
|
||||
github-actions = []
|
||||
isolated-tests = []
|
||||
keyring = []
|
||||
smb = ["dep:remotefs-smb"]
|
||||
smb-vendored = ["remotefs-smb/vendored"]
|
||||
|
||||
[target."cfg(any(target_os = \"unix\", target_os = \"macos\", target_os = \"linux\"))"]
|
||||
[target."cfg(any(target_os = \"unix\", target_os = \"macos\", target_os = \"linux\"))".dependencies]
|
||||
users = "0.11.0"
|
||||
[profile.dev]
|
||||
incremental = true
|
||||
|
||||
[target."cfg(any(target_os = \"windows\", target_os = \"macos\"))"]
|
||||
[target."cfg(any(target_os = \"windows\", target_os = \"macos\"))".dependencies]
|
||||
keyring = "0.10.1"
|
||||
|
||||
[target."cfg(target_os = \"windows\")"]
|
||||
[target."cfg(target_os = \"windows\")".dependencies]
|
||||
path-slash = "0.1.4"
|
||||
[profile.release]
|
||||
strip = true
|
||||
|
||||
2
LICENSE
@@ -1,6 +1,6 @@
|
||||
MIT License
|
||||
|
||||
Copyright (c) 2021 Christian Visintin
|
||||
Copyright (c) 2020-2022 Christian Visintin
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
|
||||
552
README.md
@@ -1,400 +1,248 @@
|
||||
# TermSCP
|
||||
# termscp
|
||||
|
||||
[](https://opensource.org/licenses/MIT) [](https://github.com/veeso/termscp) [](https://crates.io/crates/termscp) [](https://crates.io/crates/termscp) [](https://docs.rs/termscp)
|
||||
<p align="center">
|
||||
<img src="/assets/images/termscp.svg" alt="termscp logo" width="256" height="256" />
|
||||
</p>
|
||||
|
||||
[](https://github.com/veeso/termscp/actions) [](https://github.com/veeso/termscp/actions) [](https://github.com/veeso/termscp/actions)
|
||||
<p align="center">~ A feature rich terminal file transfer ~</p>
|
||||
<p align="center">
|
||||
<a href="https://termscp.veeso.dev" target="_blank">Website</a>
|
||||
·
|
||||
<a href="https://termscp.veeso.dev/#get-started" target="_blank">Installation</a>
|
||||
·
|
||||
<a href="https://termscp.veeso.dev/#user-manual" target="_blank">User manual</a>
|
||||
</p>
|
||||
|
||||
~ Basically, WinSCP on a terminal ~
|
||||
Developed by Christian Visintin
|
||||
Current version: 0.4.2 (13/04/2021)
|
||||
<p align="center">
|
||||
<a href="https://github.com/veeso/termscp"
|
||||
><img
|
||||
height="20"
|
||||
src="/assets/images/flags/gb.png"
|
||||
alt="English"
|
||||
/></a>
|
||||
|
||||
<a
|
||||
href="/docs/pt-BR/README.md"
|
||||
><img
|
||||
height="20"
|
||||
src="/assets/images/flags/br.png"
|
||||
alt="Brazilian Portuguese"
|
||||
/></a>
|
||||
|
||||
<a
|
||||
href="/docs/de/README.md"
|
||||
><img
|
||||
height="20"
|
||||
src="/assets/images/flags/de.png"
|
||||
alt="Deutsch"
|
||||
/></a>
|
||||
|
||||
<a
|
||||
href="/docs/es/README.md"
|
||||
><img
|
||||
height="20"
|
||||
src="/assets/images/flags/es.png"
|
||||
alt="Español"
|
||||
/></a>
|
||||
|
||||
<a
|
||||
href="/docs/fr/README.md"
|
||||
><img
|
||||
height="20"
|
||||
src="/assets/images/flags/fr.png"
|
||||
alt="Français"
|
||||
/></a>
|
||||
|
||||
<a
|
||||
href="/docs/it/README.md"
|
||||
><img
|
||||
height="20"
|
||||
src="/assets/images/flags/it.png"
|
||||
alt="Italiano"
|
||||
/></a>
|
||||
|
||||
<a
|
||||
href="/docs/zh-CN/README.md"
|
||||
><img
|
||||
height="20"
|
||||
src="/assets/images/flags/cn.png"
|
||||
alt="简体中文"
|
||||
/></a>
|
||||
</p>
|
||||
|
||||
<p align="center">Developed by <a href="https://veeso.me/" target="_blank">@veeso</a></p>
|
||||
<p align="center">Current version: 0.17.0 24/03/2025</p>
|
||||
|
||||
<p align="center">
|
||||
<a href="https://opensource.org/licenses/MIT"
|
||||
><img
|
||||
src="https://img.shields.io/badge/License-MIT-teal.svg"
|
||||
alt="License-MIT"
|
||||
/></a>
|
||||
<a href="https://github.com/veeso/termscp/stargazers"
|
||||
><img
|
||||
src="https://img.shields.io/github/stars/veeso/termscp?style=flat"
|
||||
alt="Repo stars"
|
||||
/></a>
|
||||
<a href="https://crates.io/crates/termscp"
|
||||
><img
|
||||
src="https://img.shields.io/crates/d/termscp.svg"
|
||||
alt="Downloads counter"
|
||||
/></a>
|
||||
<a href="https://crates.io/crates/termscp"
|
||||
><img
|
||||
src="https://img.shields.io/crates/v/termscp.svg"
|
||||
alt="Latest version"
|
||||
/></a>
|
||||
<a href="https://ko-fi.com/veeso">
|
||||
<img
|
||||
src="https://img.shields.io/badge/donate-ko--fi-red"
|
||||
alt="Ko-fi"
|
||||
/></a>
|
||||
</p>
|
||||
<p align="center">
|
||||
<a href="https://github.com/veeso/termscp/actions"
|
||||
><img
|
||||
src="https://github.com/veeso/termscp/workflows/Linux/badge.svg"
|
||||
alt="Linux CI"
|
||||
/></a>
|
||||
<a href="https://github.com/veeso/termscp/actions"
|
||||
><img
|
||||
src="https://github.com/veeso/termscp/workflows/MacOS/badge.svg"
|
||||
alt="MacOS CI"
|
||||
/></a>
|
||||
<a href="https://github.com/veeso/termscp/actions"
|
||||
><img
|
||||
src="https://github.com/veeso/termscp/workflows/Windows/badge.svg"
|
||||
alt="Windows CI"
|
||||
/></a>
|
||||
</p>
|
||||
|
||||
---
|
||||
|
||||
- [TermSCP](#termscp)
|
||||
- [About TermSCP 🖥](#about-termscp-)
|
||||
- [Why TermSCP 🤔](#why-termscp-)
|
||||
- [Features 🎁](#features-)
|
||||
- [Installation 🛠](#installation-)
|
||||
- [Cargo 🦀](#cargo-)
|
||||
- [Deb package 📦](#deb-package-)
|
||||
- [RPM package 📦](#rpm-package-)
|
||||
- [AUR Package 🔼](#aur-package-)
|
||||
- [Chocolatey 🍫](#chocolatey-)
|
||||
- [Brew 🍻](#brew-)
|
||||
- [Usage ❓](#usage-)
|
||||
- [Address argument 🌎](#address-argument-)
|
||||
- [How Password can be provided 🔐](#how-password-can-be-provided-)
|
||||
- [Bookmarks ⭐](#bookmarks-)
|
||||
- [Are my passwords Safe 😈](#are-my-passwords-safe-)
|
||||
- [Text Editor ✏](#text-editor-)
|
||||
- [How do I configure the text editor 🦥](#how-do-i-configure-the-text-editor-)
|
||||
- [Configuration ⚙️](#configuration-️)
|
||||
- [SSH Key Storage 🔐](#ssh-key-storage-)
|
||||
- [File Explorer Format](#file-explorer-format)
|
||||
- [Keybindings ⌨](#keybindings-)
|
||||
- [Documentation 📚](#documentation-)
|
||||
- [Known issues 🧻](#known-issues-)
|
||||
- [Upcoming Features 🧪](#upcoming-features-)
|
||||
- [Contributing and issues 🤝🏻](#contributing-and-issues-)
|
||||
- [Changelog ⏳](#changelog-)
|
||||
- [Powered by 🚀](#powered-by-)
|
||||
- [Gallery 🎬](#gallery-)
|
||||
- [Buy me a coffee ☕](#buy-me-a-coffee-)
|
||||
- [License 📃](#license-)
|
||||
## About termscp 🖥
|
||||
|
||||
---
|
||||
|
||||
## About TermSCP 🖥
|
||||
|
||||
TermSCP is basically a porting of WinSCP to terminal. So basically is a terminal utility with an TUI to connect to a remote server to retrieve and upload files and to interact with the local file system. It works both on **Linux**, **MacOS**, **BSD** and **Windows** and supports SFTP, SCP, FTP and FTPS.
|
||||
Termscp is a feature rich terminal file transfer and explorer, with support for SCP/SFTP/FTP/Kube/S3/WebDAV. So basically is a terminal utility with an TUI to connect to a remote server to retrieve and upload files and to interact with the local file system. It is **Linux**, **MacOS**, **FreeBSD**, **NetBSD** and **Windows** compatible.
|
||||
|
||||

|
||||
|
||||
---
|
||||
|
||||
### Why TermSCP 🤔
|
||||
|
||||
It happens quite often to me, when using SCP at work to forget the path of a file on a remote machine, which forces me to connect through SSH, gather the file path and finally download it through SCP. I could use WinSCP, but I use Linux and I pratically use the terminal for everything, so I wanted something like WinSCP on my terminal. Yeah, I know there is midnight commander too, but actually I don't like it very much tbh (and hasn't a decent support for scp).
|
||||
|
||||
## Features 🎁
|
||||
|
||||
- Different communication protocols support
|
||||
- SFTP
|
||||
- SCP
|
||||
- FTP and FTPS
|
||||
- Compatible with Windows, Linux, BSD and MacOS
|
||||
- Handy user interface to explore and operate on the remote and on the local machine file system
|
||||
- 📁 Different communication protocols
|
||||
- **SFTP**
|
||||
- **SCP**
|
||||
- **FTP** and **FTPS**
|
||||
- **Kube**
|
||||
- **S3**
|
||||
- **SMB**
|
||||
- **WebDAV**
|
||||
- 🖥 Explore and operate on the remote and on the local machine file system with a handy UI
|
||||
- Create, remove, rename, search, view and edit files
|
||||
- Bookmarks and recent connections can be saved to access quickly to your favourite hosts
|
||||
- Supports text editors to view and edit text files
|
||||
- Supports both SFTP/SCP authentication through SSH keys and username/password
|
||||
- Customizations:
|
||||
- ⭐ Connect to your favourite hosts through built-in bookmarks and recent connections
|
||||
- 📝 View and edit files with your favourite applications
|
||||
- 💁 SFTP/SCP authentication with SSH keys and username/password
|
||||
- 🐧 Compatible with Windows, Linux, FreeBSD, NetBSD and MacOS
|
||||
- 🎨 Make it yours!
|
||||
- Themes
|
||||
- Custom file explorer format
|
||||
- Customizable text editor
|
||||
- Customizable file sorting
|
||||
- SSH key storage
|
||||
- Written in Rust
|
||||
- Easy to extend with new file transfers protocols
|
||||
- Developed keeping an eye on performance
|
||||
- and many other parameters...
|
||||
- 📫 Get notified via Desktop Notifications when a large file has been transferred
|
||||
- 🔭 Keep file changes synchronized with the remote host
|
||||
- 🔐 Save your password in your operating system key vault
|
||||
- 🦀 Rust-powered
|
||||
- 👀 Developed keeping an eye on performance
|
||||
- 🦄 Frequent awesome updates
|
||||
|
||||
---
|
||||
|
||||
## Installation 🛠
|
||||
## Get started 🚀
|
||||
|
||||
If you're considering to install TermSCP I want to thank you 💛 ! I hope you will enjoy TermSCP!
|
||||
If you want to contribute to this project, don't forget to check out our contribute guide. [Read More](CONTRIBUTING.md)
|
||||
If you're considering to install termscp I want to thank you 💜 ! I hope you will enjoy termscp!
|
||||
If you want to contribute to this project, don't forget to check out our [contribute guide](CONTRIBUTING.md).
|
||||
|
||||
### Cargo 🦀
|
||||
If you are a Linux, a FreeBSD or a MacOS user this simple shell script will install termscp on your system with a single command:
|
||||
|
||||
```sh
|
||||
# Install termscp through cargo
|
||||
cargo install termscp
|
||||
curl --proto '=https' --tlsv1.2 -sSLf "https://git.io/JBhDb" | sh
|
||||
```
|
||||
|
||||
Requirements:
|
||||
> ❗ MacOs installation requires [Homebrew](https://brew.sh/), otherwise the Rust compiler will be installed
|
||||
|
||||
- Linux
|
||||
- pkg-config
|
||||
- libssh2
|
||||
- openssl
|
||||
|
||||
### Deb package 📦
|
||||
|
||||
Get `deb` package from [HERE](https://github.com/veeso/termscp/releases/latest/download/termscp_0.4.2_amd64.deb)
|
||||
or run `wget https://github.com/veeso/termscp/releases/latest/download/termscp_0.4.2_amd64.deb`
|
||||
|
||||
then install through dpkg:
|
||||
|
||||
```sh
|
||||
dpkg -i termscp_*.deb
|
||||
# Or even better with gdebi
|
||||
gdebi termscp_*.deb
|
||||
```
|
||||
|
||||
### RPM package 📦
|
||||
|
||||
Get `rpm` package from [HERE](https://github.com/veeso/termscp/releases/latest/download/termscp-0.4.2-1.x86_64.rpm)
|
||||
or run `wget https://github.com/veeso/termscp/releases/latest/download/termscp-0.4.2-1.x86_64.rpm`
|
||||
|
||||
then install through rpm:
|
||||
|
||||
```sh
|
||||
rpm -U termscp_*.rpm
|
||||
```
|
||||
|
||||
### AUR Package 🔼
|
||||
|
||||
On Arch Linux based distribution, you can install termscp using for istance [yay](https://github.com/Jguer/yay), which I recommend to install AUR packages.
|
||||
|
||||
```sh
|
||||
yay -S termscp
|
||||
```
|
||||
|
||||
### Chocolatey 🍫
|
||||
|
||||
You can install TermSCP on Windows using [chocolatey](https://chocolatey.org/)
|
||||
|
||||
Start PowerShell as administrator and run
|
||||
while if you're a Windows user, you can install termscp with [Chocolatey](https://chocolatey.org/):
|
||||
|
||||
```ps
|
||||
choco install termscp
|
||||
```
|
||||
|
||||
Alternatively you can download the ZIP file from [HERE](https://github.com/veeso/termscp/releases/latest/download/termscp.0.4.2.nupkg)
|
||||
|
||||
and then with PowerShell started with administrator previleges, run:
|
||||
|
||||
```ps
|
||||
choco install termscp -s .
|
||||
```
|
||||
|
||||
### Brew 🍻
|
||||
|
||||
You can install TermSCP on MacOS using [brew](https://brew.sh/)
|
||||
|
||||
From your terminal run
|
||||
NetBSD users can install termscp from the official repositories.
|
||||
|
||||
```sh
|
||||
brew install veeso/termscp/termscp
|
||||
pkgin install termscp
|
||||
```
|
||||
|
||||
---
|
||||
Arch Linux users can install termscp from the official repositories.
|
||||
|
||||
## Usage ❓
|
||||
|
||||
TermSCP can be started with the following options:
|
||||
|
||||
`termscp [options]... [protocol://user@address:port:wrkdir] [local-wrkdir]`
|
||||
|
||||
- `-P, --password <password>` if address is provided, password will be this argument
|
||||
- `-v, --version` Print version info
|
||||
- `-h, --help` Print help page
|
||||
|
||||
TermSCP can be started in two different mode, if no extra arguments is provided, TermSCP will show the authentication form, where the user will be able to provide the parameters required to connect to the remote peer.
|
||||
|
||||
Alternatively, the user can provide an address as argument to skip the authentication form and starting directly the connection to the remote server.
|
||||
|
||||
If address argument is provided you can also provide the start working directory for local host
|
||||
|
||||
### Address argument 🌎
|
||||
|
||||
The address argument has the following syntax:
|
||||
|
||||
```txt
|
||||
[protocol://][username@]<address>[:port][:wrkdir]
|
||||
```sh
|
||||
pacman -S termscp
|
||||
```
|
||||
|
||||
Let's see some example of this particular syntax, since it's very comfortable and you'll probably going to use this instead of the other one...
|
||||
For more information or other platforms, please visit [termscp.veeso.dev](https://termscp.veeso.dev/#get-started) to view all installation methods.
|
||||
|
||||
- Connect using default protocol (*defined in configuration*) to 192.168.1.31, port if not provided is default for the selected protocol (in this case depends on your configuration); username is current user's name
|
||||
⚠️ If you're looking on how to update termscp just run termscp from CLI with: `(sudo) termscp --update` ⚠️
|
||||
|
||||
```sh
|
||||
termscp 192.168.1.31
|
||||
```
|
||||
### Requirements ❗
|
||||
|
||||
- Connect using default protocol (*defined in configuration*) to 192.168.1.31; username is `root`
|
||||
- **Linux** users:
|
||||
- libdbus-1
|
||||
- pkg-config
|
||||
- libsmbclient
|
||||
- **FreeBSD** or, **NetBSD** users:
|
||||
- dbus
|
||||
- pkgconf
|
||||
- libsmbclient
|
||||
|
||||
```sh
|
||||
termscp root@192.168.1.31
|
||||
```
|
||||
### Optional Requirements ✔️
|
||||
|
||||
- Connect using scp to 192.168.1.31, port is 4022; username is `omar`
|
||||
These requirements are not forced required to run termscp, but to enjoy all of its features
|
||||
|
||||
```sh
|
||||
termscp scp://omar@192.168.1.31:4022
|
||||
```
|
||||
|
||||
- Connect using scp to 192.168.1.31, port is 4022; username is `omar`. You will start in directory `/tmp`
|
||||
|
||||
```sh
|
||||
termscp scp://omar@192.168.1.31:4022:/tmp
|
||||
```
|
||||
|
||||
#### How Password can be provided 🔐
|
||||
|
||||
You have probably noticed, that, when providing the address as argument, there's no way to provide the password.
|
||||
Password can be basically provided through 3 ways when address argument is provided:
|
||||
|
||||
- `-P, --password` option: just use this CLI option providing the password. I strongly unrecommend this method, since it's very unsecure (since you might keep the password in the shell history)
|
||||
- Via `sshpass`: you can provide password via `sshpass`, e.g. `sshpass -f ~/.ssh/topsecret.key termscp cvisintin@192.168.1.31`
|
||||
- You will be prompted for it: if you don't use any of the previous methods, you will be prompted for the password, as happens with the more classics tools such as `scp`, `ssh`, etc.
|
||||
- **Linux/FreeBSD** users:
|
||||
- To **open** files via `V` (at least one of these)
|
||||
- *xdg-open*
|
||||
- *gio*
|
||||
- *gnome-open*
|
||||
- *kde-open*
|
||||
- **Linux** users:
|
||||
- A keyring manager: read more in the [User manual](docs/man.md#linux-keyring)
|
||||
- **WSL** users
|
||||
- To **open** files via `V` (at least one of these)
|
||||
- [wslu](https://github.com/wslutilities/wslu)
|
||||
|
||||
---
|
||||
|
||||
## Bookmarks ⭐
|
||||
## Support the developer ☕
|
||||
|
||||
In TermSCP it is possible to save favourites hosts, which can be then loaded quickly from the main layout of termscp.
|
||||
TermSCP will also save the last 16 hosts you connected to.
|
||||
This feature allows you to load all the parameters required to connect to a certain remote, simply selecting the bookmark in the tab under the authentication form.
|
||||
If you like termscp and you're grateful for the work I've done, please consider a little donation 🥳
|
||||
|
||||
Bookmarks will be saved, if possible at:
|
||||
You can make a donation with one of these platforms:
|
||||
|
||||
- `$HOME/.config/termscp/` on Linux/BSD
|
||||
- `$HOME/Library/Application Support/termscp` on MacOs
|
||||
- `FOLDERID_RoamingAppData\termscp\` on Windows
|
||||
|
||||
For bookmarks only (this won't apply to recent hosts) it is also possible to save the password used to authenticate. The password is not saved by default and must be specified through the prompt when saving a new Bookmark.
|
||||
|
||||
> I was very undecided about storing passwords in termscp. The reason? Saving a password on your computer might give access to a hacker to any server you've registered. But I must admit by myself that for many machines typing the password everytime is really boring, also many times I have to work with machines in LAN, which wouldn't provide any advantage to an attacker, So I came out with a good compromise for passwords.
|
||||
|
||||
I warmly suggest you to follow these guidelines in order to decide whether you should or you shouldn't save passwords:
|
||||
|
||||
- **DON'T** save passwords for machines which are exposed on the internet, save passwords only for machines in LAN
|
||||
- Make sure your machine is protected by attackers. If possible encrypt your disk and don't leave your PC unlocked while you're away.
|
||||
- Preferably, save passwords only when a compromising of the target machine wouldn't be a problem.
|
||||
|
||||
To create a bookmark, just fulfill the authentication form and then input `<CTRL+S>`; you'll then be asked to give a name to your bookmark, and tadah, the bookmark has been created.
|
||||
If you go to [gallery](#gallery-), there is a GIF showing how bookmarks work 💪.
|
||||
|
||||
### Are my passwords Safe 😈
|
||||
|
||||
Well, kinda.
|
||||
As said before, bookmarks are saved in your configuration directory along with passwords. Passwords are obviously not plain text, they are encrypted with **AES-128**. Does this make them safe? Well, depends on your operating system:
|
||||
|
||||
On Windows and MacOS the passwords are stored, if possible (but should be), in respectively the Windows Vault and the Keychain. This is actually super-safe and is directly managed by your operating system.
|
||||
|
||||
On Linux and BSD, on the other hand, the key used to encrypt your passwords is stored on your drive (at $HOME/.config/termscp). It is then, still possible to retrieve the key to decrypt passwords. Luckily, the location of the key guarantees your key can't be read by users different from yours, but yeah, I still wouldn't save the password for a server exposed on the internet 😉.
|
||||
Actually [keyring-rs](https://github.com/hwchen/keyring-rs), supports Linux, but for different reasons I preferred not to make it available for this configuration. If you want to read more about my decision read [this issue](https://github.com/veeso/termscp/issues/2), while if you think this might have been implemented differently feel free to open an issue with your proposal.
|
||||
[](https://ko-fi.com/veeso)
|
||||
[](https://www.paypal.me/chrisintin)
|
||||
|
||||
---
|
||||
|
||||
## Text Editor ✏
|
||||
## User manual 📚
|
||||
|
||||
TermSCP has, as you might have noticed, many features, one of these is the possibility to view and edit text file. It doesn't matter if the file is located on the local host or on the remote host, termscp provides the possibility to open a file in your favourite text editor.
|
||||
In case the file is located on remote host, the file will be first downloaded into your temporary file directory and then, **only** if changes were made to the file, re-uploaded to the remote host. TermSCP checks if you made changes to the file verifying the last modification time of the file.
|
||||
|
||||
Just a reminder: **you can edit only textual file**; binary files are not supported.
|
||||
|
||||
### How do I configure the text editor 🦥
|
||||
|
||||
Text editor is automatically found using this [awesome crate](https://github.com/milkey-mouse/edit), if you want to change the text editor to use, change it in termscp configuration. [View more](#configuration-️)
|
||||
|
||||
---
|
||||
|
||||
## Configuration ⚙️
|
||||
|
||||
TermSCP supports some user defined parameters, which can be defined in the configuration.
|
||||
Underhood termscp has a TOML file and some other directories where all the parameters will be saved, but don't worry, you won't touch any of these files, since I made possible to configure termscp from its user interface entirely.
|
||||
|
||||
termscp, like for bookmarks, just requires to have these paths accessible:
|
||||
|
||||
- `$HOME/.config/termscp/` on Linux/BSD
|
||||
- `$HOME/Library/Application Support/termscp` on MacOs
|
||||
- `FOLDERID_RoamingAppData\termscp\` on Windows
|
||||
|
||||
To access configuration, you just have to press `<CTRL+C>` from the home of termscp.
|
||||
|
||||
These parameters can be changed:
|
||||
|
||||
- **Default Protocol**: the default protocol is the default value for the file transfer protocol to be used in termscp. This applies for the login page and for the address CLI argument.
|
||||
- **Text Editor**: the text editor to use. By default termscp will find the default editor for you; with this option you can force an editor to be used (e.g. `vim`). **Also GUI editors are supported**, unless they `nohup` from the parent process so if you ask: yes, you can use `notepad.exe`, and no: **Visual Studio Code doesn't work**.
|
||||
- **Show Hidden Files**: select whether hidden files shall be displayed by default. You will be able to decide whether to show or not hidden files at runtime pressing `A` anyway.
|
||||
- **Check for updates**: if set to `yes`, termscp will fetch the Github API to check if there is a new version of termscp available.
|
||||
- **Group Dirs**: select whether directories should be groupped or not in file explorers. If `Display first` is selected, directories will be sorted using the configured method but displayed before files, viceversa if `Display last` is selected.
|
||||
|
||||
### SSH Key Storage 🔐
|
||||
|
||||
Along with configuration, termscp provides also an **essential** feature for **SFTP/SCP clients**: the SSH key storage.
|
||||
|
||||
You can access the SSH key storage, from configuration moving to the `SSH Keys` tab, once there you can:
|
||||
|
||||
- **Add a new key**: just press `<CTRL+N>` and you will be prompted to create a new key. Provide the hostname/ip address and the username associated to the key and finally a text editor will open up: paste the **PRIVATE** ssh key into the text editor, save and quit.
|
||||
- **Remove an existing key**: just press `<DEL>` or `<CTRL+E>` on the key you want to remove, to delete persistently the key from termscp.
|
||||
- **Edit an existing key**: just press `<ENTER>` on the key you want to edit, to change the private key.
|
||||
|
||||
> Q: Wait, my private key is protected with password, can I use it?
|
||||
> A: Of course you can. The password provided for authentication in termscp, is valid both for username/password authentication and for RSA key authentication.
|
||||
|
||||
### File Explorer Format
|
||||
|
||||
It is possible through configuration to define a custom format for the file explorer. This field, with name `File formatter syntax` will define how the file entries will be displayed in the file explorer.
|
||||
The syntax for the formatter is the following `{KEY1}... {KEY2:LENGTH}... {KEY3:LENGTH:EXTRA} {KEYn}...`.
|
||||
Each key in bracket will be replaced with the related attribute, while everything outside brackets will be left unchanged.
|
||||
|
||||
- The key name is mandatory and must be one of the keys below
|
||||
- The length describes the length reserved to display the field. Static attributes doesn't support this (GROUP, PEX, SIZE, USER)
|
||||
- Extra is supported only by some parameters and is an additional options. See keys to check if extra is supported.
|
||||
|
||||
These are the keys supported by the formatter:
|
||||
|
||||
- `ATIME`: Last access time (with default syntax `%b %d %Y %H:%M`); Extra might be provided as the time syntax (e.g. `{ATIME:8:%H:%M}`)
|
||||
- `CTIME`: Creation time (with syntax `%b %d %Y %H:%M`); Extra might be provided as the time syntax (e.g. `{CTIME:8:%H:%M}`)
|
||||
- `GROUP`: Owner group
|
||||
- `MTIME`: Last change time (with syntax `%b %d %Y %H:%M`); Extra might be provided as the time syntax (e.g. `{MTIME:8:%H:%M}`)
|
||||
- `NAME`: File name (Elided if longer than 24)
|
||||
- `PEX`: File permissions (UNIX format)
|
||||
- `SIZE`: File size (omitted for directories)
|
||||
- `SYMLINK`: Symlink (if any `-> {FILE_PATH}`)
|
||||
- `USER`: Owner user
|
||||
|
||||
If left empty, the default formatter syntax will be used: `{NAME:24} {PEX} {USER} {SIZE} {MTIME:17:%b %d %Y %H:%M}`
|
||||
|
||||
---
|
||||
|
||||
## Keybindings ⌨
|
||||
|
||||
| Key | Command | Reminder |
|
||||
|---------------|-------------------------------------------------------|-------------|
|
||||
| `<ESC>` | Disconnect from remote; return to authentication page | |
|
||||
| `<TAB>` | Switch between log tab and explorer | |
|
||||
| `<BACKSPACE>` | Go to previous directory in stack | |
|
||||
| `<RIGHT>` | Move to remote explorer tab | |
|
||||
| `<LEFT>` | Move to local explorer tab | |
|
||||
| `<UP>` | Move up in selected list | |
|
||||
| `<DOWN>` | Move down in selected list | |
|
||||
| `<PGUP>` | Move up in selected list by 8 rows | |
|
||||
| `<PGDOWN>` | Move down in selected list by 8 rows | |
|
||||
| `<ENTER>` | Enter directory | |
|
||||
| `<SPACE>` | Upload / download selected file | |
|
||||
| `<A>` | Toggle hidden files | All |
|
||||
| `<B>` | Sort files by | Bubblesort? |
|
||||
| `<C>` | Copy file/directory | Copy |
|
||||
| `<D>` | Make directory | Directory |
|
||||
| `<E>` | Delete file (Same as `DEL`) | Erase |
|
||||
| `<F>` | Search for files (wild match is supported) | Find |
|
||||
| `<G>` | Go to supplied path | Go to |
|
||||
| `<H>` | Show help | Help |
|
||||
| `<I>` | Show info about selected file or directory | Info |
|
||||
| `<L>` | Reload current directory's content | List |
|
||||
| `<N>` | Create new file with provided name | New |
|
||||
| `<O>` | Edit file; see [Text editor](#text-editor-) | Open |
|
||||
| `<Q>` | Quit TermSCP | Quit |
|
||||
| `<R>` | Rename file | Rename |
|
||||
| `<S>` | Save file as... | Save |
|
||||
| `<U>` | Go to parent directory | Upper |
|
||||
| `<X>` | Execute a command | eXecute |
|
||||
| `<DEL>` | Delete file | |
|
||||
| `<CTRL+C>` | Abort file transfer process | |
|
||||
|
||||
---
|
||||
|
||||
## Documentation 📚
|
||||
|
||||
The developer documentation can be found on Rust Docs at <https://docs.rs/termscp>
|
||||
|
||||
---
|
||||
|
||||
## Known issues 🧻
|
||||
|
||||
- `NoSuchFileOrDirectory` on connect (WSL): I know about this issue and it's a glitch of WSL I guess. Don't worry about it, just move the termscp executable into another PATH location, such as `/usr/bin`, or install it through the appropriate package format (e.g. deb).
|
||||
The user manual can be found on the [termscp's website](https://termscp.veeso.dev/#user-manual) or on [Github](docs/man.md).
|
||||
|
||||
---
|
||||
|
||||
## Upcoming Features 🧪
|
||||
|
||||
- **Themes provider 🎨**: I'm still thinking about how I will implement this, but basically the idea is to have a configuration file where it will be possible
|
||||
to define the color schema for the entire application. I haven't planned this release yet
|
||||
- **Local and remote file explorer format 🃏**: From 0.5.0 you will be able to customize the file format for both local and remote hosts.
|
||||
- **Synchronized browsing of local and remote directories ⌚**: See [Issue 8](https://github.com/veeso/termscp/issues/8)
|
||||
- **Group file select 🤩**: Possibility to select a group of files in explorers to operate on
|
||||
|
||||
No other new feature is planned at the moment. I actually think that termscp is getting mature and now I should focus upcoming updates more on bug fixing and
|
||||
code/performance improvements than on new features.
|
||||
Anyway there are some ideas which I'd like to implement. If you want to start working on them, feel free to open a PR:
|
||||
|
||||
- Amazon S3 support
|
||||
- Samba support
|
||||
- Themes provider
|
||||
See [Milestones](https://github.com/veeso/termscp/milestones)
|
||||
|
||||
---
|
||||
|
||||
@@ -403,30 +251,36 @@ Anyway there are some ideas which I'd like to implement. If you want to start wo
|
||||
Contributions, bug reports, new features and questions are welcome! 😉
|
||||
If you have any question or concern, or you want to suggest a new feature, or you want just want to improve termscp, feel free to open an issue or a PR.
|
||||
|
||||
An **appreciated** contribution would be a translation of the user manual and readme in **other languages**
|
||||
|
||||
Please follow [our contributing guidelines](CONTRIBUTING.md)
|
||||
|
||||
---
|
||||
|
||||
## Changelog ⏳
|
||||
|
||||
View TermSCP's changelog [HERE](CHANGELOG.md)
|
||||
View termscp's changelog [HERE](CHANGELOG.md)
|
||||
|
||||
---
|
||||
|
||||
## Powered by 🚀
|
||||
## Powered by 💪
|
||||
|
||||
TermSCP is powered by these aweseome projects:
|
||||
termscp is powered by these awesome projects:
|
||||
|
||||
- [bytesize](https://github.com/hyunsik/bytesize)
|
||||
- [crossterm](https://github.com/crossterm-rs/crossterm)
|
||||
- [edit](https://github.com/milkey-mouse/edit)
|
||||
- [keyring-rs](https://github.com/hwchen/keyring-rs)
|
||||
- [kube](https://github.com/kube-rs/kube)
|
||||
- [open-rs](https://github.com/Byron/open-rs)
|
||||
- [pavao](https://github.com/veeso/pavao)
|
||||
- [remotefs](https://github.com/veeso/remotefs-rs)
|
||||
- [rpassword](https://github.com/conradkleinespel/rpassword)
|
||||
- [rust-ftp](https://github.com/mattnenterprise/rust-ftp)
|
||||
- [ssh2-rs](https://github.com/alexcrichton/ssh2-rs)
|
||||
- [textwrap](https://github.com/mgeisler/textwrap)
|
||||
- [tui-rs](https://github.com/fdehau/tui-rs)
|
||||
- [self_update](https://github.com/jaemk/self_update)
|
||||
- [ratatui](https://github.com/ratatui-org/ratatui)
|
||||
- [tui-realm](https://github.com/veeso/tui-realm)
|
||||
- [whoami](https://github.com/libcala/whoami)
|
||||
- [wildmatch](https://github.com/becheran/wildmatch)
|
||||
|
||||
---
|
||||
|
||||
@@ -450,18 +304,8 @@ TermSCP is powered by these aweseome projects:
|
||||
|
||||
---
|
||||
|
||||
## Buy me a coffee ☕
|
||||
|
||||
If you like termscp and you'd love to see the project to grow, please consider a little donation 🥳
|
||||
|
||||
[](https://www.buymeacoffee.com/veeso)
|
||||
|
||||
---
|
||||
|
||||
## License 📃
|
||||
|
||||
termscp is licensed under the MIT license since version 0.4.0.
|
||||
termscp is licensed under the MIT license.
|
||||
|
||||
You can read the entire license [HERE](LICENSE)
|
||||
|
||||
*Older version (0.1.0 ~ 0.3.3) are licensed under the [GPL-V3](http://www.gnu.org/licenses/gpl-3.0.txt) license*
|
||||
|
||||
10
SECURITY.md
Normal file
@@ -0,0 +1,10 @@
|
||||
# Security Policy
|
||||
|
||||
## Supported Versions
|
||||
|
||||
Only latst version of termscp has the latest security updates.
|
||||
Because of that, **you should always consider updating termscp to the latest version**.
|
||||
|
||||
## Reporting a Vulnerability
|
||||
|
||||
If you have any security vulnerability or concern to report, please open an issue using the `Security report` template.
|
||||
|
Before Width: | Height: | Size: 212 KiB After Width: | Height: | Size: 336 KiB |
|
Before Width: | Height: | Size: 223 KiB After Width: | Height: | Size: 231 KiB |
|
Before Width: | Height: | Size: 473 KiB After Width: | Height: | Size: 937 KiB |
|
Before Width: | Height: | Size: 504 KiB After Width: | Height: | Size: 3.2 MiB |
BIN
assets/images/flags/br.png
Normal file
|
After Width: | Height: | Size: 9.3 KiB |
BIN
assets/images/flags/cn.png
Normal file
|
After Width: | Height: | Size: 5.8 KiB |
BIN
assets/images/flags/de.png
Normal file
|
After Width: | Height: | Size: 5.1 KiB |
BIN
assets/images/flags/dk.png
Normal file
|
After Width: | Height: | Size: 5.9 KiB |
BIN
assets/images/flags/es.png
Normal file
|
After Width: | Height: | Size: 5.2 KiB |
BIN
assets/images/flags/fr.png
Normal file
|
After Width: | Height: | Size: 5.3 KiB |
BIN
assets/images/flags/gb.png
Normal file
|
After Width: | Height: | Size: 1002 B |
BIN
assets/images/flags/it.png
Normal file
|
After Width: | Height: | Size: 5.1 KiB |
BIN
assets/images/flags/jp.png
Normal file
|
After Width: | Height: | Size: 6.2 KiB |
BIN
assets/images/flags/kr.png
Normal file
|
After Width: | Height: | Size: 8.7 KiB |
BIN
assets/images/flags/nl.png
Normal file
|
After Width: | Height: | Size: 5.2 KiB |
BIN
assets/images/flags/ru.png
Normal file
|
After Width: | Height: | Size: 5.1 KiB |
BIN
assets/images/flags/us.png
Normal file
|
After Width: | Height: | Size: 484 B |
BIN
assets/images/termscp-128.png
Normal file
|
After Width: | Height: | Size: 3.8 KiB |
BIN
assets/images/termscp-512.png
Normal file
|
After Width: | Height: | Size: 17 KiB |
BIN
assets/images/termscp-64.png
Normal file
|
After Width: | Height: | Size: 2.0 KiB |
BIN
assets/images/termscp-96.png
Normal file
|
After Width: | Height: | Size: 2.8 KiB |
1
assets/images/termscp.svg
Normal file
@@ -0,0 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 500 500"><circle style="fill:#31363b" cx="250" cy="250" r="250"/><circle style="fill:#ea4444" cx="225" cy="40" r="7.344"/><circle style="fill:#eac944" cx="58.177" cy="22.745" r="7.344" transform="matrix(1, 0, 0, 1.031863, 191.822998, 16.530386)"/><circle style="fill:#34b938" cx="57.564" cy="22.269" r="7.344" transform="matrix(1, 0, 0, 1.031863, 217.43605, 17.021263)"/><polygon style="stroke:#000;fill:#f0f0f0" points="83.462 135.575 200 252.112 87.687 364.425 48.108 324.846 122.07 250.881 45.738 174.55"/><g transform="matrix(0.408921, 0, 0, 0.408921, 241.338654, 169.687912)"><polygon style="fill:#f0f0f0" points="196.4 0 292 49.2 388 98 292 147.2 196.4 196.4 100.8 147.2 4.8 98 100.8 49.2"/><polygon style="fill:#31363b" points="316 179.6 316 135.2 268 159.6 268 204 294.4 171.6"/><polygon style="fill:#f0f0f0" points="196.4 196.4 196.4 392.8 388 294.8 388 98 316 135.2 314.4 136 314.4 179.2 294.4 171.6 268 204 268 159.6"/><polygon style="fill:#f0f0f0" points="196.4 392.8 196.4 196.4 100.8 147.2 4.8 98 4.8 294.8"/><polygon style="fill:#31363b" points="76.8 61.2 268 159.6 314.4 136 316 135.2 124.8 36.8 100.8 49.2"/></g><rect style="fill:#f0f0f0" width="200" height="35.702" x="222.229" y="364.298" rx="10" ry="10"/></svg>
|
||||
|
After Width: | Height: | Size: 1.3 KiB |
BIN
assets/images/themes.gif
Normal file
|
After Width: | Height: | Size: 224 KiB |
33
build.rs
Normal file
@@ -0,0 +1,33 @@
|
||||
use cfg_aliases::cfg_aliases;
|
||||
use vergen_git2::{BuildBuilder, CargoBuilder, Emitter, Git2Builder, RustcBuilder, SysinfoBuilder};
|
||||
|
||||
fn main() -> Result<(), Box<dyn std::error::Error>> {
|
||||
// Setup cfg aliases
|
||||
cfg_aliases! {
|
||||
// Platforms
|
||||
macos: { target_os = "macos" },
|
||||
linux: { target_os = "linux" },
|
||||
posix: { target_family = "unix" },
|
||||
win: { target_family = "windows" },
|
||||
// exclusive features
|
||||
smb: { all(feature = "smb", not( macos )) },
|
||||
smb_unix: { all(unix, feature = "smb", not(macos)) },
|
||||
smb_windows: { all(windows, feature = "smb") }
|
||||
}
|
||||
|
||||
let build = BuildBuilder::all_build()?;
|
||||
let cargo = CargoBuilder::all_cargo()?;
|
||||
let git2 = Git2Builder::all_git()?;
|
||||
let rustc = RustcBuilder::all_rustc()?;
|
||||
let si = SysinfoBuilder::all_sysinfo()?;
|
||||
|
||||
Emitter::default()
|
||||
.add_instructions(&build)?
|
||||
.add_instructions(&cargo)?
|
||||
.add_instructions(&git2)?
|
||||
.add_instructions(&rustc)?
|
||||
.add_instructions(&si)?
|
||||
.emit()?;
|
||||
|
||||
Ok(())
|
||||
}
|
||||
@@ -1,7 +0,0 @@
|
||||
ignore:
|
||||
- src/main.rs
|
||||
- src/lib.rs
|
||||
- src/activity_manager.rs
|
||||
- src/ui/activities/
|
||||
- src/ui/context.rs
|
||||
- src/ui/input.rs
|
||||
26
dist/build/aarch64_centos7/Dockerfile
vendored
Normal file
@@ -0,0 +1,26 @@
|
||||
FROM centos:centos7 as builder
|
||||
|
||||
WORKDIR /usr/src/
|
||||
# Install dependencies
|
||||
RUN yum -y install \
|
||||
git \
|
||||
gcc \
|
||||
pkgconfig \
|
||||
gcc \
|
||||
make \
|
||||
dbus-devel \
|
||||
libsmbclient-devel \
|
||||
bash \
|
||||
rpm-build
|
||||
# Install rust
|
||||
RUN curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs > /tmp/rust.sh && \
|
||||
chmod +x /tmp/rust.sh && \
|
||||
/tmp/rust.sh -y
|
||||
# Clone repository
|
||||
RUN git clone https://github.com/veeso/termscp.git
|
||||
# Set workdir to termscp
|
||||
WORKDIR /usr/src/termscp/
|
||||
# Install cargo rpm
|
||||
RUN source $HOME/.cargo/env && cargo install cargo-rpm
|
||||
|
||||
ENTRYPOINT ["tail", "-f", "/dev/null"]
|
||||
51
dist/build/aarch64_debian10/Dockerfile
vendored
Normal file
@@ -0,0 +1,51 @@
|
||||
FROM debian:buster
|
||||
|
||||
WORKDIR /usr/src/
|
||||
# Install dependencies
|
||||
RUN apt update && apt install -y \
|
||||
git \
|
||||
gcc \
|
||||
pkg-config \
|
||||
libdbus-1-dev \
|
||||
build-essential \
|
||||
libsmbclient-dev \
|
||||
libgit2-dev \
|
||||
build-essential \
|
||||
pkg-config \
|
||||
libbsd-dev \
|
||||
libcap-dev \
|
||||
libcups2-dev \
|
||||
libgnutls28-dev \
|
||||
libicu-dev \
|
||||
libjansson-dev \
|
||||
libkeyutils-dev \
|
||||
libldap2-dev \
|
||||
zlib1g-dev \
|
||||
libpam0g-dev \
|
||||
libacl1-dev \
|
||||
libarchive-dev \
|
||||
flex \
|
||||
bison \
|
||||
libntirpc-dev \
|
||||
libtracker-sparql-3.0-dev \
|
||||
libglib2.0-dev \
|
||||
libdbus-1-dev \
|
||||
libsasl2-dev \
|
||||
libunistring-dev \
|
||||
bash \
|
||||
curl \
|
||||
cpanminus && \
|
||||
cpanm Parse::Yapp::Driver;
|
||||
|
||||
# Install rust
|
||||
RUN curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs > /tmp/rust.sh && \
|
||||
chmod +x /tmp/rust.sh && \
|
||||
/tmp/rust.sh -y
|
||||
# Clone repository
|
||||
RUN git clone https://github.com/veeso/termscp.git
|
||||
# Set workdir to termscp
|
||||
WORKDIR /usr/src/termscp/
|
||||
# Install cargo deb
|
||||
RUN . $HOME/.cargo/env && cargo install cargo-deb
|
||||
|
||||
ENTRYPOINT ["tail", "-f", "/dev/null"]
|
||||
47
dist/build/deploy.sh
vendored
@@ -1,47 +0,0 @@
|
||||
#!/bin/bash
|
||||
|
||||
if [ -z "$1" ]; then
|
||||
echo "Usage: deploy.sh <version>"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
VERSION=$1
|
||||
|
||||
set -e # Don't fail
|
||||
|
||||
# Create pkgs directory
|
||||
cd ..
|
||||
PKGS_DIR=$(pwd)/pkgs
|
||||
cd -
|
||||
mkdir -p ${PKGS_DIR}/
|
||||
# Build x86_64_deb
|
||||
cd x86_64_debian9/
|
||||
docker build --tag termscp-${VERSION}-x86_64_debian9 .
|
||||
cd -
|
||||
mkdir -p ${PKGS_DIR}/deb/
|
||||
CONTAINER_NAME=$(docker create termscp-${VERSION}-x86_64_debian9 termscp-${VERSION}-x86_64_debian9)
|
||||
docker cp ${CONTAINER_NAME}:/usr/src/termscp/target/debian/termscp_${VERSION}_amd64.deb ${PKGS_DIR}/deb/
|
||||
# Build x86_64_centos7
|
||||
cd x86_64_centos7/
|
||||
docker build --tag termscp-${VERSION}-x86_64_centos7 .
|
||||
cd -
|
||||
mkdir -p ${PKGS_DIR}/rpm/
|
||||
CONTAINER_NAME=$(docker create termscp-${VERSION}-x86_64_centos7 termscp-${VERSION}-x86_64_centos7)
|
||||
docker cp ${CONTAINER_NAME}:/usr/src/termscp/target/release/rpmbuild/RPMS/x86_64/termscp-${VERSION}-1.el7.x86_64.rpm ${PKGS_DIR}/rpm/termscp-${VERSION}-1.x86_64.rpm
|
||||
# Build x86_64_archlinux
|
||||
|
||||
##################### TEMP REMOVED ###################################
|
||||
# cd x86_64_archlinux/
|
||||
# docker build --tag termscp-${VERSION}-x86_64_archlinux .
|
||||
# # Create container and get AUR pkg
|
||||
# cd -
|
||||
# mkdir -p ${PKGS_DIR}/arch/
|
||||
# CONTAINER_NAME=$(docker create termscp-${VERSION}-x86_64_archlinux termscp-${VERSION}-x86_64_archlinux)
|
||||
# docker cp ${CONTAINER_NAME}:/usr/src/termscp/termscp-${VERSION}-x86_64.tar.gz ${PKGS_DIR}/arch/
|
||||
# docker cp ${CONTAINER_NAME}:/usr/src/termscp/PKGBUILD ${PKGS_DIR}/arch/
|
||||
# docker cp ${CONTAINER_NAME}:/usr/src/termscp/.SRCINFO ${PKGS_DIR}/arch/
|
||||
# # Replace termscp-bin with termscp in PKGBUILD
|
||||
# sed -i 's/termscp-bin/termscp/g' ${PKGS_DIR}/arch/PKGBUILD
|
||||
##################### TEMP REMOVED ###################################
|
||||
|
||||
exit $?
|
||||
53
dist/build/freebsd.sh
vendored
Executable file
@@ -0,0 +1,53 @@
|
||||
#!/bin/sh
|
||||
|
||||
if [ -z "$1" ]; then
|
||||
echo "Usage: freebsd.sh <version>"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
VERSION=$1
|
||||
|
||||
set -e # Don't fail
|
||||
|
||||
# Go to root dir
|
||||
cd ../../
|
||||
# Check if in correct directory
|
||||
if [ ! -f Cargo.toml ]; then
|
||||
echo "Please start freebsd.sh from dist/build/ directory"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Build release
|
||||
cargo build --release && cargo strip
|
||||
# Make pkg
|
||||
cd target/release/
|
||||
PKG="termscp-v${VERSION}-x86_64-unknown-freebsd.tar.gz"
|
||||
tar czf $PKG termscp
|
||||
sha256sum $PKG
|
||||
# Calc sha256 of exec and copy to path
|
||||
HASH=`sha256sum termscp | cut -d ' ' -f1`
|
||||
sudo cp termscp /usr/local/bin/termscp
|
||||
mkdir -p ../../dist/pkgs/freebsd/
|
||||
mv $PKG ../../dist/pkgs/freebsd/$PKG
|
||||
cd ../../dist/pkgs/freebsd/
|
||||
rm manifest
|
||||
echo -e "name: \"termscp\"" > manifest
|
||||
echo -e "version: $VERSION" >> manifest
|
||||
echo -e "origin: veeso/termscp" >> manifest
|
||||
echo -e "comment: \"A feature rich terminal UI file transfer and explorer with support for SCP/SFTP/FTP/Kube/S3/WebDAV\"" >> manifest
|
||||
echo -e "desc: <<EOD\n\
|
||||
A feature rich terminal UI file transfer and explorer with support for SCP/SFTP/FTP/Kube/S3/WebDAV\n\
|
||||
EOD\n\
|
||||
arch: \"amd64\"\n\
|
||||
www: \"https://termscp.veeso.dev/termscp/\"\n\
|
||||
maintainer: \"christian.visintin1997@gmail.com\"\n\
|
||||
prefix: \"/usr/local/bin\"\n\
|
||||
deps: {\n\
|
||||
libssh: {origin: security/libssh, version: 0.9.5}\n\
|
||||
}\n\
|
||||
files: {\n\
|
||||
/usr/local/bin/termscp: \"$HASH\"\n\
|
||||
}\n\
|
||||
" >> manifest
|
||||
|
||||
exit $?
|
||||
52
dist/build/linux-aarch64.sh
vendored
Executable file
@@ -0,0 +1,52 @@
|
||||
#!/bin/bash
|
||||
|
||||
if [ -z "$1" ]; then
|
||||
echo "Usage: $0 <version> [branch] [--no-cache]"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
VERSION=$1
|
||||
|
||||
if [ -z "$2" ]; then
|
||||
BRANCH=$VERSION
|
||||
else
|
||||
BRANCH=$2
|
||||
fi
|
||||
|
||||
CACHE=""
|
||||
|
||||
if [ "$3" == "--no-cache" ]; then
|
||||
CACHE="--no-cache"
|
||||
fi
|
||||
|
||||
# names
|
||||
ARM64_DEB_NAME="termscp-arm64_deb"
|
||||
|
||||
docker run --rm --privileged multiarch/qemu-user-static --reset -p yes
|
||||
|
||||
set -e # Don't fail
|
||||
|
||||
# Create pkgs directory
|
||||
cd ..
|
||||
PKGS_DIR=$(pwd)/pkgs
|
||||
cd -
|
||||
mkdir -p ${PKGS_DIR}/
|
||||
# Build aarch64_deb
|
||||
cd aarch64_debian10/
|
||||
docker buildx build --platform linux/arm64 $CACHE --build-arg branch=${BRANCH} --tag $ARM64_DEB_NAME .
|
||||
cd -
|
||||
mkdir -p ${PKGS_DIR}/deb/
|
||||
mkdir -p ${PKGS_DIR}/aarch64-unknown-linux-gnu/
|
||||
docker run --name "$ARM64_DEB_NAME" -d "$ARM64_DEB_NAME" || docker start "$ARM64_DEB_NAME"
|
||||
docker exec -it "$ARM64_DEB_NAME" bash -c ". \$HOME/.cargo/env && git fetch origin && git checkout origin/$BRANCH && cargo build --release --features smb-vendored && cargo deb"
|
||||
docker cp ${ARM64_DEB_NAME}:/usr/src/termscp/target/debian/termscp_${VERSION}-1_arm64.deb ${PKGS_DIR}/deb/termscp_${VERSION}_arm64.deb
|
||||
docker cp ${ARM64_DEB_NAME}:/usr/src/termscp/target/release/termscp ${PKGS_DIR}/aarch64-unknown-linux-gnu/
|
||||
docker stop "$ARM64_DEB_NAME"
|
||||
# Make tar.gz
|
||||
cd ${PKGS_DIR}/aarch64-unknown-linux-gnu/
|
||||
tar cvzf termscp-v${VERSION}-aarch64-unknown-linux-gnu.tar.gz termscp
|
||||
echo "Sha256 (homebrew aarch64): $(sha256sum termscp-v${VERSION}-aarch64-unknown-linux-gnu.tar.gz)"
|
||||
rm termscp
|
||||
cd -
|
||||
|
||||
exit $?
|
||||
50
dist/build/linux-x86_64.sh
vendored
Executable file
@@ -0,0 +1,50 @@
|
||||
#!/bin/bash
|
||||
|
||||
if [ -z "$1" ]; then
|
||||
echo "Usage: $0 <version> [branch] [--no-cache]"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
VERSION=$1
|
||||
|
||||
if [ -z "$2" ]; then
|
||||
BRANCH=$VERSION
|
||||
else
|
||||
BRANCH=$2
|
||||
fi
|
||||
|
||||
CACHE=""
|
||||
|
||||
if [ "$3" == "--no-cache" ]; then
|
||||
CACHE="--no-cache"
|
||||
fi
|
||||
|
||||
# names
|
||||
X86_64_DEB_NAME="termscp-x86_64_deb"
|
||||
|
||||
set -e # Don't fail
|
||||
|
||||
# Create pkgs directory
|
||||
cd ..
|
||||
PKGS_DIR=$(pwd)/pkgs
|
||||
cd -
|
||||
mkdir -p ${PKGS_DIR}/
|
||||
# Build x86_64_deb
|
||||
cd x86_64_debian12/
|
||||
docker build $CACHE --build-arg branch=${BRANCH} --tag "$X86_64_DEB_NAME" .
|
||||
cd -
|
||||
mkdir -p ${PKGS_DIR}/deb/
|
||||
mkdir -p ${PKGS_DIR}/x86_64-unknown-linux-gnu/
|
||||
docker run --name "$X86_64_DEB_NAME" -d "$X86_64_DEB_NAME" || docker start "$X86_64_DEB_NAME"
|
||||
docker exec -it "$X86_64_DEB_NAME" bash -c ". \$HOME/.cargo/env && git fetch origin && git checkout origin/$BRANCH && cargo build --release --features smb-vendored && cargo deb"
|
||||
docker cp ${X86_64_DEB_NAME}:/usr/src/termscp/target/debian/termscp_${VERSION}-1_amd64.deb ${PKGS_DIR}/deb/termscp_${VERSION}_amd64.deb
|
||||
docker cp ${X86_64_DEB_NAME}:/usr/src/termscp/target/release/termscp ${PKGS_DIR}/x86_64-unknown-linux-gnu/
|
||||
docker stop "$X86_64_DEB_NAME"
|
||||
# Make tar.gz
|
||||
cd ${PKGS_DIR}/x86_64-unknown-linux-gnu/
|
||||
tar cvzf termscp-v${VERSION}-x86_64-unknown-linux-gnu.tar.gz termscp
|
||||
echo "Sha256 x86_64 (homebrew): $(sha256sum termscp-v${VERSION}-x86_64-unknown-linux-gnu.tar.gz)"
|
||||
rm termscp
|
||||
cd -
|
||||
|
||||
exit $?
|
||||
110
dist/build/macos.sh
vendored
Executable file
@@ -0,0 +1,110 @@
|
||||
#!/bin/sh
|
||||
|
||||
make_pkg() {
|
||||
ARCH=$1
|
||||
VERSION=$2
|
||||
TARGET_DIR="$3"
|
||||
if [ -z "$TARGET_DIR" ]; then
|
||||
TARGET_DIR=target/release/
|
||||
fi
|
||||
ROOT_DIR=$(pwd)
|
||||
cd "$TARGET_DIR"
|
||||
PKG="termscp-v${VERSION}-${ARCH}-apple-darwin.tar.gz"
|
||||
tar czf "$PKG" termscp
|
||||
HASH=$(sha256sum "$PKG")
|
||||
mkdir -p "${ROOT_DIR}/dist/pkgs/macos/"
|
||||
mv "$PKG" "${ROOT_DIR}/dist/pkgs/macos/$PKG"
|
||||
cd -
|
||||
echo "$HASH"
|
||||
}
|
||||
|
||||
detect_platform() {
|
||||
local platform
|
||||
platform="$(uname -s | tr '[:upper:]' '[:lower:]')"
|
||||
|
||||
case "${platform}" in
|
||||
linux) platform="linux" ;;
|
||||
darwin) platform="macos" ;;
|
||||
freebsd) platform="freebsd" ;;
|
||||
esac
|
||||
|
||||
printf '%s' "${platform}"
|
||||
}
|
||||
|
||||
detect_arch() {
|
||||
local arch
|
||||
arch="$(uname -m | tr '[:upper:]' '[:lower:]')"
|
||||
|
||||
case "${arch}" in
|
||||
amd64) arch="x86_64" ;;
|
||||
armv*) arch="arm" ;;
|
||||
arm64) arch="aarch64" ;;
|
||||
esac
|
||||
|
||||
# `uname -m` in some cases mis-reports 32-bit OS as 64-bit, so double check
|
||||
if [ "${arch}" = "x86_64" ] && [ "$(getconf LONG_BIT)" -eq 32 ]; then
|
||||
arch="i686"
|
||||
elif [ "${arch}" = "aarch64" ] && [ "$(getconf LONG_BIT)" -eq 32 ]; then
|
||||
arch="arm"
|
||||
fi
|
||||
|
||||
printf '%s' "${arch}"
|
||||
}
|
||||
|
||||
if [ -z "$1" ]; then
|
||||
echo "Usage: macos.sh <version>"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
PLATFORM="$(detect_platform)"
|
||||
ARCH="$(detect_arch)"
|
||||
|
||||
if [ "$PLATFORM" != "macos" ]; then
|
||||
echo "macos build is only available on MacOs systems"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
VERSION=$1
|
||||
export BUILD_ROOT
|
||||
BUILD_ROOT="$(pwd)/../../"
|
||||
|
||||
set -e # Don't fail
|
||||
|
||||
# Go to root dir
|
||||
cd ../../
|
||||
# Check if in correct directory
|
||||
if [ ! -f Cargo.toml ]; then
|
||||
echo "Please start macos.sh from dist/build/ directory"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Build release (x86_64)
|
||||
X86_TARGET=""
|
||||
X86_TARGET_DIR=""
|
||||
if [ "$ARCH" = "aarch64" ]; then
|
||||
X86_TARGET="--target x86_64-apple-darwin"
|
||||
X86_TARGET_DIR="target/x86_64-apple-darwin/release/"
|
||||
fi
|
||||
cargo build --release $X86_TARGET
|
||||
# Make pkg
|
||||
X86_64_HASH=$(make_pkg "x86_64" "$VERSION" $X86_TARGET_DIR)
|
||||
RET_X86_64=$?
|
||||
|
||||
ARM64_TARGET=""
|
||||
ARM64_TARGET_DIR=""
|
||||
if [ "$ARCH" = "aarch64" ]; then
|
||||
ARM64_TARGET="--target aarch64-apple-darwin"
|
||||
ARM64_TARGET_DIR="target/aarch64-apple-darwin/release/"
|
||||
fi
|
||||
cd "$BUILD_ROOT"
|
||||
# Build ARM64 pkg
|
||||
cargo build --release $ARM64_TARGET
|
||||
# Make pkg
|
||||
ARM64_HASH=$(make_pkg "arm64" "$VERSION" $ARM64_TARGET_DIR)
|
||||
RET_ARM64=$?
|
||||
|
||||
echo "x86_64 hash: $X86_64_HASH"
|
||||
echo "arm64 hash: $ARM64_HASH"
|
||||
|
||||
[ "$RET_ARM64" -eq 0 ] && [ "$RET_X86_64" -eq 0 ]
|
||||
exit $?
|
||||
20
dist/build/windows.ps1
vendored
Executable file
@@ -0,0 +1,20 @@
|
||||
$ErrorActionPreference = 'Stop';
|
||||
|
||||
if ($args.Count -eq 0) {
|
||||
Write-Output "Usage: windows.ps1 <version>"
|
||||
exit 1
|
||||
}
|
||||
|
||||
$version = $args[0]
|
||||
|
||||
# Go to root directory
|
||||
Set-Location ..\..\
|
||||
# Build
|
||||
cargo build --release
|
||||
# Make zip
|
||||
$zipName = "termscp-v$version-x86_64-pc-windows-msvc.zip"
|
||||
Set-Location .\target\release\
|
||||
Compress-Archive -Force termscp.exe $zipName
|
||||
# Get checksum
|
||||
Get-FileHash $zipName
|
||||
Move-Item $zipName .\..\..\dist\pkgs\windows\$zipName
|
||||
19
dist/build/x86_64/Dockerfile
vendored
@@ -1,19 +0,0 @@
|
||||
FROM rust:1.48.0 AS builder
|
||||
|
||||
WORKDIR /usr/src/
|
||||
# Add toolchains
|
||||
RUN rustup target add x86_64-unknown-linux-gnu
|
||||
# Install dependencies
|
||||
RUN apt update && apt install -y rpm
|
||||
# Clone repository
|
||||
RUN git clone https://github.com/veeso/termscp.git
|
||||
# Set workdir to termscp
|
||||
WORKDIR /usr/src/termscp/
|
||||
# Install cargo RPM/Deb
|
||||
RUN cargo install cargo-deb cargo-rpm
|
||||
# Build for x86_64
|
||||
RUN cargo build --release --target x86_64-unknown-linux-gnu
|
||||
# Build pkgs
|
||||
RUN cargo deb && cargo rpm init && cargo rpm build
|
||||
|
||||
CMD ["sh"]
|
||||
33
dist/build/x86_64_archlinux/Dockerfile
vendored
@@ -1,33 +0,0 @@
|
||||
FROM archlinux:base-20210120.0.13969 as builder
|
||||
|
||||
WORKDIR /usr/src/
|
||||
# Install dependencies
|
||||
RUN pacman -Syu --noconfirm \
|
||||
git \
|
||||
gcc \
|
||||
openssl \
|
||||
pkg-config \
|
||||
sudo
|
||||
# Install rust
|
||||
RUN curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs > /tmp/rust.sh && \
|
||||
chmod +x /tmp/rust.sh && \
|
||||
/tmp/rust.sh -y
|
||||
# Create build user
|
||||
RUN useradd build -m && \
|
||||
passwd -d build && \
|
||||
mkdir -p termscp && \
|
||||
chown -R build.build termscp/
|
||||
# Clone repository
|
||||
RUN git clone https://github.com/veeso/termscp.git
|
||||
# Set workdir to termscp
|
||||
WORKDIR /usr/src/termscp/
|
||||
# Install cargo arxch
|
||||
RUN source $HOME/.cargo/env && cargo install cargo-aur
|
||||
# Build for x86_64
|
||||
RUN source $HOME/.cargo/env && cargo build --release
|
||||
# Build pkgs
|
||||
RUN source $HOME/.cargo/env && cargo aur
|
||||
# Create SRCINFO
|
||||
RUN chown -R build.build ../termscp/ && sudo -u build bash -c 'makepkg --printsrcinfo > .SRCINFO'
|
||||
|
||||
CMD ["sh"]
|
||||
17
dist/build/x86_64_centos7/Dockerfile
vendored
@@ -5,9 +5,13 @@ WORKDIR /usr/src/
|
||||
RUN yum -y install \
|
||||
git \
|
||||
gcc \
|
||||
openssl \
|
||||
pkgconfig \
|
||||
openssl-devel
|
||||
gcc \
|
||||
make \
|
||||
dbus-devel \
|
||||
libsmbclient-devel \
|
||||
bash \
|
||||
rpm-build
|
||||
# Install rust
|
||||
RUN curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs > /tmp/rust.sh && \
|
||||
chmod +x /tmp/rust.sh && \
|
||||
@@ -16,10 +20,7 @@ RUN curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs > /tmp/rust.sh &&
|
||||
RUN git clone https://github.com/veeso/termscp.git
|
||||
# Set workdir to termscp
|
||||
WORKDIR /usr/src/termscp/
|
||||
# Install cargo arxch
|
||||
# Install cargo rpm
|
||||
RUN source $HOME/.cargo/env && cargo install cargo-rpm
|
||||
# Build for x86_64
|
||||
RUN source $HOME/.cargo/env && cargo build --release
|
||||
# Build pkgs
|
||||
RUN source $HOME/.cargo/env && yum -y install rpm-build && cargo rpm init && cargo rpm build
|
||||
CMD ["sh"]
|
||||
|
||||
ENTRYPOINT ["tail", "-f", "/dev/null"]
|
||||
|
||||
54
dist/build/x86_64_debian12/Dockerfile
vendored
Normal file
@@ -0,0 +1,54 @@
|
||||
FROM debian:bookworm
|
||||
|
||||
WORKDIR /usr/src/
|
||||
# Install dependencies
|
||||
RUN apt update && apt install -y \
|
||||
git \
|
||||
gcc \
|
||||
pkg-config \
|
||||
libdbus-1-dev \
|
||||
build-essential \
|
||||
libsmbclient-dev \
|
||||
libgit2-dev \
|
||||
build-essential \
|
||||
pkg-config \
|
||||
libbsd-dev \
|
||||
libcap-dev \
|
||||
libcups2-dev \
|
||||
libgnutls28-dev \
|
||||
libgnutls30 \
|
||||
libicu-dev \
|
||||
libjansson-dev \
|
||||
libkeyutils-dev \
|
||||
libldap2-dev \
|
||||
zlib1g-dev \
|
||||
libpam0g-dev \
|
||||
libacl1-dev \
|
||||
libarchive-dev \
|
||||
libssl-dev \
|
||||
flex \
|
||||
bison \
|
||||
libntirpc-dev \
|
||||
libglib2.0-dev \
|
||||
libdbus-1-dev \
|
||||
libsasl2-dev \
|
||||
libunistring-dev \
|
||||
bash \
|
||||
curl \
|
||||
cpanminus && \
|
||||
cpanm Parse::Yapp::Driver;
|
||||
|
||||
# Install rust
|
||||
RUN curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs > /tmp/rust.sh && \
|
||||
chmod +x /tmp/rust.sh && \
|
||||
/tmp/rust.sh -y && \
|
||||
. $HOME/.cargo/env && \
|
||||
cargo version
|
||||
# Clone repository
|
||||
RUN git clone https://github.com/veeso/termscp.git
|
||||
# Set workdir to termscp
|
||||
WORKDIR /usr/src/termscp/
|
||||
# Install cargo deb
|
||||
RUN . $HOME/.cargo/env && cargo install cargo-deb
|
||||
|
||||
ENTRYPOINT ["tail", "-f", "/dev/null"]
|
||||
28
dist/build/x86_64_debian8/Dockerfile
vendored
@@ -1,28 +0,0 @@
|
||||
FROM debian:jessie
|
||||
|
||||
WORKDIR /usr/src/
|
||||
# Install dependencies
|
||||
RUN apt update && apt install -y \
|
||||
git \
|
||||
gcc \
|
||||
pkg-config \
|
||||
libssl-dev \
|
||||
libssh2-1-dev \
|
||||
curl
|
||||
|
||||
# Install rust
|
||||
RUN curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs > /tmp/rust.sh && \
|
||||
chmod +x /tmp/rust.sh && \
|
||||
/tmp/rust.sh -y
|
||||
# Clone repository
|
||||
RUN git clone https://github.com/veeso/termscp.git
|
||||
# Set workdir to termscp
|
||||
WORKDIR /usr/src/termscp/
|
||||
# Install cargo deb
|
||||
RUN . $HOME/.cargo/env && cargo install cargo-deb
|
||||
# Build for x86_64
|
||||
RUN . $HOME/.cargo/env && cargo build --release
|
||||
# Build pkgs
|
||||
RUN . $HOME/.cargo/env && cargo deb
|
||||
|
||||
CMD ["sh"]
|
||||
28
dist/build/x86_64_debian9/Dockerfile
vendored
@@ -1,28 +0,0 @@
|
||||
FROM debian:stretch
|
||||
|
||||
WORKDIR /usr/src/
|
||||
# Install dependencies
|
||||
RUN apt update && apt install -y \
|
||||
git \
|
||||
gcc \
|
||||
pkg-config \
|
||||
libssl-dev \
|
||||
libssh2-1-dev \
|
||||
curl
|
||||
|
||||
# Install rust
|
||||
RUN curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs > /tmp/rust.sh && \
|
||||
chmod +x /tmp/rust.sh && \
|
||||
/tmp/rust.sh -y
|
||||
# Clone repository
|
||||
RUN git clone https://github.com/veeso/termscp.git
|
||||
# Set workdir to termscp
|
||||
WORKDIR /usr/src/termscp/
|
||||
# Install cargo deb
|
||||
RUN . $HOME/.cargo/env && cargo install cargo-deb
|
||||
# Build for x86_64
|
||||
RUN . $HOME/.cargo/env && cargo build --release
|
||||
# Build pkgs
|
||||
RUN . $HOME/.cargo/env && cargo deb
|
||||
|
||||
CMD ["sh"]
|
||||
14
dist/pkgs/arch/.SRCINFO
vendored
@@ -1,14 +0,0 @@
|
||||
pkgbase = termscp
|
||||
pkgdesc = TermSCP is a SCP/SFTP/FTPS client for command line with an integrated UI to explore the remote file system. Basically WinSCP on a terminal.
|
||||
pkgver = 0.4.2
|
||||
pkgrel = 1
|
||||
url = https://github.com/veeso/termscp
|
||||
arch = x86_64
|
||||
license = MIT
|
||||
provides = termscp
|
||||
options = strip
|
||||
source = https://github.com/veeso/termscp/releases/download/v0.4.2/termscp-0.4.2-x86_64.tar.gz
|
||||
sha256sums = c72f78a4707402f7f970a883899f4f1583fd9eca6166cb7f7616be97cabf768a
|
||||
|
||||
pkgname = termscp
|
||||
|
||||
16
dist/pkgs/arch/PKGBUILD
vendored
@@ -1,16 +0,0 @@
|
||||
# Maintainer: Christian Visintin
|
||||
pkgname=termscp
|
||||
pkgver=0.4.2
|
||||
pkgrel=1
|
||||
pkgdesc="TermSCP is a SCP/SFTP/FTPS client for command line with an integrated UI to explore the remote file system. Basically WinSCP on a terminal."
|
||||
url="https://github.com/veeso/termscp"
|
||||
license=("MIT")
|
||||
arch=("x86_64")
|
||||
provides=("termscp")
|
||||
options=("strip")
|
||||
source=("https://github.com/veeso/termscp/releases/download/v$pkgver/termscp-$pkgver-x86_64.tar.gz")
|
||||
sha256sums=("c72f78a4707402f7f970a883899f4f1583fd9eca6166cb7f7616be97cabf768a")
|
||||
|
||||
package() {
|
||||
install -Dm755 termscp -t "$pkgdir/usr/bin/"
|
||||
}
|
||||
301
docs/de/README.md
Normal file
@@ -0,0 +1,301 @@
|
||||
# termscp
|
||||
|
||||
<p align="center">
|
||||
<img src="/assets/images/termscp.svg" alt="logo" width="256" height="256" />
|
||||
</p>
|
||||
|
||||
<p align="center">~ Eine funktionsreiche Terminal-Dateiübertragung ~</p>
|
||||
<p align="center">
|
||||
<a href="https://termscp.veeso.dev" target="_blank">Webseite</a>
|
||||
·
|
||||
<a href="https://termscp.veeso.dev/#get-started" target="_blank">Installation</a>
|
||||
·
|
||||
<a href="https://termscp.veeso.dev/#user-manual" target="_blank">Benutzerhandbuch</a>
|
||||
</p>
|
||||
|
||||
<p align="center">
|
||||
<a href="https://github.com/veeso/termscp"
|
||||
><img
|
||||
height="20"
|
||||
src="/assets/images/flags/gb.png"
|
||||
alt="English"
|
||||
/></a>
|
||||
|
||||
<a
|
||||
href="https://github.com/veeso/termscp/blob/main/docs/pt-BR/README.md"
|
||||
><img
|
||||
height="20"
|
||||
src="/assets/images/flags/br.png"
|
||||
alt="Brazilian Portuguese"
|
||||
/></a>
|
||||
|
||||
<a
|
||||
href="/docs/de/README.md"
|
||||
><img
|
||||
height="20"
|
||||
src="/assets/images/flags/de.png"
|
||||
alt="Deutsch"
|
||||
/></a>
|
||||
|
||||
<a
|
||||
href="/docs/es/README.md"
|
||||
><img
|
||||
height="20"
|
||||
src="/assets/images/flags/es.png"
|
||||
alt="Español"
|
||||
/></a>
|
||||
|
||||
<a
|
||||
href="/docs/fr/README.md"
|
||||
><img
|
||||
height="20"
|
||||
src="/assets/images/flags/fr.png"
|
||||
alt="Français"
|
||||
/></a>
|
||||
|
||||
<a
|
||||
href="/docs/it/README.md"
|
||||
><img
|
||||
height="20"
|
||||
src="/assets/images/flags/it.png"
|
||||
alt="Italiano"
|
||||
/></a>
|
||||
|
||||
<a
|
||||
href="/docs/zh-CN/README.md"
|
||||
><img
|
||||
height="20"
|
||||
src="/assets/images/flags/cn.png"
|
||||
alt="简体中文"
|
||||
/></a>
|
||||
</p>
|
||||
|
||||
<p align="center">Entwickelt von <a href="https://veeso.me/" target="_blank">@veeso</a></p>
|
||||
<p align="center">Aktuelle Version: 0.17.0 24/03/2025</p>
|
||||
|
||||
<p align="center">
|
||||
<a href="https://opensource.org/licenses/MIT"
|
||||
><img
|
||||
src="https://img.shields.io/badge/License-MIT-teal.svg"
|
||||
alt="License-MIT"
|
||||
/></a>
|
||||
<a href="https://github.com/veeso/termscp/stargazers"
|
||||
><img
|
||||
src="https://img.shields.io/github/stars/veeso/termscp.svg"
|
||||
alt="Repo stars"
|
||||
/></a>
|
||||
<a href="https://crates.io/crates/termscp"
|
||||
><img
|
||||
src="https://img.shields.io/crates/d/termscp.svg"
|
||||
alt="Downloads counter"
|
||||
/></a>
|
||||
<a href="https://crates.io/crates/termscp"
|
||||
><img
|
||||
src="https://img.shields.io/crates/v/termscp.svg"
|
||||
alt="Latest version"
|
||||
/></a>
|
||||
<a href="https://ko-fi.com/veeso">
|
||||
<img
|
||||
src="https://img.shields.io/badge/donate-ko--fi-red"
|
||||
alt="Ko-fi"
|
||||
/></a>
|
||||
</p>
|
||||
<p align="center">
|
||||
<a href="https://github.com/veeso/termscp/actions"
|
||||
><img
|
||||
src="https://github.com/veeso/termscp/workflows/Linux/badge.svg"
|
||||
alt="Linux CI"
|
||||
/></a>
|
||||
<a href="https://github.com/veeso/termscp/actions"
|
||||
><img
|
||||
src="https://github.com/veeso/termscp/workflows/MacOS/badge.svg"
|
||||
alt="MacOS CI"
|
||||
/></a>
|
||||
<a href="https://github.com/veeso/termscp/actions"
|
||||
><img
|
||||
src="https://github.com/veeso/termscp/workflows/Windows/badge.svg"
|
||||
alt="Windows CI"
|
||||
/></a>
|
||||
<a href="https://github.com/veeso/termscp/actions"
|
||||
><img
|
||||
src="https://github.com/veeso/termscp/workflows/FreeBSD/badge.svg"
|
||||
alt="FreeBSD CI"
|
||||
/></a>
|
||||
<a href="https://coveralls.io/github/veeso/termscp"
|
||||
><img
|
||||
src="https://coveralls.io/repos/github/veeso/termscp/badge.svg"
|
||||
alt="Coveralls"
|
||||
/></a>
|
||||
</p>
|
||||
|
||||
---
|
||||
|
||||
## Über termscp 🖥
|
||||
|
||||
Termscp ist ein funktionsreicher Terminal-Dateitransfer und Explorer mit Unterstützung für SCP/SFTP/FTP/Kube/S3/WebDAV. Im Grunde handelt es sich also um ein Terminal-Dienstprogramm mit einer TUI, um eine Verbindung zu einem Remote-Server herzustellen, um Dateien abzurufen und hochzuladen und mit dem lokalen Dateisystem zu interagieren. Es ist **Linux**, **MacOS**, **FreeBSD** und **Windows** kompatibel.
|
||||
|
||||

|
||||
|
||||
---
|
||||
|
||||
## Features 🎁
|
||||
|
||||
- 📁 Verschiedene Kommunikationsprotokolle
|
||||
- **SFTP**
|
||||
- **SCP**
|
||||
- **FTP** und **FTPS**
|
||||
- **Kube**
|
||||
- **S3**
|
||||
- **SMB**
|
||||
- **WebDAV**
|
||||
- 🖥 Erkunden und bedienen Sie das Dateisystem der Fernbedienung und des lokalen Computers mit einer praktischen Benutzeroberfläche
|
||||
- Erstellen, Entfernen, Umbenennen, Suchen, Anzeigen und Bearbeiten von Dateien
|
||||
- ⭐ Verbinden Sie sich über integrierte Lesezeichen und aktuelle Verbindungen mit Ihren Lieblingshosts
|
||||
- 📝 Anzeigen und Bearbeiten von Dateien mit Ihren bevorzugten Anwendungen
|
||||
- 💁 SFTP/SCP-Authentifizierung mit SSH-Schlüsseln und Benutzername/Passwort
|
||||
- 🐧 Kompatibel mit Windows, Linux, FreeBSD und MacOS
|
||||
- 🎨 Mach es zu deinem!
|
||||
- Themen
|
||||
- Benutzerdefiniertes Datei-Explorer-Format
|
||||
- Anpassbarer Texteditor
|
||||
- Anpassbare Dateisortierung
|
||||
- und viele andere Parameter...
|
||||
- 📫 Lassen Sie sich benachrichtigen, wenn eine große Datei übertragen wurde
|
||||
- 🔭 Halten Sie Dateiänderungen mit dem Remote-Host synchron
|
||||
- 🔐 Speichern Sie Ihr Passwort in Ihrem Betriebssystem-Schlüsseltresor
|
||||
- 🦀 Rust-powered
|
||||
- 👀 Entwickelt, um die Leistung im Auge zu behalten
|
||||
- 🦄 Häufige tolle Updates
|
||||
|
||||
---
|
||||
|
||||
## Loslegen 🚀
|
||||
|
||||
Wenn Sie überlegen, termscp zu installieren, möchte ich Ihnen danken 💜 ! Ich hoffe, Sie werden Termscp genießen!
|
||||
Wenn Sie zu diesem Projekt beitragen möchten, vergessen Sie nicht, unseren [Beitragsleitfaden](../../CONTRIBUTING.md) zu lesen.
|
||||
|
||||
Wenn Sie ein Linux-, FreeBSD- oder MacOS-Benutzer sind, installiert dieses einfache Shell-Skript termscp mit einem einzigen Befehl auf Ihrem System:
|
||||
|
||||
```sh
|
||||
curl -sSLf http://get-termscp.veeso.dev | sh
|
||||
```
|
||||
|
||||
Wenn Sie ein Windows-Benutzer sind, können Sie termscp mit [Chocolatey](https://chocolatey.org/) installieren:
|
||||
|
||||
```sh
|
||||
choco install termscp
|
||||
```
|
||||
|
||||
Für weitere Informationen oder andere Plattformen besuchen Sie bitte [termscp.veeso.dev](https://termscp.veeso.dev/termscp/#get-started), um alle Installationsmethoden anzuzeigen.
|
||||
|
||||
⚠️ Wenn Sie wissen möchten, wie Sie termscp aktualisieren können, führen Sie einfach termscp über die CLI aus mit: `(sudo) termscp --update` ⚠️
|
||||
|
||||
### Softwareanforderungen ❗
|
||||
|
||||
- **Linux** Benutzer:
|
||||
- libssh
|
||||
- libdbus-1
|
||||
- pkg-config
|
||||
- libsmbclient
|
||||
- **FreeBSD** Benutzer:
|
||||
- libssh
|
||||
- dbus
|
||||
- pkgconf
|
||||
- libsmbclient
|
||||
|
||||
### Optionale Softwareanforderungen ✔️
|
||||
|
||||
Diese Anforderungen sind nicht zwingend erforderlich, um termscp auszuführen, sondern um alle Funktionen nutzen zu können
|
||||
|
||||
- **Linux/FreeBSD** Benutzer:
|
||||
- Um Dateien mit `V` zu **öffnen** (mindestens eines davon)
|
||||
- *xdg-open*
|
||||
- *gio*
|
||||
- *gnome-open*
|
||||
- *kde-open*
|
||||
- **Linux** Benutzer:
|
||||
- Ein Keyring-manager: Lesen Sie mehr in der [Bedienungsanleitung](man.md#linux-keyring)
|
||||
- **WSL** Benutzer
|
||||
- Um Dateien mit `V` zu **öffnen** (mindestens eines davon)
|
||||
- [wslu](https://github.com/wslutilities/wslu)
|
||||
|
||||
---
|
||||
|
||||
## Unterstütze mich ☕
|
||||
|
||||
Wenn Ihnen termscp gefällt und Sie für die Arbeit, die ich geleistet habe, dankbar sind, denken Sie bitte über eine kleine Spende nach 🥳
|
||||
|
||||
Sie können mit einer dieser Plattformen spenden:
|
||||
|
||||
[](https://ko-fi.com/veeso)
|
||||
[](https://www.paypal.me/chrisintin)
|
||||
|
||||
---
|
||||
|
||||
## User manual 📚
|
||||
|
||||
Das Benutzerhandbuch finden Sie auf der [termscp-Website](https://termscp.veeso.dev/termscp/#user-manual) oder auf [Github](man.md).
|
||||
|
||||
---
|
||||
|
||||
## Contributing and issues 🤝🏻
|
||||
|
||||
Beiträge, Fehlerberichte, neue Funktionen und Fragen sind willkommen! 😉
|
||||
Wenn Sie Fragen oder Bedenken haben, eine neue Funktion vorschlagen oder einfach nur die Bedingungen verbessern möchten, können Sie ein Problem oder eine PR erstellen.
|
||||
|
||||
Bitte befolgen Sie [unsere Beitragsrichtlinien](../../CONTRIBUTING.md)
|
||||
|
||||
---
|
||||
|
||||
## Changelog ⏳
|
||||
|
||||
Änderungsprotokoll von termscp ansehen [HIER](../../CHANGELOG.md)
|
||||
|
||||
---
|
||||
|
||||
## Powered by 💪
|
||||
|
||||
termscp wird von diesen großartigen Projekten unterstützt:
|
||||
|
||||
- [bytesize](https://github.com/hyunsik/bytesize)
|
||||
- [crossterm](https://github.com/crossterm-rs/crossterm)
|
||||
- [edit](https://github.com/milkey-mouse/edit)
|
||||
- [keyring-rs](https://github.com/hwchen/keyring-rs)
|
||||
- [open-rs](https://github.com/Byron/open-rs)
|
||||
- [rpassword](https://github.com/conradkleinespel/rpassword)
|
||||
- [rust-s3](https://github.com/durch/rust-s3)
|
||||
- [self_update](https://github.com/jaemk/self_update)
|
||||
- [ssh2-rs](https://github.com/alexcrichton/ssh2-rs)
|
||||
- [suppaftp](https://github.com/veeso/suppaftp)
|
||||
- [ratatui](https://github.com/ratatui-org/ratatui)
|
||||
- [tui-realm](https://github.com/veeso/tui-realm)
|
||||
- [whoami](https://github.com/libcala/whoami)
|
||||
- [wildmatch](https://github.com/becheran/wildmatch)
|
||||
|
||||
---
|
||||
|
||||
## Galerie 🎬
|
||||
|
||||
> Termscp Home
|
||||
|
||||

|
||||
|
||||
> Bookmarks
|
||||
|
||||

|
||||
|
||||
> Setup
|
||||
|
||||

|
||||
|
||||
> Text editor
|
||||
|
||||

|
||||
|
||||
---
|
||||
|
||||
## License 📃
|
||||
|
||||
termscp ist unter der MIT-Lizenz lizenziert.
|
||||
|
||||
Du kannst die gesamte Lizenz [HIER](../../LICENSE) lesen
|
||||
1138
docs/de/man.md
Normal file
@@ -1,35 +0,0 @@
|
||||
# Deploy checklist
|
||||
|
||||
Document audience: project maintainers
|
||||
|
||||
- [Deploy checklist](#deploy-checklist)
|
||||
- [Description](#description)
|
||||
- [Checklist](#checklist)
|
||||
|
||||
## Description
|
||||
|
||||
This document describes the checklist that must be fulfilled before releasing a new version of termscp.
|
||||
|
||||
## Checklist
|
||||
|
||||
- [ ] The latest build didn't report any error in the CI
|
||||
- [ ] All commands when using SFTP work
|
||||
- [ ] All commands when using SCP work
|
||||
- [ ] All commands when using FTP work
|
||||
- [ ] It is possible to load bookmarks
|
||||
- [ ] Recent connections get saved
|
||||
- [ ] Update versions and release date in readme, changelog and cargo.toml
|
||||
- [ ] Build on MacOS
|
||||
- [ ] Update sha256 and version on homebrew repository
|
||||
- [ ] Build on Windows
|
||||
- [ ] Update sha256 and version in chocolatey repository
|
||||
- [ ] Create chocolatey package
|
||||
- [ ] Build Linux version using docker from `dist/build/build.sh`
|
||||
- [ ] Update sha256 and version in AUR files
|
||||
- [ ] Create release and attach the following artifacts
|
||||
- [ ] Deb package
|
||||
- [ ] RPM package
|
||||
- [ ] MacOs tar.gz
|
||||
- [ ] Windows nupkg
|
||||
- [ ] Windows zip
|
||||
- [ ] AUR tar.gz
|
||||
@@ -1,32 +1,33 @@
|
||||
# Developer Manual
|
||||
|
||||
Document audience: developers
|
||||
Revision: 2022-01-05
|
||||
|
||||
- [Developer Manual](#developer-manual)
|
||||
- [How TermSCP works](#how-termscp-works)
|
||||
- [How termscp works](#how-termscp-works)
|
||||
- [Activities](#activities)
|
||||
- [The Context](#the-context)
|
||||
- [Tests fails due to receivers](#tests-fails-due-to-receivers)
|
||||
- [Implementing File Transfers](#implementing-file-transfers)
|
||||
- [Achieving an abstract file transfer client](#achieving-an-abstract-file-transfer-client)
|
||||
|
||||
Welcome to the developer manual for TermSCP. This chapter DOESN'T contain the documentation for TermSCP modules, which can instead be found on Rust Docs at <https://docs.rs/termscp>
|
||||
This chapter describes how TermSCP works and the guide lines to implement stuff such as file transfers and add features to the user interface.
|
||||
Welcome to the developer manual for termscp. This chapter DOESN'T contain the documentation for termscp modules, which can instead be found on Rust Docs at <https://docs.rs/termscp>
|
||||
This chapter describes how termscp works and the guide lines to implement stuff such as file transfers and add features to the user interface.
|
||||
|
||||
## How TermSCP works
|
||||
---
|
||||
|
||||
TermSCP is basically made up of 4 components:
|
||||
## How termscp works
|
||||
|
||||
termscp is basically made up of 3 core modules:
|
||||
|
||||
- the **filetransfer**: the filetransfer takes care of managing the remote file system; it provides function to establish a connection with the remote, operating on the remote server file system (e.g. remove files, make directories, rename files, ...), read files and write files. The FileTransfer, as we'll see later, is actually a trait, and for each protocol a FileTransfer must be implement the trait.
|
||||
- the **host**: the host module provides functions to interact with the local host file system.
|
||||
- the **ui**: this module contains the implementation of the user interface, as we'll see in the next chapter, this is achieved through **activities**.
|
||||
- the **activity_manager**: the activity manager takes care of managing activities, basically it runs the activities of the user interface, and chooses, based on their state, when is the moment to terminate the current activity and which activity to run after the current one.
|
||||
|
||||
In addition to the 4 main components, other have been added through the time:
|
||||
In addition to the 3 core modules, other have been added through the time:
|
||||
|
||||
- **config**: this module provides the configuration schema and serialization methods for it.
|
||||
- **fs**: this modules exposes the FsEntry entity and the explorers. The explorers are structs which hold the content of the current directory; they also they take of filtering files up to your preferences and format file entries based on your configuration.
|
||||
- **system**: the system module provides a way to actually interact with the configuration, the ssh key storage and with the bookmarks.
|
||||
- **utils**: contains the utilities used by pretty much all the project.
|
||||
- **explorer**: this modules exposes the explorer structures, which are used to handle the file explorer in the ui. So, basically they store the current directory model and the view states (e.g. sorting, whether to display hidden files, ...).
|
||||
- **system**: the system module provides a way to interact with the configuration, with the ssh key storage and with the bookmarks.
|
||||
- **utils**: contains the utilities used by pretty much all of the project.
|
||||
|
||||
## Activities
|
||||
|
||||
@@ -35,10 +36,10 @@ I think there are many ways to implement a user interface and I've worked with d
|
||||
|
||||
My approach was this:
|
||||
|
||||
- **Activities on top**: each "page" is an Activity and an `Activity Manager` handles them. I got inspired by Android for this case. I think that's a good way to implement the ui in case like this, where you have different pages, each one with their view, their components and their logics. Activities work with the `Context`, which is a data holder for different data, which are shared and common between the activities.
|
||||
- **Activities display Views**: Each activity can show different views. A view is basically a list of **components**, each one with its properties. The view is a facade to the components and also handles the focus, which is the current active component. You cannot have more than one component active, so you need to handle this; but at the same time you also have to give focus to the previously active component if the current one is destroyed. So basically view takes care of all this stuff.
|
||||
- **Components**: I've decided to write around `tui` in order to re-use widgets. To do so I've implemented the `Component` trait. To implement traits I got inspired by [React](https://reactjs.org/). Each component has its *Properties* and can have its *States*. Then each component must be able to handle input events and to be updated with new properties. Last but not least, each component must provide a method to **render** itself.
|
||||
- **Messages: an Elm based approach**: I was really satisfied with my implementation choices; the problem at this point was solving one of the biggest teardrops I've ever had with this project: **events**. Input events were really a pain to handle, since I had to handle states in the activity to handle which component was enabled etc. To solve this I got inspired by a wonderful language I had recently studied, which is [Elm](https://elm-lang.org/). Basically in Elm you implement your ui using three basic functions: **update**, **view** and **init**. View and init were pretty much already implemented here, but at this point I decided to implement also something like the **elm update function**. I came out with a huge match case to handle events inside a recursive function, which you can basically find in the `update.rs` file inside each activity. This match case handles a tuple, made out of the **component id** and the **input event** received from the view. It matches the two propeties against the input event we want to handle for each component *et voilà*.
|
||||
- **Activities on top**: each "view" is an Activity and an `Activity Manager` handles them. I got inspired by Android for this case. I think that's a good way to implement the ui in case like this, where you have different views, each one with their view, their components and their logic. Activities work with the `Context`, which is a data holder to share data between the activities.
|
||||
- **Activities display Applications**: Each activity can show different **Applications**. An application, contains a **View** is basically a list of **components**, each one with its properties. The view is a facade to the components and also handles the focus, which is the current active component. You cannot have more than one component active, so you need to handle this; but at the same time you also have to give focus to the previously active component if the current one is destroyed. So basically **Application** takes care of all this stuff. If you're interested on how this works, you can read more on <https://github.com/veeso/tui-realm>.
|
||||
- **Components**: I've decided to write around `tui` in order to re-use widgets. To do so I've implemented the `Component` trait. To implement traits I got inspired by [React](https://reactjs.org/). Each component has its *Properties* and can have its *States*. Then each component must be able to handle input events and to be updated with new properties. Last but not least, each component must provide a method to **render** itself. At the beginning this was implemented inside of termscp, but now this has been moved to [tui-realm](https://github.com/veeso/tui-realm).
|
||||
- **Messages: an Elm based approach**: I was really satisfied with my implementation choices; the problem at this point was solving one of the biggest teardrops I've ever had with this project: **events**. Input events were really a pain to handle, since I had to handle states in the activity to handle which component was enabled etc. To solve this I got inspired by a wonderful language I had recently studied, which is [Elm](https://elm-lang.org/). Basically in Elm you implement your ui using three basic functions: **update**, **view** and **init**. View and init were pretty much already implemented here, but at this point I decided to implement also something like the **elm update function**. I came out with a huge match case to handle messages inside a recursive function, which you can basically find in the `update.rs` file inside each activity. This match case handles the messages produced by the components in front of an incoming input event. It matches the messages causing the activity to change its states *et voilà*.
|
||||
|
||||
I've implemented a Trait called `Activity`, which, is a very very reduced version of the Android activity of course.
|
||||
This trait provides only 3 methods:
|
||||
@@ -57,150 +58,16 @@ The context basically holds the following data:
|
||||
- The **File Transfer Params**: the current parameters set to connect to the remote
|
||||
- The **Config Client**: the configuration client is a structure which provides functions to access the user configuration
|
||||
- The **Store**: the store is a key-value storage which can hold any kind of data. This can be used to store states to share between activities or to keep persistence for heavy/slow tasks (such as checking for updates).
|
||||
- The **Input handler**: the input handler is used to read input events from the keyboard
|
||||
- The **Terminal**: the terminal is used to view the tui on the terminal
|
||||
|
||||
---
|
||||
|
||||
## Tests fails due to receivers
|
||||
## Achieving an abstract file transfer client
|
||||
|
||||
Yes. This happens quite often and is related to the fact that I'm using public SSH/SFTP/FTP server to test file receivers and sometimes this server go down for even a day or more. If your tests don't pass due to this, don't worry, submit the pull request and I'll take care of testing them by myself.
|
||||
When I started to implement termscp, in december 2020, the file transfer was at the core of my implementation focus, since, for obvious reasons, it is at the heart of termscp.
|
||||
The first implementation consisted of a `filetransfer` module, which exposed a trait called `FileTransfer`, which exposed different methods to generically interact with the remote file system.
|
||||
This thing has changed over the last year, since different users has asked me to implement a dedicated library to implement this.
|
||||
So in the last quarter of 2021, I dedicated part of my time in implementing an abstract library to work with remote device file systems, and this is how [remotefs](https://github.com/veeso/remotefs-rs) was born.
|
||||
Remotefs provides a `RemoteFs` trait which exposes all of the core file-system functionalities and this has since 0.8.0 version, replaced the `FileTransfer` trait.
|
||||
|
||||
---
|
||||
|
||||
## Implementing File Transfers
|
||||
|
||||
This chapter describes how to implement a file transfer in TermSCP. A file transfer is a module which implements the `FileTransfer` trait. The file transfer provides different modules to interact with a remote server, which in addition to the most obvious methods, used to download and upload files, provides also methods to list files, delete files, create directories etc.
|
||||
|
||||
In the following steps I will describe how to implement a new file transfer, in this case I will be implementing the SCP file transfer (which I'm actually implementing the moment I'm writing this lines).
|
||||
|
||||
1. Add the Scp protocol to the `FileTransferProtocol` enum.
|
||||
|
||||
Move to `src/filetransfer/mod.rs` and add `Scp` to the `FileTransferProtocol` enum
|
||||
|
||||
```rs
|
||||
/// ## FileTransferProtocol
|
||||
///
|
||||
/// This enum defines the different transfer protocol available in TermSCP
|
||||
#[derive(std::cmp::PartialEq, std::fmt::Debug, std::clone::Clone)]
|
||||
pub enum FileTransferProtocol {
|
||||
Sftp,
|
||||
Ftp(bool), // Bool is for secure (true => ftps)
|
||||
Scp, // <-- here
|
||||
}
|
||||
```
|
||||
|
||||
In this case Scp is a "plain" enum type. If you need particular options, follow the implementation of `Ftp` which uses a boolean flag for indicating if using FTPS or FTP.
|
||||
|
||||
2. Implement the FileTransfer struct
|
||||
|
||||
Create a file at `src/filetransfer/mytransfer.rs`
|
||||
|
||||
Declare your file transfer struct
|
||||
|
||||
```rs
|
||||
/// ## ScpFileTransfer
|
||||
///
|
||||
/// SFTP file transfer structure
|
||||
pub struct ScpFileTransfer {
|
||||
session: Option<Session>,
|
||||
sftp: Option<Sftp>,
|
||||
wrkdir: PathBuf,
|
||||
}
|
||||
```
|
||||
|
||||
3. Implement the `FileTransfer` trait for it
|
||||
|
||||
You'll have to implement the following methods for your file transfer:
|
||||
|
||||
- connect: connect to remote server
|
||||
- disconnect: disconnect from remote server
|
||||
- is_connected: returns whether the file transfer is connected to remote
|
||||
- pwd: get working directory
|
||||
- change_dir: change working directory.
|
||||
- list_dir: get files and directories at a certain path
|
||||
- mkdir: make a new directory. Return an error in case the directory already exists
|
||||
- remove: remove a file or a directory. In case the protocol doesn't support recursive removing of directories you MUST implement this through a recursive algorithm
|
||||
- rename: rename a file or a directory
|
||||
- stat: returns detail for a certain path
|
||||
- send_file: opens a stream to a remote path for write purposes (write a remote file)
|
||||
- recv_file: opens a stream to a remote path for read purposes (write a local file)
|
||||
- on_sent: finalize a stream when writing a remote file. In case it's not necessary just return `Ok(())`
|
||||
- on_recv: fianlize a stream when reading a remote file. In case it's not necessary just return `Ok(())`
|
||||
|
||||
In case the protocol you're working on doesn't support any of this features, just return `Err(FileTransferError::new(FileTransferErrorType::UnsupportedFeature))`
|
||||
|
||||
4. Add your transfer to filetransfers:
|
||||
|
||||
Move to `src/filetransfer/mod.rs` and declare your file transfer:
|
||||
|
||||
```rs
|
||||
// Transfers
|
||||
pub mod ftp_transfer;
|
||||
pub mod scp_transfer; // <-- here
|
||||
pub mod sftp_transfer;
|
||||
```
|
||||
|
||||
5. Handle FileTransfer in `FileTransferActivity::new`
|
||||
|
||||
Move to `src/ui/activities/filetransfer_activity/mod.rs` and add the new protocol to the client match
|
||||
|
||||
```rs
|
||||
client: match protocol {
|
||||
FileTransferProtocol::Sftp => Box::new(SftpFileTransfer::new()),
|
||||
FileTransferProtocol::Ftp(ftps) => Box::new(FtpFileTransfer::new(ftps)),
|
||||
FileTransferProtocol::Scp => Box::new(ScpFileTransfer::new()), // <--- here
|
||||
},
|
||||
```
|
||||
|
||||
6. Handle right/left input events in `AuthActivity`:
|
||||
|
||||
Move to `src/ui/activities/auth_activity.rs` and handle the new protocol in `handle_input_event_mode_text` for `KeyCode::Left` and `KeyCode::Right`.
|
||||
Consider that the order they "rotate" must match the way they will be drawned in the interface.
|
||||
For newer protocols, please put them always at the end of the list. In this list I won't, because Scp is more important than Ftp imo.
|
||||
|
||||
```rs
|
||||
KeyCode::Left => {
|
||||
// If current field is Protocol handle event... (move element left)
|
||||
if self.selected_field == InputField::Protocol {
|
||||
self.protocol = match self.protocol {
|
||||
FileTransferProtocol::Sftp => FileTransferProtocol::Ftp(true), // End of list (wrap)
|
||||
FileTransferProtocol::Scp => FileTransferProtocol::Sftp,
|
||||
FileTransferProtocol::Ftp(ftps) => match ftps {
|
||||
false => FileTransferProtocol::Scp,
|
||||
true => FileTransferProtocol::Ftp(false),
|
||||
}
|
||||
};
|
||||
}
|
||||
}
|
||||
KeyCode::Right => {
|
||||
// If current field is Protocol handle event... ( move element right )
|
||||
if self.selected_field == InputField::Protocol {
|
||||
self.protocol = match self.protocol {
|
||||
FileTransferProtocol::Sftp => FileTransferProtocol::Scp,
|
||||
FileTransferProtocol::Scp => FileTransferProtocol::Ftp(false),
|
||||
FileTransferProtocol::Ftp(ftps) => match ftps {
|
||||
false => FileTransferProtocol::Ftp(true),
|
||||
true => FileTransferProtocol::Sftp, // End of list (wrap)
|
||||
}
|
||||
};
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
7. Add your new file transfer to the protocol input field
|
||||
|
||||
Move to `AuthActivity::draw_protocol_select` method.
|
||||
Here add your new protocol to the `Spans` vector and to the match case, which chooses which element to highlight.
|
||||
|
||||
```rs
|
||||
let protocols: Vec<Spans> = vec![Spans::from("SFTP"), Spans::from("SCP"), Spans::from("FTP"), Spans::from("FTPS")];
|
||||
let index: usize = match self.protocol {
|
||||
FileTransferProtocol::Sftp => 0,
|
||||
FileTransferProtocol::Scp => 1,
|
||||
FileTransferProtocol::Ftp(ftps) => match ftps {
|
||||
false => 2,
|
||||
true => 3,
|
||||
}
|
||||
};
|
||||
```
|
||||
The file transfer module, still exists though, but its only task is to create a builder from the "file transfer parameters" into the `RemoteFs` client implementation.
|
||||
|
||||
299
docs/es/README.md
Normal file
@@ -0,0 +1,299 @@
|
||||
# termscp
|
||||
|
||||
<p align="center">
|
||||
<img src="/assets/images/termscp.svg" alt="logo" width="256" height="256" />
|
||||
</p>
|
||||
|
||||
<p align="center">~ Una transferencia de archivos de terminal rica en funciones ~</p>
|
||||
<p align="center">
|
||||
<a href="https://termscp.veeso.dev" target="_blank">Sitio Web</a>
|
||||
·
|
||||
<a href="https://termscp.veeso.dev/#get-started" target="_blank">Instalación</a>
|
||||
·
|
||||
<a href="https://termscp.veeso.dev/#user-manual" target="_blank">Manual de usuario</a>
|
||||
</p>
|
||||
|
||||
<p align="center">
|
||||
<a href="https://github.com/veeso/termscp"
|
||||
><img
|
||||
height="20"
|
||||
src="/assets/images/flags/gb.png"
|
||||
alt="English"
|
||||
/></a>
|
||||
|
||||
<a
|
||||
href="https://github.com/veeso/termscp/blob/main/docs/pt-BR/README.md"
|
||||
><img
|
||||
height="20"
|
||||
src="/assets/images/flags/br.png"
|
||||
alt="Brazilian Portuguese"
|
||||
/></a>
|
||||
|
||||
<a
|
||||
href="/docs/de/README.md"
|
||||
><img
|
||||
height="20"
|
||||
src="/assets/images/flags/de.png"
|
||||
alt="Deutsch"
|
||||
/></a>
|
||||
|
||||
<a
|
||||
href="/docs/es/README.md"
|
||||
><img
|
||||
height="20"
|
||||
src="/assets/images/flags/es.png"
|
||||
alt="Español"
|
||||
/></a>
|
||||
|
||||
<a
|
||||
href="/docs/fr/README.md"
|
||||
><img
|
||||
height="20"
|
||||
src="/assets/images/flags/fr.png"
|
||||
alt="Français"
|
||||
/></a>
|
||||
|
||||
<a
|
||||
href="/docs/it/README.md"
|
||||
><img
|
||||
height="20"
|
||||
src="/assets/images/flags/it.png"
|
||||
alt="Italiano"
|
||||
/></a>
|
||||
|
||||
<a
|
||||
href="/docs/zh-CN/README.md"
|
||||
><img
|
||||
height="20"
|
||||
src="/assets/images/flags/cn.png"
|
||||
alt="简体中文"
|
||||
/></a>
|
||||
</p>
|
||||
|
||||
<p align="center">Desarrollado por <a href="https://veeso.me/" target="_blank">@veeso</a></p>
|
||||
<p align="center">Versión actual: 0.17.0 24/03/2025</p>
|
||||
|
||||
<p align="center">
|
||||
<a href="https://opensource.org/licenses/MIT"
|
||||
><img
|
||||
src="https://img.shields.io/badge/License-MIT-teal.svg"
|
||||
alt="License-MIT"
|
||||
/></a>
|
||||
<a href="https://github.com/veeso/termscp/stargazers"
|
||||
><img
|
||||
src="https://img.shields.io/github/stars/veeso/termscp.svg"
|
||||
alt="Repo stars"
|
||||
/></a>
|
||||
<a href="https://crates.io/crates/termscp"
|
||||
><img
|
||||
src="https://img.shields.io/crates/d/termscp.svg"
|
||||
alt="Downloads counter"
|
||||
/></a>
|
||||
<a href="https://crates.io/crates/termscp"
|
||||
><img
|
||||
src="https://img.shields.io/crates/v/termscp.svg"
|
||||
alt="Latest version"
|
||||
/></a>
|
||||
<a href="https://ko-fi.com/veeso">
|
||||
<img
|
||||
src="https://img.shields.io/badge/donate-ko--fi-red"
|
||||
alt="Ko-fi"
|
||||
/></a>
|
||||
</p>
|
||||
<p align="center">
|
||||
<a href="https://github.com/veeso/termscp/actions"
|
||||
><img
|
||||
src="https://github.com/veeso/termscp/workflows/Linux/badge.svg"
|
||||
alt="Linux CI"
|
||||
/></a>
|
||||
<a href="https://github.com/veeso/termscp/actions"
|
||||
><img
|
||||
src="https://github.com/veeso/termscp/workflows/MacOS/badge.svg"
|
||||
alt="MacOS CI"
|
||||
/></a>
|
||||
<a href="https://github.com/veeso/termscp/actions"
|
||||
><img
|
||||
src="https://github.com/veeso/termscp/workflows/Windows/badge.svg"
|
||||
alt="Windows CI"
|
||||
/></a>
|
||||
<a href="https://github.com/veeso/termscp/actions"
|
||||
><img
|
||||
src="https://github.com/veeso/termscp/workflows/FreeBSD/badge.svg"
|
||||
alt="FreeBSD CI"
|
||||
/></a>
|
||||
<a href="https://coveralls.io/github/veeso/termscp"
|
||||
><img
|
||||
src="https://coveralls.io/repos/github/veeso/termscp/badge.svg"
|
||||
alt="Coveralls"
|
||||
/></a>
|
||||
</p>
|
||||
|
||||
---
|
||||
|
||||
## Sobre termscp 🖥
|
||||
|
||||
Termscp es un explorador y transferencia de archivos de terminal rico en funciones, con apoyo para SCP/SFTP/FTP/Kube/S3/WebDAV. Básicamente, es una utilidad de terminal con una TUI para conectarse a un servidor remoto para recuperar y cargar archivos e interactuar con el sistema de archivos local. Es compatible con **Linux**, **MacOS**, **FreeBSD** y **Windows**.
|
||||
|
||||

|
||||
|
||||
---
|
||||
|
||||
## Características 🎁
|
||||
|
||||
- 📁 Diferentes protocolos de comunicación
|
||||
- **SFTP**
|
||||
- **SCP**
|
||||
- **FTP** y **FTPS**
|
||||
- **Kube**
|
||||
- **S3**
|
||||
- **SMB**
|
||||
- **WebDAV**
|
||||
- 🖥 Explore y opere en el sistema de archivos de la máquina local y remota con una interfaz de usuario práctica
|
||||
- Cree, elimine, cambie el nombre, busque, vea y edite archivos
|
||||
- ⭐ Conéctese a sus hosts favoritos y conexiones recientes
|
||||
- 📝 Ver y editar archivos con sus aplicaciones favoritas
|
||||
- 💁 Autenticación SFTP / SCP con claves SSH y nombre de usuario / contraseña
|
||||
- 🐧 compatible con Linux, MacOS, FreeBSD y Windows
|
||||
- 🎨 Haz lo tuyo!
|
||||
- Temas
|
||||
- Formato de explorador de archivos personalizado
|
||||
- Editor de texto personalizable
|
||||
- Clasificación de archivos personalizable
|
||||
- y muchos otros parámetros ...
|
||||
- 📫 Reciba una notificación cuando se haya transferido un archivo grande
|
||||
- 🔭 Mantenga los cambios de archivos sincronizados con el host remoto
|
||||
- 🔐 Guarde su contraseña en el almacén de claves de su sistema operativo
|
||||
- 🦀 Rust-powered
|
||||
- 👀 Desarrollado sin perder de vista el rendimiento
|
||||
- 🦄 Actualizaciones frecuentes
|
||||
|
||||
---
|
||||
|
||||
## Para iniciar 🚀
|
||||
|
||||
Si estás considerando instalar termscp, ¡quiero darte las gracias 💜! ¡Espero que disfrutes de termscp!
|
||||
Si desea contribuir a este proyecto, no olvide consultar nuestra [guía de contribución](../../CONTRIBUTING.md).
|
||||
|
||||
Si tu eres un usuario de Linux, FreeBSD o MacOS, este sencillo script de shell instalará termscp en tu sistema con un solo comando:
|
||||
|
||||
```sh
|
||||
curl -sSLf http://get-termscp.veeso.dev | sh
|
||||
```
|
||||
|
||||
mientras que si eres un usuario de Windows, puedes instalar termscp con [Chocolatey](https://chocolatey.org/):
|
||||
|
||||
```sh
|
||||
choco install termscp
|
||||
```
|
||||
|
||||
Para obtener más información u otras plataformas, visite [termscp.veeso.dev](https://termscp.veeso.dev/termscp/#get-started) para ver todos los métodos de instalación.
|
||||
|
||||
⚠️ Si estás buscando cómo actualizar termscp, simplemente ejecute termscp desde CLI con:: `(sudo) termscp --update` ⚠️
|
||||
|
||||
### Requisitos ❗
|
||||
|
||||
- **Linux** users:
|
||||
- libdbus-1
|
||||
- pkg-config
|
||||
- libsmbclient
|
||||
- **FreeBSD** or, **NetBSD** users:
|
||||
- dbus
|
||||
- pkgconf
|
||||
- libsmbclient
|
||||
|
||||
### Requisitos opcionales ✔️
|
||||
|
||||
These requirements are not forced required to run termscp, but to enjoy all of its features
|
||||
|
||||
- Usuarios **Linux/FreeBSD**:
|
||||
- Para **abrir** archivos con `V` (al menos uno de estos)
|
||||
- *xdg-open*
|
||||
- *gio*
|
||||
- *gnome-open*
|
||||
- *kde-open*
|
||||
- Usuarios **Linux**:
|
||||
- Un keyring manager: leer más en el [manual de usuario](man.md#linux-keyring)
|
||||
- Usuarios **WSL**
|
||||
- Para **abrir** archivos con `V` (al menos uno de estos)
|
||||
- [wslu](https://github.com/wslutilities/wslu)
|
||||
|
||||
---
|
||||
|
||||
## Apoyame ☕
|
||||
|
||||
Si te gusta termscp y te encantaría que el proyecto crezca y mejore, considera una pequeña donación para apoyarme 🥳
|
||||
|
||||
Puedes hacer una donación con una de estas plataformas:
|
||||
|
||||
[](https://ko-fi.com/veeso)
|
||||
[](https://www.paypal.me/chrisintin)
|
||||
|
||||
---
|
||||
|
||||
## Manual de usuario y documentación 📚
|
||||
|
||||
El manual del usuario se puede encontrar en el [sitio web de termscp](https://termscp.veeso.dev/termscp/#user-manual) o en [Github](man.md).
|
||||
|
||||
---
|
||||
|
||||
## Contribuir y problemas 🤝🏻
|
||||
|
||||
¡Las contribuciones, los informes de errores, las nuevas funciones y las preguntas son bienvenidas! 😉
|
||||
Si tiene alguna pregunta o inquietud, o si desea sugerir una nueva función, o simplemente desea mejorar termscp, no dude en abrir un problema o un PR.
|
||||
|
||||
Sigue [nuestras pautas de contribución](../../CONTRIBUTING.md)
|
||||
|
||||
---
|
||||
|
||||
## Changelog ⏳
|
||||
|
||||
Ver registro de cambios de termscp [AQUÍ](../../CHANGELOG.md)
|
||||
|
||||
---
|
||||
|
||||
## Powered by 💪
|
||||
|
||||
termscp funciona con estos increíbles proyectos:
|
||||
|
||||
- [bytesize](https://github.com/hyunsik/bytesize)
|
||||
- [crossterm](https://github.com/crossterm-rs/crossterm)
|
||||
- [edit](https://github.com/milkey-mouse/edit)
|
||||
- [keyring-rs](https://github.com/hwchen/keyring-rs)
|
||||
- [open-rs](https://github.com/Byron/open-rs)
|
||||
- [rpassword](https://github.com/conradkleinespel/rpassword)
|
||||
- [rust-s3](https://github.com/durch/rust-s3)
|
||||
- [self_update](https://github.com/jaemk/self_update)
|
||||
- [ssh2-rs](https://github.com/alexcrichton/ssh2-rs)
|
||||
- [suppaftp](https://github.com/veeso/suppaftp)
|
||||
- [ratatui](https://github.com/ratatui-org/ratatui)
|
||||
- [tui-realm](https://github.com/veeso/tui-realm)
|
||||
- [whoami](https://github.com/libcala/whoami)
|
||||
- [wildmatch](https://github.com/becheran/wildmatch)
|
||||
|
||||
---
|
||||
|
||||
## Galería 🎬
|
||||
|
||||
> Termscp Home
|
||||
|
||||

|
||||
|
||||
> Bookmarks
|
||||
|
||||

|
||||
|
||||
> Setup
|
||||
|
||||

|
||||
|
||||
> Text editor
|
||||
|
||||

|
||||
|
||||
---
|
||||
|
||||
## Licencia 📃
|
||||
|
||||
termscp tiene la licencia MIT.
|
||||
|
||||
Puede leer la licencia completa [AQUÍ](../../LICENSE)
|
||||
599
docs/es/man.md
Normal file
@@ -0,0 +1,599 @@
|
||||
# User manual 🎓
|
||||
|
||||
- [User manual 🎓](#user-manual-)
|
||||
- [Uso ❓](#uso-)
|
||||
- [Argumento dirección 🌎](#argumento-dirección-)
|
||||
- [Argumento dirección por AWS S3](#argumento-dirección-por-aws-s3)
|
||||
- [Argumento de dirección Kube](#argumento-de-dirección-kube)
|
||||
- [Argumento de dirección de WebDAV](#argumento-de-dirección-de-webdav)
|
||||
- [Argumento dirección por SMB](#argumento-dirección-por-smb)
|
||||
- [Cómo se puede proporcionar la contraseña 🔐](#cómo-se-puede-proporcionar-la-contraseña-)
|
||||
- [S3 parámetros de conexión](#s3-parámetros-de-conexión)
|
||||
- [Credenciales de S3 🦊](#credenciales-de-s3-)
|
||||
- [Explorador de archivos 📂](#explorador-de-archivos-)
|
||||
- [Keybindings ⌨](#keybindings-)
|
||||
- [Trabajar con múltiples archivos 🥷](#trabajar-con-múltiples-archivos-)
|
||||
- [Ejemplo](#ejemplo)
|
||||
- [Navegación sincronizada ⏲️](#navegación-sincronizada-️)
|
||||
- [Abierta y abierta con 🚪](#abierta-y-abierta-con-)
|
||||
- [Marcadores ⭐](#marcadores-)
|
||||
- [¿Son seguras mis contraseñas? 😈](#son-seguras-mis-contraseñas-)
|
||||
- [Linux Keyring](#linux-keyring)
|
||||
- [KeepassXC setup por termscp](#keepassxc-setup-por-termscp)
|
||||
- [Configuración ⚙️](#configuración--️)
|
||||
- [SSH Key Storage 🔐](#ssh-key-storage-)
|
||||
- [Formato del explorador de archivos](#formato-del-explorador-de-archivos)
|
||||
- [Temas 🎨](#temas-)
|
||||
- [Mi tema no se carga 😱](#mi-tema-no-se-carga-)
|
||||
- [Estilos 💈](#estilos-)
|
||||
- [Authentication page](#authentication-page)
|
||||
- [Transfer page](#transfer-page)
|
||||
- [Misc](#misc)
|
||||
- [Text Editor ✏](#text-editor-)
|
||||
- [Logging 🩺](#logging-)
|
||||
- [Notificaciones 📫](#notificaciones-)
|
||||
- [Observador de archivos 🔭](#observador-de-archivos-)
|
||||
|
||||
> ❗ Este documento ha sido traducido con Google Translator (y luego lo he revisado a grandes rasgos, pero no puedo hablar el idioma muy bien). Si habla l'idioma, abra un [issue](https://github.com/veeso/termscp/issues/new/choose) utilizando la label COPY o abra un PR 🙏
|
||||
|
||||
## Uso ❓
|
||||
|
||||
termscp se puede iniciar con las siguientes opciones:
|
||||
|
||||
`termscp [options]... [protocol://user@address:port:wrkdir] [protocol://user@address:port:wrkdir] [local-wrkdir]`
|
||||
|
||||
OR
|
||||
|
||||
`termscp [options]... -b [bookmark-name] -b [bookmark-name] [local-wrkdir]`
|
||||
|
||||
- `-P, --password <password>` si se proporciona la dirección, la contraseña será este argumento
|
||||
- `-b, --address-as-bookmark` resuelve el argumento de la dirección como un nombre de marcador
|
||||
- `-q, --quiet` Deshabilitar el registro
|
||||
- `-v, --version` Imprimir información de la versión
|
||||
- `-h, --help` Imprimir página de ayuda
|
||||
|
||||
termscp se puede iniciar en dos modos diferentes, si no se proporcionan argumentos adicionales, termscp mostrará el formulario de autenticación, donde el usuario podrá proporcionar los parámetros necesarios para conectarse al par remoto.
|
||||
|
||||
Alternativamente, el usuario puede proporcionar una dirección como argumento para omitir el formulario de autenticación e iniciar directamente la conexión al servidor remoto.
|
||||
|
||||
Si se proporciona un argumento de dirección, también puede proporcionar el directorio de inicio de trabajo para el host local
|
||||
|
||||
### Argumento dirección 🌎
|
||||
|
||||
El argumento dirección tiene la siguiente sintaxis:
|
||||
|
||||
```txt
|
||||
[protocol://][username@]<address>[:port][:wrkdir]
|
||||
```
|
||||
|
||||
Veamos algún ejemplo de esta sintaxis en particular, ya que es muy cómoda y probablemente usarás esta en lugar de la otra ...
|
||||
|
||||
- Conéctese usando el protocolo predeterminado (*definido en la configuración*) a 192.168.1.31, el puerto, si no se proporciona, es el predeterminado para el protocolo seleccionado (en este caso, depende de su configuración); nombre de usuario es el nombre del usuario actual
|
||||
|
||||
```sh
|
||||
termscp 192.168.1.31
|
||||
```
|
||||
|
||||
- Conéctese usando el protocolo predeterminado (*definido en la configuración*) a 192.168.1.31; el nombre de usuario es `root`
|
||||
|
||||
```sh
|
||||
termscp root@192.168.1.31
|
||||
```
|
||||
|
||||
- Conéctese usando scp a 192.168.1.31, el puerto es 4022; nombre de usuario es `omar`
|
||||
|
||||
```sh
|
||||
termscp scp://omar@192.168.1.31:4022
|
||||
```
|
||||
|
||||
- Conéctese usando scp a 192.168.1.31, el puerto es 4022; El nombre de usuario es `omar`. Comenzará en el directorio `/ tmp`
|
||||
|
||||
```sh
|
||||
termscp scp://omar@192.168.1.31:4022:/tmp
|
||||
```
|
||||
|
||||
#### Argumento dirección por AWS S3
|
||||
|
||||
Aws S3 tiene una sintaxis diferente para el argumento de la dirección CLI, por razones obvias, pero logré mantenerlo lo más similar posible al argumento de la dirección genérica:
|
||||
|
||||
```txt
|
||||
s3://<bucket-name>@<region>[:profile][:/wrkdir]
|
||||
```
|
||||
|
||||
por ejemplo
|
||||
|
||||
```txt
|
||||
s3://buckethead@eu-central-1:default:/assets
|
||||
```
|
||||
|
||||
#### Argumento de dirección Kube
|
||||
|
||||
En caso de que quieras conectarte a Kube, utiliza la siguiente sintaxis
|
||||
|
||||
```txt
|
||||
kube://[namespace][@<cluster_url>][$</path>]
|
||||
```
|
||||
|
||||
#### Argumento de dirección de WebDAV
|
||||
|
||||
En caso de que quieras conectarte a WebDAV utiliza la siguiente sintaxis
|
||||
|
||||
```txt
|
||||
http://<username>:<password>@<url></path>
|
||||
```
|
||||
|
||||
o en caso de que quieras usar https
|
||||
|
||||
```txt
|
||||
https://<username>:<password>@<url></path>
|
||||
```
|
||||
|
||||
#### Argumento dirección por SMB
|
||||
|
||||
SMB tiene una sintaxis diferente para el argumento de la dirección CLI, que es diferente si está en Windows u otros sistemas:
|
||||
|
||||
**Windows** sintaxis:
|
||||
|
||||
```txt
|
||||
\\[username@]<server-name>\<share>[\path\...]
|
||||
```
|
||||
|
||||
**Other systems** sintaxis:
|
||||
|
||||
```txt
|
||||
smb://[username@]<server-name>[:port]/<share>[/path/.../]
|
||||
```
|
||||
|
||||
#### Cómo se puede proporcionar la contraseña 🔐
|
||||
|
||||
Probablemente haya notado que, al proporcionar la dirección como argumento, no hay forma de proporcionar la contraseña.
|
||||
La contraseña se puede proporcionar básicamente a través de 3 formas cuando se proporciona un argumento de dirección:
|
||||
|
||||
- `-P, --password` opción: simplemente use esta opción CLI proporcionando la contraseña. No recomiendo este método, ya que es muy inseguro (ya que puede mantener la contraseña en el historial de shell)
|
||||
- Con `sshpass`: puede proporcionar la contraseña a través de `sshpass`, p. ej. `sshpass -f ~/.ssh/topsecret.key termscp cvisintin@192.168.1.31`
|
||||
- Se te pedirá que ingreses: si no utilizas ninguno de los métodos anteriores, se te pedirá la contraseña, como ocurre con las herramientas más clásicas como `scp`, `ssh`, etc.
|
||||
|
||||
---
|
||||
|
||||
## S3 parámetros de conexión
|
||||
|
||||
Estos parámetros son necesarios para conectarse a aws s3 y otros servidores compatibles con s3:
|
||||
|
||||
- AWS S3:
|
||||
- **bucket name**
|
||||
- **region**
|
||||
- *profile* (si no se proporciona: "default")
|
||||
- *access key* (A menos que sea pública)
|
||||
- *secret access key* (A menos que sea pública)
|
||||
- *security token* (si es requerido)
|
||||
- *session token* (si es requerido)
|
||||
- new path style: **NO**
|
||||
- Otros puntos finales de S3:
|
||||
- **bucket name**
|
||||
- **endpoint**
|
||||
- *access key* (A menos que sea pública)
|
||||
- *secret access key* (A menos que sea pública)
|
||||
- new path style: **YES**
|
||||
|
||||
### Credenciales de S3 🦊
|
||||
|
||||
Para conectarse a un bucket de Aws S3, obviamente debe proporcionar algunas credenciales.
|
||||
Básicamente, hay tres formas de lograr esto.
|
||||
Entonces, estas son las formas en que puede proporcionar las credenciales para s3:
|
||||
|
||||
1. Authentication form:
|
||||
1. Puede proporcionar la `access_key` (debería ser obligatoria), la `secret_access_kedy` (debería ser obligatoria), el `security_token` y el `session_token`
|
||||
2. Si guarda la conexión s3 como marcador, estas credenciales se guardarán como una cadena AES-256 / BASE64 cifrada en su archivo de marcadores (excepto el token de seguridad y el token de sesión, que deben ser credenciales temporales).
|
||||
2. Use su archivo de credenciales: simplemente configure la cli de AWS a través de `aws configure` y sus credenciales ya deberían estar ubicadas en`~/.aws/credentials`. En caso de que esté usando un perfil diferente al "predeterminado", simplemente proporciónelo en el campo de perfil en el formulario de autenticación.
|
||||
3. **Variables de entorno**: siempre puede proporcionar sus credenciales como variables de entorno. Tenga en cuenta que estas credenciales **siempre anularán** las credenciales ubicadas en el archivo `credentials`. Vea cómo configurar el entorno a continuación:
|
||||
|
||||
Estos siempre deben ser obligatorios:
|
||||
|
||||
- `AWS_ACCESS_KEY_ID`: aws access key ID (generalmente comienza con `AKIA...`)
|
||||
- `AWS_SECRET_ACCESS_KEY`: la secret access key
|
||||
|
||||
En caso de que haya configurado una seguridad más fuerte, *puede* requerir estos también:
|
||||
|
||||
- `AWS_SECURITY_TOKEN`: security token
|
||||
- `AWS_SESSION_TOKEN`: session token
|
||||
|
||||
⚠️ Sus credenciales están seguras: ¡termscp no manipulará estos valores directamente! Sus credenciales son consumidas directamente por la caja **s3**.
|
||||
En caso de que tenga alguna inquietud con respecto a la seguridad, comuníquese con el autor de la biblioteca en [Github](https://github.com/durch/rust-s3) ⚠️
|
||||
|
||||
---
|
||||
|
||||
## Explorador de archivos 📂
|
||||
|
||||
Cuando nos referimos a exploradores de archivos en termscp, nos referimos a los paneles que puede ver después de establecer una conexión con el control remoto.
|
||||
Estos paneles son básicamente 3:
|
||||
|
||||
- Panel del explorador local: se muestra a la izquierda de la pantalla y muestra las entradas del directorio actual para localhost
|
||||
- Panel del explorador remoto: se muestra a la derecha de la pantalla y muestra las entradas del directorio actual para el host remoto.
|
||||
- Panel de resultados de búsqueda: dependiendo de dónde esté buscando archivos (local / remoto), reemplazará el panel local o del explorador. Este panel muestra las entradas que coinciden con la consulta de búsqueda que realizó.
|
||||
|
||||
Para cambiar de panel, debe escribir `<LEFT>` para mover el panel del explorador remoto y `<RIGHT>` para volver al panel del explorador local. Siempre que se encuentre en el panel de resultados de búsqueda, debe presionar `<ESC>` para salir del panel y volver al panel anterior.
|
||||
|
||||
### Keybindings ⌨
|
||||
|
||||
| Key | Command | Reminder |
|
||||
|---------------|----------------------------------------------------------------------------|-------------|
|
||||
| `<ESC>` | Desconecte; volver a la página de autenticación | |
|
||||
| `<BACKSPACE>` | Ir al directorio anterior en la pila | |
|
||||
| `<TAB>` | Cambiar pestaña del explorador | |
|
||||
| `<RIGHT>` | Mover a la pestaña del explorador remoto | |
|
||||
| `<LEFT>` | Mover a la pestaña del explorador local | |
|
||||
| `<UP>` | Subir en la lista seleccionada | |
|
||||
| `<DOWN>` | Bajar en la lista seleccionada | |
|
||||
| `<PGUP>` | Subir 8 filas en la lista seleccionada | |
|
||||
| `<PGDOWN>` | Bajar 8 filas en la lista seleccionada | |
|
||||
| `<ENTER>` | Entrar directorio | |
|
||||
| `<SPACE>` | Cargar / descargar el archivo seleccionado | |
|
||||
| `<BACKTAB>` | Cambiar entre la pestaña de registro y el explorador | |
|
||||
| `<A>` | Alternar archivos ocultos | All |
|
||||
| `<B>` | Ordenar archivos por | Bubblesort? |
|
||||
| `<C|F5>` | Copiar archivo / directorio | Copy |
|
||||
| `<D|F7>` | Hacer directorio | Directory |
|
||||
| `<E|F8|DEL>` | Eliminar archivo | Erase |
|
||||
| `<F>` | Búsqueda de archivos | Find |
|
||||
| `<G>` | Ir a la ruta proporcionada | Go to |
|
||||
| `<H|F1>` | Mostrar ayuda | Help |
|
||||
| `<I>` | Mostrar información sobre el archivo | Info |
|
||||
| `<K>` | Crear un enlace simbólico que apunte a la entrada seleccionada actualmente | symlinK |
|
||||
| `<L>` | Recargar contenido del directorio / Borrar selección | List |
|
||||
| `<M>` | Seleccione un archivo | Mark |
|
||||
| `<N>` | Crear un nuevo archivo con el nombre proporcionado | New |
|
||||
| `<O|F4>` | Editar archivo | Open |
|
||||
| `<P>` | Open log panel | Panel |
|
||||
| `<Q|F10>` | Salir de termscp | Quit |
|
||||
| `<R|F6>` | Renombrar archivo | Rename |
|
||||
| `<S|F2>` | Guardar archivo como... | Save |
|
||||
| `<T>` | Sincronizar los cambios en la ruta seleccionada con el control remoto | Track |
|
||||
| `<U>` | Ir al directorio principal | Upper |
|
||||
| `<V|F3>` | Abrir archivo con el programa predeterminado | View |
|
||||
| `<W>` | Abrir archivo con el programa proporcionado | With |
|
||||
| `<X>` | Ejecutar un comando | eXecute |
|
||||
| `<Y>` | Alternar navegación sincronizada | sYnc |
|
||||
| `<Z>` | Cambiar ppermisos de archivo | |
|
||||
| `</>` | Filtrar archivos (se admite tanto regex como coincidencias con comodines) | |
|
||||
| `<CTRL+A>` | Seleccionar todos los archivos | |
|
||||
| `<ALT+A>` | Deseleccionar todos los archivos | |
|
||||
| `<CTRL+C>` | Abortar el proceso de transferencia de archivos | |
|
||||
| `<CTRL+T>` | Mostrar todas las rutas sincronizadas | Track |
|
||||
|
||||
### Trabajar con múltiples archivos 🥷
|
||||
|
||||
Puedes optar por trabajar con varios archivos, usando estos controles:
|
||||
|
||||
- `<M>`: marcar un archivo para selección
|
||||
- `<CTRL+A>`: seleccionar todos los archivos del directorio actual
|
||||
- `<ALT+A>`: deseleccionar todos los archivos
|
||||
|
||||
Una vez marcado, el archivo será **mostrado con un fondo resaltado** .
|
||||
Cuando se trabaja con una selección, solo los archivos seleccionados serán procesados; el archivo resaltado actual será ignorado.
|
||||
|
||||
También se puede trabajar con múltiples archivos desde el panel de resultados de búsqueda.
|
||||
|
||||
Todas las acciones están disponibles con archivos múltiples, pero algunas funcionan de forma algo distinta. Veamos:
|
||||
|
||||
- *Copiar*: al copiar, se pedirá el nombre de destino. Para varios archivos, es el directorio donde se copiarán.
|
||||
- *Renombrar*: igual que copiar, pero mueve los archivos.
|
||||
- *Guardar como*: igual que copiar, pero escribe los archivos allí.
|
||||
|
||||
Si seleccionas un archivo en un directorio (ej. `/home`) y cambias de directorio, seguirá seleccionado y se mostrará en la **cola de transferencia** en el panel inferior.
|
||||
Cuando se selecciona un archivo, se asocia la carpeta *remota* actual con él; si se transfiere, será a esa carpeta.
|
||||
|
||||
#### Ejemplo
|
||||
|
||||
Si seleccionamos `/home/a.txt` localmente y estamos en `/tmp` en remoto, luego cambiamos a `/var`, seleccionamos `/var/b.txt` y estamos en `/home` en el panel remoto, el resultado de transferir será:
|
||||
|
||||
- `/home/a.txt` transferido a `/tmp/a.txt`
|
||||
- `/var/b.txt` transferido a `/home/b.txt`
|
||||
|
||||
### Navegación sincronizada ⏲️
|
||||
|
||||
Cuando está habilitada, la navegación sincronizada le permitirá sincronizar la navegación entre los dos paneles.
|
||||
Esto significa que siempre que cambie el directorio de trabajo en un panel, la misma acción se reproducirá en el otro panel. Si desea habilitar la navegación sincronizada, simplemente presione `<Y>`; presione dos veces para deshabilitar. Mientras está habilitado, el estado de navegación sincronizada se informará en la barra de estado en "ON".
|
||||
|
||||
### Abierta y abierta con 🚪
|
||||
|
||||
Al abrir archivos con el comando Ver (`<V>`), se utilizará la aplicación predeterminada del sistema para el tipo de archivo. Para hacerlo, se utilizará el servicio del sistema operativo predeterminado, así que asegúrese de tener al menos uno de estos instalado en su sistema:
|
||||
|
||||
- Usuarios **Windows**: no tiene que preocuparse por eso, ya que la caja usará el comando `start`.
|
||||
- Usuarios **MacOS**: tampoco tiene que preocuparse, ya que la caja usará `open`, que ya está instalado en su sistema.
|
||||
- Usuarios **Linux**: uno de estos debe estar instalado
|
||||
- *xdg-open*
|
||||
- *gio*
|
||||
- *gnome-open*
|
||||
- *kde-open*
|
||||
- Usuarios **WSL**: *wslview* es obligatorio, debe instalar [wslu](https://github.com/wslutilities/wslu).
|
||||
|
||||
> Q: ¿Puedo editar archivos remotos usando el comando de vista?
|
||||
> A: No, al menos no directamente desde el "panel remoto". Primero debe descargarlo en un directorio local, eso se debe al hecho de que cuando abre un archivo remoto, el archivo se descarga en un directorio temporal, pero no hay forma de crear un observador para que el archivo verifique cuándo el programa utilizado para abrirlo estaba cerrado, por lo que termscp no puede saber cuándo ha terminado de editar el archivo.
|
||||
|
||||
---
|
||||
|
||||
## Marcadores ⭐
|
||||
|
||||
En termscp es posible guardar hosts favoritos, que luego se pueden cargar rápidamente desde el diseño principal de termscp.
|
||||
termscp también guardará los últimos 16 hosts a los que se conectó.
|
||||
Esta función le permite cargar todos los parámetros necesarios para conectarse a un determinado control remoto, simplemente seleccionando el marcador en la pestaña debajo del formulario de autenticación.
|
||||
|
||||
Los marcadores se guardarán, si es posible, en:
|
||||
|
||||
- `$HOME/.config/termscp/` en Linux/BSD
|
||||
- `$HOME/Library/Application Support/termscp` en MacOs
|
||||
- `FOLDERID_RoamingAppData\termscp\` en Windows
|
||||
|
||||
Solo para marcadores (esto no se aplicará a hosts recientes) también es posible guardar la contraseña utilizada para autenticarse. La contraseña no se guarda de forma predeterminada y debe especificarse a través del indicador al guardar un nuevo marcador.
|
||||
Si le preocupa la seguridad de la contraseña guardada para sus marcadores, lea el [capítulo siguiente 👀](#are-my-passwords-safe-).
|
||||
|
||||
Para crear un nuevo marcador, simplemente siga estos pasos:
|
||||
|
||||
1. Escriba en el formulario de autenticación los parámetros para conectarse a su servidor remoto
|
||||
2. Presionar `<CTRL + S>`
|
||||
3. Escriba el nombre que desea darle al marcador
|
||||
4. Elija si recordar la contraseña o no
|
||||
5. Presionar `<ENTER>`
|
||||
|
||||
siempre que desee utilizar la conexión previamente guardada, simplemente presione `<TAB>` para navegar a la lista de marcadores y cargue los parámetros del marcador en el formulario presionando `<ENTER>`.
|
||||
|
||||

|
||||
|
||||
### ¿Son seguras mis contraseñas? 😈
|
||||
|
||||
Seguro 😉.
|
||||
Como se dijo antes, los marcadores se guardan en su directorio de configuración junto con las contraseñas. Las contraseñas obviamente no son texto sin formato, están encriptadas con **AES-128**. ¿Esto los hace seguros? ¡Absolutamente! (excepto para usuarios de BSD y WSL 😢)
|
||||
|
||||
En **Windows**, **Linux** y **MacOS**, la clave utilizada para cifrar las contraseñas se almacena, si es posible (pero debería estar), respectivamente, en *Windows Vault*, en el *anillo de claves del sistema* y en el *Llavero*. Esto es realmente muy seguro y lo administra directamente su sistema operativo.
|
||||
|
||||
❗ Por favor, tenga en cuenta que si es un usuario de Linux, es mejor que lea el [capítulo siguiente 👀](#linux-keyring), ¡porque es posible que el llavero no esté habilitado o no sea compatible con su sistema!
|
||||
|
||||
En *BSD* y *WSL*, por otro lado, la clave utilizada para cifrar sus contraseñas se almacena en su disco (en `$HOME/.config/ termscp`). Entonces, todavía es posible recuperar la clave para descifrar las contraseñas. Afortunadamente, la ubicación de la clave garantiza que su clave no pueda ser leída por usuarios diferentes al suyo, pero sí, todavía no guardaría la contraseña para un servidor expuesto en Internet 😉.
|
||||
|
||||
#### Linux Keyring
|
||||
|
||||
A todos nos encanta Linux gracias a la libertad que ofrece a los usuarios. Básicamente, puede hacer lo que quiera como usuario de Linux, pero esto también tiene algunas desventajas, como el hecho de que a menudo no hay aplicaciones estándar en las diferentes distribuciones. Y esto también implica el llavero.
|
||||
Esto significa que en Linux puede que no haya un llavero instalado en su sistema. Desafortunadamente, la biblioteca que usamos para trabajar con el almacenamiento de claves requiere un servicio que exponga `org.freedesktop.secrets` en D-BUS y el peor hecho es que solo hay dos servicios que lo exponen.
|
||||
|
||||
- ❗ Si usa GNOME como entorno de escritorio (por ejemplo, usuarios de ubuntu), ya debería estar bien, ya que `gnome-keyring` ya proporciona el llavero y todo debería estar funcionando.
|
||||
- ❗ Para otros usuarios de entornos de escritorio, hay un buen programa que pueden usar para obtener un llavero que es [KeepassXC](https://keepassxc.org/), que utilizo en mi instalación de Manjaro (con KDE) y funciona bien. El único problema es que debe configurarlo para que se use junto con termscp (pero es bastante simple). Para comenzar con KeepassXC, lea más [aquí](#keepassxc-setup-por-termscp).
|
||||
- ❗ ¿Qué pasa si no desea instalar ninguno de estos servicios? Bueno, ¡no hay problema! **termscp seguirá funcionando como de costumbre**, pero guardará la clave en un archivo, como suele hacer para BSD y WSL.
|
||||
|
||||
##### KeepassXC setup por termscp
|
||||
|
||||
Siga estos pasos para configurar keepassXC para termscp:
|
||||
|
||||
1. Instalar KeepassXC
|
||||
2. Vaya a "tools" > "settings" en la barra de herramientas
|
||||
3. Seleccione "Secret service integration" y abilita "Enable KeepassXC freedesktop.org secret service integration"
|
||||
4. Cree una base de datos, si aún no tiene una: desde la barra de herramientas "Database" > "New database"
|
||||
5. Desde la barra de herramientas: "Database" > "Database settings"
|
||||
6. Seleccione "Secret service integration" y abilita "Expose entries under this group"
|
||||
7. Seleccione el grupo de la lista donde desea que se mantenga el secreto de termscp. Recuerde que este grupo puede ser utilizado por cualquier otra aplicación para almacenar secretos a través de DBUS.
|
||||
|
||||
---
|
||||
|
||||
## Configuración ⚙️
|
||||
|
||||
termscp admite algunos parámetros definidos por el usuario, que se pueden definir en la configuración.
|
||||
Underhood termscp tiene un archivo TOML y algunos otros directorios donde se guardarán todos los parámetros, pero no se preocupe, no tocará ninguno de estos archivos manualmente, ya que hice posible configurar termscp desde su interfaz de usuario por completo.
|
||||
|
||||
termscp, al igual que para los marcadores, solo requiere tener estas rutas accesibles:
|
||||
|
||||
- `$HOME/.config/termscp/` en Linux/BSD
|
||||
- `$HOME/Library/Application Support/termscp` en MacOs
|
||||
- `FOLDERID_RoamingAppData\termscp\` en Windows
|
||||
|
||||
Para acceder a la configuración, solo tiene que presionar `<CTRL + C>` desde el inicio de termscp.
|
||||
|
||||
Estos parámetros se pueden cambiar:
|
||||
|
||||
- **Text Editor**: l editor de texto a utilizar. Por defecto, termscp encontrará el editor predeterminado para usted; con esta opción puede forzar el uso de un editor (por ejemplo, `vim`). **También se admiten los editores de GUI**, a menos que hagan "nohup" del proceso principal.
|
||||
- **Default Protocol**: el protocolo predeterminado es el valor predeterminado para el protocolo de transferencia de archivos que se utilizará en termscp. Esto se aplica a la página de inicio de sesión y al argumento de la CLI de la dirección.
|
||||
- **Show Hidden Files**: seleccione si los archivos ocultos se mostrarán de forma predeterminada. Podrás decidir si mostrar o no archivos ocultos en tiempo de ejecución presionando "A" de todos modos.
|
||||
- **Check for updates**: si se establece en `yes`, termscp buscará la API de Github para comprobar si hay una nueva versión de termscp disponible.
|
||||
- **Prompt when replacing existing files?**: Si se establece en "sí", termscp le pedirá confirmación cada vez que una transferencia de archivo provoque la sustitución de un archivo existente en el host de destino.
|
||||
- **Group Dirs**: seleccione si los directorios deben agruparse o no en los exploradores de archivos. Si se selecciona `Display first`, los directorios se ordenarán usando el método configurado pero se mostrarán antes de los archivos, y viceversa si se selecciona`Display last`.
|
||||
- **Remote File formatter syntax**: sintaxis para mostrar información de archivo para cada archivo en el explorador remoto. Consulte [Formato del explorador de archivos](#formato-del-explorador-de-archivos).
|
||||
- **Local File formatter syntax**: sintaxis para mostrar información de archivo para cada archivo en el explorador local. Consulte [Formato del explorador de archivos](#formato-del-explorador-de-archivos).
|
||||
- **Enable notifications?**: Si se establece en "Sí", se mostrarán las notificaciones.
|
||||
- **Notifications: minimum transfer size**: si el tamaño de la transferencia es mayor o igual que el valor especificado, se mostrarán notificaciones de transferencia. Los valores aceptados están en formato `{UNSIGNED} B/KB/MB/GB/TB/PB`
|
||||
- **SSH configuration path**: Configure el archivo de configuración SSH para usar al conectarse a un servidor SCP / SFTP. Si no se configura (está vacío), no se utilizará ningún archivo. Puede especificar una ruta que comience con `~` para indicar la ruta de inicio (por ejemplo, `~/.ssh/config`). Se especifican los parámetros soportados [AQUI](https://github.com/veeso/ssh2-config#exposed-attributes).
|
||||
|
||||
### SSH Key Storage 🔐
|
||||
|
||||
Junto con la configuración, termscp también proporciona una característica **esencial** para **clientes SFTP / SCP**: el almacenamiento de claves SSH.
|
||||
|
||||
Puede acceder al almacenamiento de claves SSH, desde la configuración pasando a la pestaña `Claves SSH`, una vez allí puede:
|
||||
|
||||
- **Agregar una nueva clave**: simplemente presione `<CTRL + N>` y se le pedirá que cree una nueva clave. Proporcione el nombre de host / dirección IP y el nombre de usuario asociado a la clave y finalmente se abrirá un editor de texto: pegue la clave ssh **PRIVATE** en el editor de texto, guarde y salga.
|
||||
- **Eliminar una clave existente**: simplemente presione `<DEL>` o `<CTRL + E>` en la clave que desea eliminar, para eliminar persistentemente la clave de termscp.
|
||||
- **Editar una clave existente**: simplemente presione `<ENTER>` en la clave que desea editar, para cambiar la clave privada.
|
||||
|
||||
> Q: Mi clave privada está protegida con contraseña, ¿puedo usarla?
|
||||
> A: Por supuesto que puede. La contraseña proporcionada para la autenticación en termscp es válida tanto para la autenticación de nombre de usuario / contraseña como para la autenticación de clave RSA.
|
||||
|
||||
### Formato del explorador de archivos
|
||||
|
||||
Es posible a través de la configuración definir un formato personalizado para el explorador de archivos. Esto es posible tanto para el host local como para el remoto, por lo que puede tener dos sintaxis diferentes en uso. Estos campos, con el nombre `File formatter syntax (local)` y `File formatter syntax (remote)` definirán cómo se mostrarán las entradas del archivo en el explorador de archivos.
|
||||
La sintaxis del formateador es la siguiente `{KEY1} ... {KEY2:LENGTH} ... {KEY3:LENGTH:EXTRA} {KEYn} ...`.
|
||||
Cada clave entre corchetes se reemplazará con el atributo relacionado, mientras que todo lo que esté fuera de los corchetes se dejará sin cambios.
|
||||
|
||||
- El nombre de la clave es obligatorio y debe ser una de las claves siguientes
|
||||
- La longitud describe la longitud reservada para mostrar el campo. Los atributos estáticos no admiten esto (GROUP, PEX, SIZE, USER)
|
||||
- Extra es compatible solo con algunos parámetros y es una opción adicional. Consulte las claves para comprobar si se admite extra.
|
||||
|
||||
Estas son las claves admitidas por el formateador:
|
||||
|
||||
- `ATIME`: Hora del último acceso (con la sintaxis predeterminada`%b %d %Y %H:%M`); Se puede proporcionar un extra como la sintaxis de tiempo (por ejemplo, "{ATIME: 8:% H:% M}")
|
||||
- `CTIME`: Hora de creación (con sintaxis`%b %d %Y %H:%M`); Se puede proporcionar un extra como sintaxis de tiempo (p. Ej., `{CTIME:8:%H:%M}`)
|
||||
- `GROUP`: Grupo propietario
|
||||
- `MTIME`: Hora del último cambio (con sintaxis`%b %d %Y %H:%M`); Se puede proporcionar extra como sintaxis de tiempo (p. Ej., `{MTIME: 8:% H:% M}`)
|
||||
- `NAME`: nombre de archivo (Las carpetas entre la raíz y los primeros antepasados se eliminan si es más largo que LENGTH)
|
||||
- `PATH`: Percorso completo de archivo (Las carpetas entre la raíz y los primeros antepasados se eliminan si es màs largo que LENGHT)
|
||||
- `PEX`: permisos de archivo (formato UNIX)
|
||||
- `SIZE`: Tamaño del archivo (se omite para directorios)
|
||||
- `SYMLINK`: Symlink (si existe` -> {FILE_PATH} `)
|
||||
- `USER`: Usuario propietario
|
||||
|
||||
Si se deja vacío, se utilizará la sintaxis del formateador predeterminada: `{NAME:24} {PEX} {USER} {SIZE} {MTIME:17:%b %d %Y %H:%M}`
|
||||
|
||||
---
|
||||
|
||||
## Temas 🎨
|
||||
|
||||
Termscp le ofrece una característica asombrosa: la posibilidad de configurar los colores para varios componentes de la aplicación.
|
||||
Si desea personalizar termscp, hay dos formas disponibles de hacerlo:
|
||||
|
||||
- Desde el **menú de configuración**
|
||||
- Importando un **archivo de tema**
|
||||
|
||||
Para crear su propia personalización desde termscp, todo lo que tiene que hacer es ingresar a la configuración desde la actividad de autenticación, presionando `<CTRL + C>` y luego `<TAB>` dos veces. Deberías haberte movido ahora al panel de `temas`.
|
||||
|
||||
Aquí puede moverse con `<UP>` y `<DOWN>` para cambiar el estilo que desea cambiar, como se muestra en el siguiente gif:
|
||||
|
||||

|
||||
|
||||
termscp admite la sintaxis tradicional hexadecimal explícita (`#rrggbb`) y rgb `rgb(r, g, b)` para proporcionar colores, pero se aceptan también **[colores css](https://www.w3schools.com/cssref/css_colors.asp)** (como `crimson`) 😉. También hay un teclado especial que es `Default`. Predeterminado significa que el color utilizado será el color de primer plano o de fondo predeterminado según la situación (primer plano para textos y líneas, fondo para bien, adivinen qué).
|
||||
|
||||
Como se dijo antes, también puede importar archivos de temas. Puede inspirarse o utilizar directamente uno de los temas proporcionados junto con termscp, ubicado en el directorio `themes/` de este repositorio e importarlos ejecutando termscp como `termscp -t <theme_file>`. Si todo estuvo bien, debería decirle que el tema se ha importado correctamente.
|
||||
|
||||
### Mi tema no se carga 😱
|
||||
|
||||
Esto probablemente se deba a una actualización reciente que ha roto el tema. Siempre que agrego una nueva clave a los temas, el tema guardado no se carga. Para solucionar este problema, existen dos soluciones realmente rápidas:
|
||||
|
||||
1. Recargar tema: cada vez que publique una actualización, también parchearé los temas "oficiales", por lo que solo tiene que descargarlo del repositorio nuevamente y volver a importar el tema a través de la opción `-t`
|
||||
|
||||
```sh
|
||||
termscp -t <theme.toml>
|
||||
```
|
||||
|
||||
2. Corrija su tema: si está utilizando un tema personalizado, puede editarlo a través de `vim` y agregar la clave que falta. El tema se encuentra en `$CONFIG_DIR/termscp/theme.toml` donde `$CONFIG_DIR` es:
|
||||
|
||||
- FreeBSD/GNU-Linux: `$HOME/.config/`
|
||||
- MacOs: `$HOME/Library/Application Support`
|
||||
- Windows: `%appdata%`
|
||||
|
||||
❗ Las claves que faltan se informan en el CAMBIO en `BREAKING CHANGES` para la versión que acaba de instalar.
|
||||
|
||||
### Estilos 💈
|
||||
|
||||
Puede encontrar en la tabla siguiente la descripción de cada campo de estilo.
|
||||
Tenga en cuenta que **los estilos no se aplicarán a la página de configuración**, para que sea siempre accesible en caso de que lo estropee todo
|
||||
|
||||
#### Authentication page
|
||||
|
||||
| Key | Description |
|
||||
|----------------|------------------------------------------|
|
||||
| auth_address | Color of the input field for IP address |
|
||||
| auth_bookmarks | Color of the bookmarks panel |
|
||||
| auth_password | Color of the input field for password |
|
||||
| auth_port | Color of the input field for port number |
|
||||
| auth_protocol | Color of the radio group for protocol |
|
||||
| auth_recents | Color of the recents panel |
|
||||
| auth_username | Color of the input field for username |
|
||||
|
||||
#### Transfer page
|
||||
|
||||
| Key | Description |
|
||||
|--------------------------------------|---------------------------------------------------------------------------|
|
||||
| transfer_local_explorer_background | Background color of localhost explorer |
|
||||
| transfer_local_explorer_foreground | Foreground coloor of localhost explorer |
|
||||
| transfer_local_explorer_highlighted | Border and highlighted color for localhost explorer |
|
||||
| transfer_remote_explorer_background | Background color of remote explorer |
|
||||
| transfer_remote_explorer_foreground | Foreground coloor of remote explorer |
|
||||
| transfer_remote_explorer_highlighted | Border and highlighted color for remote explorer |
|
||||
| transfer_log_background | Background color for log panel |
|
||||
| transfer_log_window | Window color for log panel |
|
||||
| transfer_progress_bar_partial | Partial progress bar color |
|
||||
| transfer_progress_bar_total | Total progress bar color |
|
||||
| transfer_status_hidden | Color for status bar "hidden" label |
|
||||
| transfer_status_sorting | Color for status bar "sorting" label; applies also to file sorting dialog |
|
||||
| transfer_status_sync_browsing | Color for status bar "sync browsing" label |
|
||||
|
||||
#### Misc
|
||||
|
||||
These styles applie to different part of the application.
|
||||
|
||||
| Key | Description |
|
||||
|-------------------|---------------------------------------------|
|
||||
| misc_error_dialog | Color for error messages |
|
||||
| misc_info_dialog | Color for info dialogs |
|
||||
| misc_input_dialog | Color for input dialogs (such as copy file) |
|
||||
| misc_keys | Color of text for key strokes |
|
||||
| misc_quit_dialog | Color for quit dialogs |
|
||||
| misc_save_dialog | Color for save dialogs |
|
||||
| misc_warn_dialog | Color for warn dialogs |
|
||||
|
||||
---
|
||||
|
||||
## Text Editor ✏
|
||||
|
||||
termscp tiene, como habrás notado, muchas características, una de ellas es la posibilidad de ver y editar archivos de texto. No importa si el archivo está ubicado en el host local o en el host remoto, termscp brinda la posibilidad de abrir un archivo en su editor de texto favorito.
|
||||
En caso de que el archivo esté ubicado en un host remoto, el archivo se descargará primero en su directorio de archivos temporales y luego, **solo** si se realizaron cambios en el archivo, se volverá a cargar en el host remoto. termscp comprueba si realizó cambios en el archivo verificando la última hora de modificación del archivo.
|
||||
|
||||
> ❗ Just a reminder: **you can edit only textual file**; binary files are not supported.
|
||||
|
||||
---
|
||||
|
||||
## Logging 🩺
|
||||
|
||||
termscp escribe un archivo de registro para cada sesión, que se escribe en
|
||||
|
||||
- `$HOME/.cache/termscp/termscp.log` en Linux/BSD
|
||||
- `$HOME/Library/Caches/termscp/termscp.log` en MacOs
|
||||
- `FOLDERID_LocalAppData\termscp\termscp.log` en Windows
|
||||
|
||||
el registro no se rotará, sino que se truncará después de cada lanzamiento de termscp, por lo que si desea informar un problema y desea adjuntar su archivo de registro, recuerde guardar el archivo de registro en un lugar seguro antes de usar termscp de nuevo.
|
||||
El registro por defecto informa en el nivel *INFO*, por lo que no es muy detallado.
|
||||
|
||||
Si desea enviar un problema, por favor, si puede, reproduzca el problema con el nivel establecido en "TRACE", para hacerlo, inicie termscp con
|
||||
la opción CLI `-D`.
|
||||
|
||||
Sé que es posible que tenga algunas preguntas sobre los archivos de registro, así que hice una especie de Q/A:
|
||||
|
||||
> No quiero el registro, ¿puedo apagarlo?
|
||||
|
||||
Sí tu puedes. Simplemente inicie termscp con la opción `-q o --quiet`. Puede alias termscp para que sea persistente. Recuerde que el registro se usa para diagnosticar problemas, por lo que, dado que detrás de cada proyecto de código abierto, siempre debe haber este tipo de ayuda mutua, mantener los archivos de registro puede ser su forma de respaldar el proyecto 😉.
|
||||
|
||||
> ¿Es seguro el registro?
|
||||
|
||||
Si le preocupa la seguridad, el archivo de registro no contiene ninguna contraseña simple, así que no se preocupe y expone la misma información que informa el archivo hermano `marcadores`.
|
||||
|
||||
## Notificaciones 📫
|
||||
|
||||
Termscp enviará notificaciones de escritorio para este tipo de eventos:
|
||||
|
||||
- en **Transferencia completada**: la notificación se enviará una vez que la transferencia se haya completado con éxito.
|
||||
- ❗ La notificación se mostrará solo si el tamaño total de la transferencia es al menos el `Notifications: minimum transfer size` especificado en la configuración.
|
||||
- en **Transferencia fallida**: la notificación se enviará una vez que la transferencia haya fallado debido a un error.
|
||||
- ❗ La notificación se mostrará solo si el tamaño total de la transferencia es al menos el `Notifications: minimum transfer size` especificado en la configuración.
|
||||
- en **Actualización disponible**: siempre que haya una nueva versión de termscp disponible, se mostrará una notificación.
|
||||
- en **Actualización instalada**: siempre que se haya instalado una nueva versión de termscp, se mostrará una notificación.
|
||||
- en **Actualización fallida**: siempre que falle la instalación de la actualización, se mostrará una notificación.
|
||||
|
||||
❗ Si prefiere mantener las notificaciones desactivadas, puede simplemente ingresar a la configuración y configurar `Enable notifications?` En `No` 😉.
|
||||
❗ Si desea cambiar el tamaño mínimo de transferencia para mostrar notificaciones, puede cambiar el valor en la configuración con la tecla `Notifications: minimum transfer size` y configurarlo como mejor le convenga 🙂.
|
||||
|
||||
## Observador de archivos 🔭
|
||||
|
||||
El observador de archivos le permite configurar una lista de rutas para sincronizar con los hosts remotos.
|
||||
Esto significa que siempre que se detecte un cambio en el sistema de archivos local en la ruta sincronizada, el cambio se informará automáticamente a la ruta del host remoto configurado, dentro de los 5 segundos.
|
||||
|
||||
Puede establecer tantas rutas para sincronizar como prefiera:
|
||||
|
||||
1. Coloque el cursor en el explorador local en el directorio/archivo que desea mantener sincronizado
|
||||
2. Vaya al directorio en el que desea que se informen los cambios en el host remoto
|
||||
3. Presione `<T>`
|
||||
4. Responda `<YES>` a la ventana emergente de radio
|
||||
|
||||
Para dejar de mirar, simplemente presione `<T>` en la ruta sincronizada local (o en cualquiera de sus subcarpetas)
|
||||
O simplemente puede presionar `<CTRL + T>` y presionar `<ENTER>` en la ruta sincronizada que desea dejar de ver.
|
||||
|
||||
Estos cambios se informarán al host remoto:
|
||||
|
||||
- Nuevos archivos, cambios de archivos
|
||||
- Archivo movido / renombrado
|
||||
- Archivo eliminado/desvinculado
|
||||
|
||||
> ❗ El vigilante trabaja solo en una dirección (local > remota). NO es posible sincronizar automáticamente los cambios de remoto a local.
|
||||
301
docs/fr/README.md
Normal file
@@ -0,0 +1,301 @@
|
||||
# termscp
|
||||
|
||||
<p align="center">
|
||||
<img src="/assets/images/termscp.svg" alt="logo" width="256" height="256" />
|
||||
</p>
|
||||
|
||||
<p align="center">~ Un file transfer de terminal riche en fonctionnalités ~</p>
|
||||
<p align="center">
|
||||
<a href="https://termscp.veeso.dev" target="_blank">Site internet</a>
|
||||
·
|
||||
<a href="https://termscp.veeso.dev/#get-started" target="_blank">Installation</a>
|
||||
·
|
||||
<a href="https://termscp.veeso.dev/#user-manual" target="_blank">Manuel de l'Utilisateur</a>
|
||||
</p>
|
||||
|
||||
<p align="center">
|
||||
<a href="https://github.com/veeso/termscp"
|
||||
><img
|
||||
height="20"
|
||||
src="/assets/images/flags/gb.png"
|
||||
alt="English"
|
||||
/></a>
|
||||
|
||||
<a
|
||||
href="https://github.com/veeso/termscp/blob/main/docs/pt-BR/README.md"
|
||||
><img
|
||||
height="20"
|
||||
src="/assets/images/flags/br.png"
|
||||
alt="Brazilian Portuguese"
|
||||
/></a>
|
||||
|
||||
<a
|
||||
href="/docs/de/README.md"
|
||||
><img
|
||||
height="20"
|
||||
src="/assets/images/flags/de.png"
|
||||
alt="Deutsch"
|
||||
/></a>
|
||||
|
||||
<a
|
||||
href="/docs/es/README.md"
|
||||
><img
|
||||
height="20"
|
||||
src="/assets/images/flags/es.png"
|
||||
alt="Español"
|
||||
/></a>
|
||||
|
||||
<a
|
||||
href="/docs/fr/README.md"
|
||||
><img
|
||||
height="20"
|
||||
src="/assets/images/flags/fr.png"
|
||||
alt="Français"
|
||||
/></a>
|
||||
|
||||
<a
|
||||
href="/docs/it/README.md"
|
||||
><img
|
||||
height="20"
|
||||
src="/assets/images/flags/it.png"
|
||||
alt="Italiano"
|
||||
/></a>
|
||||
|
||||
<a
|
||||
href="/docs/zh-CN/README.md"
|
||||
><img
|
||||
height="20"
|
||||
src="/assets/images/flags/cn.png"
|
||||
alt="简体中文"
|
||||
/></a>
|
||||
</p>
|
||||
|
||||
<p align="center">Développé par <a href="https://veeso.me/" target="_blank">@veeso</a></p>
|
||||
<p align="center">Version actuelle: 0.17.0 24/03/2025</p>
|
||||
|
||||
<p align="center">
|
||||
<a href="https://opensource.org/licenses/MIT"
|
||||
><img
|
||||
src="https://img.shields.io/badge/License-MIT-teal.svg"
|
||||
alt="License-MIT"
|
||||
/></a>
|
||||
<a href="https://github.com/veeso/termscp/stargazers"
|
||||
><img
|
||||
src="https://img.shields.io/github/stars/veeso/termscp.svg"
|
||||
alt="Repo stars"
|
||||
/></a>
|
||||
<a href="https://crates.io/crates/termscp"
|
||||
><img
|
||||
src="https://img.shields.io/crates/d/termscp.svg"
|
||||
alt="Downloads counter"
|
||||
/></a>
|
||||
<a href="https://crates.io/crates/termscp"
|
||||
><img
|
||||
src="https://img.shields.io/crates/v/termscp.svg"
|
||||
alt="Latest version"
|
||||
/></a>
|
||||
<a href="https://ko-fi.com/veeso">
|
||||
<img
|
||||
src="https://img.shields.io/badge/donate-ko--fi-red"
|
||||
alt="Ko-fi"
|
||||
/></a>
|
||||
</p>
|
||||
<p align="center">
|
||||
<a href="https://github.com/veeso/termscp/actions"
|
||||
><img
|
||||
src="https://github.com/veeso/termscp/workflows/Linux/badge.svg"
|
||||
alt="Linux CI"
|
||||
/></a>
|
||||
<a href="https://github.com/veeso/termscp/actions"
|
||||
><img
|
||||
src="https://github.com/veeso/termscp/workflows/MacOS/badge.svg"
|
||||
alt="MacOS CI"
|
||||
/></a>
|
||||
<a href="https://github.com/veeso/termscp/actions"
|
||||
><img
|
||||
src="https://github.com/veeso/termscp/workflows/Windows/badge.svg"
|
||||
alt="Windows CI"
|
||||
/></a>
|
||||
<a href="https://github.com/veeso/termscp/actions"
|
||||
><img
|
||||
src="https://github.com/veeso/termscp/workflows/FreeBSD/badge.svg"
|
||||
alt="FreeBSD CI"
|
||||
/></a>
|
||||
<a href="https://coveralls.io/github/veeso/termscp"
|
||||
><img
|
||||
src="https://coveralls.io/repos/github/veeso/termscp/badge.svg"
|
||||
alt="Coveralls"
|
||||
/></a>
|
||||
</p>
|
||||
|
||||
---
|
||||
|
||||
## À propos des termscp 🖥
|
||||
|
||||
Termscp est un file transfer et explorateur de fichiers de terminal riche en fonctionnalités, avec support pour SCP/SFTP/FTP/Kube/S3/WebDAV. Essentiellement c'est une utilitaire terminal avec une TUI pour se connecter à un serveur distant pour télécharger de fichiers et interagir avec le système de fichiers local. Il est compatible avec **Linux**, **MacOS**, **FreeBSD** et **Windows**.
|
||||
|
||||

|
||||
|
||||
---
|
||||
|
||||
## Fonctionnalités 🎁
|
||||
|
||||
- 📁 Différents protocoles de communication
|
||||
- **SFTP**
|
||||
- **SCP**
|
||||
- **FTP** et **FTPS**
|
||||
- **Kube**
|
||||
- **S3**
|
||||
- **SMB**
|
||||
- **WebDAV**
|
||||
- 🖥 Explorer et opérer sur le système de fichiers distant et local avec une interface utilisateur pratique.
|
||||
- Créer, supprimer, renommer, rechercher, afficher et modifier des fichiers
|
||||
- ⭐ Connectez-vous à vos hôtes préférés via des signets et des connexions récentes.
|
||||
- 📝 Affichez et modifiez des fichiers avec vos applications préférées
|
||||
- 💁 Authentication SFTP/SCP avec des clés SSH et nom/mot de passe
|
||||
- 🐧 Compatible avec Windows, Linux, FreeBSD et MacOS
|
||||
- 🎨 Faites en vôtre !
|
||||
- thèmes
|
||||
- format d'explorateur de fichiers personnalisé
|
||||
- éditeur de texte personnalisable
|
||||
- tri de fichiers personallisable
|
||||
- et bien d'autres paramètres...
|
||||
- 📫 Recevez une notification quande un gros fichier est télécharger.
|
||||
- 🔭 Gardez les modifications de fichiers synchronisées avec l'hôte distant
|
||||
- 🔐 Enregistre tes mots de passe dans le key vault du systeme.
|
||||
- 🦀 Rust-powered
|
||||
- 👀 Développé en gardant un œil sur les performances
|
||||
- 🦄 Mises à jour fréquentes
|
||||
|
||||
---
|
||||
|
||||
## Pour commencer 🚀
|
||||
|
||||
Si tu envisage d'installer termscp, je veux te remercier 💜 ! J'espère que tu vas apprécier termscp !
|
||||
Si tu veux contribuer à ce projet, n'oublié pas de consulter notre [guide de contribution](../../CONTRIBUTING.md).
|
||||
|
||||
Si tu es un utilisateur Linux, FreeBSD ou MacOS ce simple shell script installera termscp sur te système en un seule commande:
|
||||
|
||||
```sh
|
||||
curl -sSLf http://get-termscp.veeso.dev | sh
|
||||
```
|
||||
|
||||
tandis que si tu es un utilisateur Windows, tu peux installer termscp avec [Chocolatey](https://chocolatey.org/):
|
||||
|
||||
```sh
|
||||
choco install termscp
|
||||
```
|
||||
|
||||
Pour plus d'informations sur les autres méthodes d'installation, veuillez visiter [termscp.veeso.dev](https://termscp.veeso.dev/termscp/#get-started).
|
||||
|
||||
⚠️ Si tu cherche comme de mettre à jour termscp, tu dois exécuter cette commande dans le terminal: `(sudo) termscp --update` ⚠️
|
||||
|
||||
### Requis ❗
|
||||
|
||||
- **Linux** users:
|
||||
- libdbus-1
|
||||
- pkg-config
|
||||
- libsmbclient
|
||||
- **FreeBSD** or, **NetBSD** users:
|
||||
- dbus
|
||||
- pkgconf
|
||||
- libsmbclient
|
||||
|
||||
### Requis facultatives ✔️
|
||||
|
||||
Ces requis ne sont pas obligatoires d'exécuter termscp, mais seulement à toutes ses fonctionnalités
|
||||
|
||||
- utilisateurs **Linux/FreeBSD**:
|
||||
- Pour **ouvrir** les fichiers via `V` (au moins un de ces)
|
||||
- *xdg-open*
|
||||
- *gio*
|
||||
- *gnome-open*
|
||||
- *kde-open*
|
||||
- utilisateurs **Linux**:
|
||||
- Un keyring manager: lire plus dans le [manuel d'utilisateur](man.md#linux-keyring)
|
||||
- utilisateurs **WSL**
|
||||
- Pour **ouvrir** les fichiers via `V` (au moins un de ces)
|
||||
- [wslu](https://github.com/wslutilities/wslu)
|
||||
|
||||
---
|
||||
|
||||
## Me soutenir ☕
|
||||
|
||||
Si tu aime termscp et que tu aimerais voir le projet grandir et s'améliorer, voudrais considérer un petit don pour me soutenir
|
||||
|
||||
Tu peux faire un don avec l'une de ces plateformes:
|
||||
|
||||
[](https://ko-fi.com/veeso)
|
||||
[](https://www.paypal.me/chrisintin)
|
||||
|
||||
---
|
||||
|
||||
## Manuel d'utilisateur et Documentation 📚
|
||||
|
||||
Le manuel d'utilisateur peut être trouvé sur le [site de termscp](https://termscp.veeso.dev/termscp/#user-manual) ou sur [Github](man.md).
|
||||
|
||||
La documentation peut être trouvé sur Rust Docs <https://docs.rs/termscp>
|
||||
|
||||
---
|
||||
|
||||
## Contribution et enjeux 🤝🏻
|
||||
|
||||
Les contributions, les rapports de bugs, les nouvelles fonctionnalités et les questions sont les bienvenus ! 😉
|
||||
Si tu ai des questions ou des préoccupations, ou si tu souhaite suggérer une nouvelle fonctionnalité, ou si tu souhaite simplement améliorer les conditions de termscp, n'hésite pas à ouvrir un problème ou un PR.
|
||||
|
||||
Veuillez suivre [nos directives de contribution](../../CONTRIBUTING.md)
|
||||
|
||||
---
|
||||
|
||||
## Journal des modifications ⏳
|
||||
|
||||
Afficher le journal des modifications [ICI](../../CHANGELOG.md)
|
||||
|
||||
---
|
||||
|
||||
## Powered by 💪
|
||||
|
||||
termscp est soutenu par ces projets impressionnants:
|
||||
|
||||
- [bytesize](https://github.com/hyunsik/bytesize)
|
||||
- [crossterm](https://github.com/crossterm-rs/crossterm)
|
||||
- [edit](https://github.com/milkey-mouse/edit)
|
||||
- [keyring-rs](https://github.com/hwchen/keyring-rs)
|
||||
- [open-rs](https://github.com/Byron/open-rs)
|
||||
- [rpassword](https://github.com/conradkleinespel/rpassword)
|
||||
- [rust-s3](https://github.com/durch/rust-s3)
|
||||
- [self_update](https://github.com/jaemk/self_update)
|
||||
- [ssh2-rs](https://github.com/alexcrichton/ssh2-rs)
|
||||
- [suppaftp](https://github.com/veeso/suppaftp)
|
||||
- [ratatui](https://github.com/ratatui-org/ratatui)
|
||||
- [tui-realm](https://github.com/veeso/tui-realm)
|
||||
- [whoami](https://github.com/libcala/whoami)
|
||||
- [wildmatch](https://github.com/becheran/wildmatch)
|
||||
|
||||
---
|
||||
|
||||
## Gallerie 🎬
|
||||
|
||||
> Termscp Home
|
||||
|
||||

|
||||
|
||||
> Bookmarks
|
||||
|
||||

|
||||
|
||||
> Setup
|
||||
|
||||

|
||||
|
||||
> Text editor
|
||||
|
||||

|
||||
|
||||
---
|
||||
|
||||
## Licence 📃
|
||||
|
||||
termscp est sous licence MIT.
|
||||
|
||||
Vous pouvez lire l'intégralité de la licence [ICI](../../LICENSE)
|
||||
599
docs/fr/man.md
Normal file
@@ -0,0 +1,599 @@
|
||||
# User manual 🎓
|
||||
|
||||
- [User manual 🎓](#user-manual-)
|
||||
- [Usage ❓](#usage-)
|
||||
- [Argument d'adresse 🌎](#argument-dadresse-)
|
||||
- [Argument d'adresse AWS S3](#argument-dadresse-aws-s3)
|
||||
- [Argument d'adresse Kube](#argument-dadresse-kube)
|
||||
- [Argument d'adresse WebDAV](#argument-dadresse-webdav)
|
||||
- [Argument d'adresse SMB](#argument-dadresse-smb)
|
||||
- [Comment le mot de passe peut être fourni 🔐](#comment-le-mot-de-passe-peut-être-fourni-)
|
||||
- [S3 paramètres de connexion](#s3-paramètres-de-connexion)
|
||||
- [Identifiants S3 🦊](#identifiants-s3-)
|
||||
- [Explorateur de fichiers 📂](#explorateur-de-fichiers-)
|
||||
- [Raccourcis clavier ⌨](#raccourcis-clavier-)
|
||||
- [Travailler sur plusieurs fichiers 🥷](#travailler-sur-plusieurs-fichiers-)
|
||||
- [Exemple](#exemple)
|
||||
- [Navigation synchronisée ⏲️](#navigation-synchronisée-️)
|
||||
- [Ouvrir et ouvrir avec 🚪](#ouvrir-et-ouvrir-avec-)
|
||||
- [Signets ⭐](#signets-)
|
||||
- [Mes mots de passe sont-ils sûrs 😈](#mes-mots-de-passe-sont-ils-sûrs-)
|
||||
- [Linux Keyring](#linux-keyring)
|
||||
- [Configuration de KeepassXC pour termscp](#configuration-de-keepassxc-pour-termscp)
|
||||
- [Configuration ⚙️](#configuration-️)
|
||||
- [SSH Key Storage 🔐](#ssh-key-storage-)
|
||||
- [Format de l'explorateur de fichiers](#format-de-lexplorateur-de-fichiers)
|
||||
- [Thèmes 🎨](#thèmes-)
|
||||
- [Mon thème ne se charge pas 😱](#mon-thème-ne-se-charge-pas-)
|
||||
- [Modes 💈](#modes-)
|
||||
- [Authentication page](#authentication-page)
|
||||
- [Transfer page](#transfer-page)
|
||||
- [Misc](#misc)
|
||||
- [Éditeur de texte ✏](#éditeur-de-texte-)
|
||||
- [Fichier Journal 🩺](#fichier-journal-)
|
||||
- [Notifications 📫](#notifications-)
|
||||
- [Observateur de fichiers 🔭](#observateur-de-fichiers-)
|
||||
|
||||
## Usage ❓
|
||||
|
||||
termscp peut être démarré avec les options suivantes :
|
||||
|
||||
`termscp [options]... [protocol://user@address:port:wrkdir] [protocol://user@address:port:wrkdir] [local-wrkdir]`
|
||||
|
||||
ou
|
||||
|
||||
`termscp [options]... -b [bookmark-name] -b [bookmark-name] [local-wrkdir]`
|
||||
|
||||
- `-P, --password <password>` si l'adresse est fournie, le mot de passe sera cet argument
|
||||
- `-b, --address-as-bookmark` résoudre l'argument d'adresse en tant que nom de signet
|
||||
- `-q, --quiet` Désactiver la journalisation
|
||||
- `-v, --version` Imprimer les informations sur la version
|
||||
- `-h, --help` Imprimer la page d'aide
|
||||
|
||||
termscp peut être démarré dans deux modes différents, si aucun argument supplémentaire n'est fourni, termscp affichera le formulaire d'authentification, où l'utilisateur pourra fournir les paramètres requis pour se connecter au pair distant.
|
||||
|
||||
Alternativement, l'utilisateur peut fournir une adresse comme argument pour ignorer le formulaire d'authentification et démarrer directement la connexion au serveur distant.
|
||||
|
||||
Si l'argument d'adresse est fourni, vous pouvez également fournir le répertoire de démarrage de l'hôte local
|
||||
|
||||
### Argument d'adresse 🌎
|
||||
|
||||
L'argument adresse a la syntaxe suivante :
|
||||
|
||||
```txt
|
||||
[protocole://][nom-utilisateur@]<adresse>[:port][:wrkdir]
|
||||
```
|
||||
|
||||
Voyons un exemple de cette syntaxe particulière, car elle est très confortable et vous allez probablement l'utiliser à la place de l'autre...
|
||||
|
||||
- Se connecter en utilisant le protocole par défaut (*défini dans la configuration*) à 192.168.1.31, le port s'il n'est pas fourni est par défaut pour le protocole sélectionné (dans ce cas dépend de votre configuration) ; nom d'utilisateur est le nom de l'utilisateur actuel
|
||||
|
||||
```sh
|
||||
termscp 192.168.1.31
|
||||
```
|
||||
|
||||
- Se connecter en utilisant le protocole par défaut (*défini dans la configuration*) à 192.168.1.31 ; le nom d'utilisateur est "root"
|
||||
|
||||
```sh
|
||||
termscp root@192.168.1.31
|
||||
```
|
||||
|
||||
- Se connecter en utilisant scp à 192.168.1.31, le port est 4022 ; le nom d'utilisateur est "omar"
|
||||
|
||||
```sh
|
||||
termscp scp://omar@192.168.1.31:4022
|
||||
```
|
||||
|
||||
- Se connecter en utilisant scp à 192.168.1.31, le port est 4022 ; le nom d'utilisateur est "omar". Vous commencerez dans le répertoire `/tmp`
|
||||
|
||||
```sh
|
||||
termscp scp://omar@192.168.1.31:4022:/tmp
|
||||
```
|
||||
|
||||
#### Argument d'adresse AWS S3
|
||||
|
||||
Aws S3 a une syntaxe différente pour l'argument d'adresse CLI, pour des raisons évidentes, mais j'ai réussi à le garder le plus similaire possible à l'argument d'adresse générique :
|
||||
|
||||
```txt
|
||||
s3://<bucket-name>@<region>[:profile][:/wrkdir]
|
||||
```
|
||||
|
||||
e.g.
|
||||
|
||||
```txt
|
||||
s3://buckethead@eu-central-1:default:/assets
|
||||
```
|
||||
|
||||
#### Argument d'adresse Kube
|
||||
|
||||
Si vous souhaitez vous connecter à Kube, utilisez la syntaxe suivante
|
||||
|
||||
```txt
|
||||
kube://[namespace][@<cluster_url>][$</path>]
|
||||
```
|
||||
|
||||
#### Argument d'adresse WebDAV
|
||||
|
||||
Dans le cas où vous souhaitez vous connecter à WebDAV, utilisez la syntaxe suivante
|
||||
|
||||
```txt
|
||||
http://<username>:<password>@<url></path>
|
||||
```
|
||||
|
||||
ou dans le cas où vous souhaitez utiliser https
|
||||
|
||||
```txt
|
||||
https://<username>:<password>@<url></path>
|
||||
```
|
||||
|
||||
#### Argument d'adresse SMB
|
||||
|
||||
SMB a une syntaxe différente pour l'argument d'adresse CLI, qui est différente que vous soyez sur Windows ou sur d'autres systèmes :
|
||||
|
||||
syntaxe **Windows**:
|
||||
|
||||
```txt
|
||||
\\[username@]<server-name>\<share>[\path\...]
|
||||
```
|
||||
|
||||
syntaxe **Other systems**:
|
||||
|
||||
```txt
|
||||
smb://[username@]<server-name>[:port]/<share>[/path/.../]
|
||||
```
|
||||
|
||||
|
||||
#### Comment le mot de passe peut être fourni 🔐
|
||||
|
||||
Vous avez probablement remarqué que, lorsque vous fournissez l'adresse comme argument, il n'y a aucun moyen de fournir le mot de passe.
|
||||
Le mot de passe peut être fourni de 3 manières lorsque l'argument d'adresse est fourni :
|
||||
|
||||
- `-P, --password` option : utilisez simplement cette option CLI en fournissant le mot de passe. Je déconseille fortement cette méthode, car elle n'est pas sécurisée (puisque vous pouvez conserver le mot de passe dans l'historique du shell)
|
||||
- Avec `sshpass`: vous pouvez fournir un mot de passe via `sshpass`, par ex. `sshpass -f ~/.ssh/topsecret.key termscp cvisintin@192.168.1.31`
|
||||
- Il vous sera demandé : si vous n'utilisez aucune des méthodes précédentes, le mot de passe vous sera demandé, comme c'est le cas avec les outils plus classiques tels que `scp`, `ssh`, etc.
|
||||
|
||||
---
|
||||
|
||||
## S3 paramètres de connexion
|
||||
|
||||
Ces paramètres sont requis pour se connecter à aws s3 et à d'autres serveurs compatibles s3 :
|
||||
|
||||
- AWS S3:
|
||||
- **bucket name**
|
||||
- **region**
|
||||
- *profile* (si non fourni : "par défaut")
|
||||
- *access key* (sauf si public)
|
||||
- *secret access key* (sauf si public)
|
||||
- *security token* (si nécessaire)
|
||||
- *session token* (si nécessaire)
|
||||
- new path style: **NO**
|
||||
- Autres points de terminaison S3:
|
||||
- **bucket name**
|
||||
- **endpoint**
|
||||
- *access key* (sauf si public)
|
||||
- *secret access key* (sauf si public)
|
||||
- new path style: **YES**
|
||||
|
||||
### Identifiants S3 🦊
|
||||
|
||||
Afin de vous connecter à un compartiment Aws S3, vous devez évidemment fournir des informations d'identification.
|
||||
Il existe essentiellement trois manières d'y parvenir.
|
||||
Voici donc les moyens de fournir les informations d'identification pour s3 :
|
||||
|
||||
1. Authentication form:
|
||||
1. Vous pouvez fournir le `access_key` (devrait être obligatoire), le `secret_access_key` (devrait être obligatoire), `security_token` et le `session_token`
|
||||
2. Si vous enregistrez la connexion s3 en tant que signet, ces informations d'identification seront enregistrées en tant que chaîne AES-256/BASE64 cryptée dans votre fichier de signets (à l'exception du jeton de sécurité et du jeton de session qui sont censés être des informations d'identification temporaires).
|
||||
2. Utilisez votre fichier d'informations d'identification : configurez simplement l'AWS cli via `aws configure` et vos informations d'identification doivent déjà se trouver dans `~/.aws/credentials`. Si vous utilisez un profil différent de "default", fournissez-le simplement dans le champ profile du formulaire d'authentification.
|
||||
3. **Variables d'environnement** : vous pouvez toujours fournir vos informations d'identification en tant que variables d'environnement. Gardez à l'esprit que ces informations d'identification **remplaceront toujours** les informations d'identification situées dans le fichier « credentials ». Voir comment configurer l'environnement ci-dessous :
|
||||
|
||||
Ceux-ci devraient toujours être obligatoires:
|
||||
|
||||
- `AWS_ACCESS_KEY_ID`: aws access key ID (commence généralement par `AKIA...`)
|
||||
- `AWS_SECRET_ACCESS_KEY`: la secret access key
|
||||
|
||||
Au cas où vous auriez configuré une sécurité renforcée, vous *pourriez* également en avoir besoin :
|
||||
|
||||
- `AWS_SECURITY_TOKEN`: security token
|
||||
- `AWS_SESSION_TOKEN`: session token
|
||||
|
||||
⚠️ Vos identifiants sont en sécurité : les termscp ne manipuleront pas ces valeurs directement ! Vos identifiants sont directement consommés par la caisse **s3**.
|
||||
Si vous avez des inquiétudes concernant la sécurité, veuillez contacter l'auteur de la bibliothèque sur [Github](https://github.com/durch/rust-s3) ⚠️
|
||||
|
||||
---
|
||||
|
||||
## Explorateur de fichiers 📂
|
||||
|
||||
Lorsque nous nous référons aux explorateurs de fichiers en termscp, nous nous référons aux panneaux que vous pouvez voir après avoir établi une connexion avec la télécommande.
|
||||
Ces panneaux sont essentiellement 3 (oui, trois en fait):
|
||||
|
||||
- Panneau de l'explorateur local : il s'affiche sur la gauche de votre écran et affiche les entrées du répertoire en cours pour localhost
|
||||
- Panneau de l'explorateur distant : il s'affiche à droite de votre écran et affiche les entrées du répertoire en cours pour l'hôte distant.
|
||||
- Panneau de résultats de recherche : selon l'endroit où vous recherchez des fichiers (local/distant), il remplacera le panneau local ou l'explorateur. Ce panneau affiche les entrées correspondant à la requête de recherche que vous avez effectuée.
|
||||
|
||||
Pour changer de panneau, vous devez taper `<LEFT>` pour déplacer le panneau de l'explorateur distant et `<RIGHT>` pour revenir au panneau de l'explorateur local. Chaque fois que vous êtes dans le panneau des résultats de recherche, vous devez appuyer sur `<ESC>` pour quitter le panneau et revenir au panneau précédent.
|
||||
|
||||
### Raccourcis clavier ⌨
|
||||
|
||||
| Key | Command | Reminder |
|
||||
|---------------|---------------------------------------------------------------------------|-------------|
|
||||
| `<ESC>` | Se Déconnecter de le serveur; retour à la page d'authentification | |
|
||||
| `<BACKSPACE>` | Aller au répertoire précédent dans la pile | |
|
||||
| `<TAB>` | Changer d'onglet explorateur | |
|
||||
| `<RIGHT>` | Déplacer vers l'onglet explorateur distant | |
|
||||
| `<LEFT>` | Déplacer vers l'onglet explorateur local | |
|
||||
| `<UP>` | Remonter dans la liste sélectionnée | |
|
||||
| `<DOWN>` | Descendre dans la liste sélectionnée | |
|
||||
| `<PGUP>` | Remonter dans la liste sélectionnée de 8 lignes | |
|
||||
| `<PGDOWN>` | Descendre dans la liste sélectionnée de 8 lignes | |
|
||||
| `<ENTER>` | Entrer dans le directoire | |
|
||||
| `<SPACE>` | Télécharger le fichier sélectionné | |
|
||||
| `<BACKTAB>` | Basculer entre l'onglet journal et l'explorateur | |
|
||||
| `<A>` | Basculer les fichiers cachés | All |
|
||||
| `<B>` | Trier les fichiers par | Bubblesort? |
|
||||
| `<C|F5>` | Copier le fichier/répertoire | Copy |
|
||||
| `<D|F7>` | Créer un dossier | Directory |
|
||||
| `<E|F8|DEL>` | Supprimer le fichier (Identique à `DEL`) | Erase |
|
||||
| `<F>` | Rechercher des fichiers | Find |
|
||||
| `<G>` | Aller au chemin fourni | Go to |
|
||||
| `<H|F1>` | Afficher l'aide | Help |
|
||||
| `<I>` | Afficher les informations sur le fichier ou le dossier sélectionné | Info |
|
||||
| `<K>` | Créer un lien symbolique pointant vers l'entrée actuellement sélectionnée | symlinK |
|
||||
| `<L>` | Recharger le contenu du répertoire actuel / Effacer la sélection | List |
|
||||
| `<M>` | Sélectionner un fichier | Mark |
|
||||
| `<N>` | Créer un nouveau fichier avec le nom fourni | New |
|
||||
| `<O|F4>` | Modifier le fichier | Open |
|
||||
| `<P>` | Ouvre le panel de journals | Panel |
|
||||
| `<Q|F10>` | Quitter termscp | Quit |
|
||||
| `<R|F6>` | Renommer le fichier | Rename |
|
||||
| `<S|F2>` | Enregistrer le fichier sous... | Save |
|
||||
| `<T>` | Synchroniser les modifications apportées au chemin sélectionné | Track |
|
||||
| `<U>` | Aller dans le répertoire parent | Upper |
|
||||
| `<V|F3>` | Ouvrir le fichier avec le programme défaut pour le type de fichier | View |
|
||||
| `<W>` | Ouvrir le fichier avec le programme spécifié | With |
|
||||
| `<X>` | Exécuter une commande | eXecute |
|
||||
| `<Y>` | Basculer la navigation synchronisée | sYnc |
|
||||
| `<Z>` | Changer permissions de fichier | |
|
||||
| `</>` | Filtrer les fichiers (les expressions régulières et les correspondances génériques sont prises en charge) | |
|
||||
| `<CTRL+A>` | Sélectionner tous les fichiers | |
|
||||
| `<ALT+A>` | Desélectionner tous les fichiers | |
|
||||
| `<CTRL+C>` | Abandonner le processus de transfert de fichiers | |
|
||||
| `<CTRL+T>` | Afficher tous les chemins synchronisés | Track |
|
||||
|
||||
### Travailler sur plusieurs fichiers 🥷
|
||||
|
||||
Vous pouvez choisir de travailler sur plusieurs fichiers avec ces simples commandes :
|
||||
|
||||
- `<M>` : marquer un fichier à sélectionner
|
||||
- `<CTRL+A>` : sélectionner tous les fichiers du répertoire actuel
|
||||
- `<ALT+A>` : désélectionner tous les fichiers
|
||||
|
||||
Une fois sélectionné, un fichier sera **affiché avec un fond en surbrillance** .
|
||||
Lorsqu’on travaille avec des sélections, seules les fichiers sélectionnés seront affectés par les actions, tandis que l'élément actuellement surligné sera ignoré.
|
||||
|
||||
Il est également possible de travailler avec plusieurs fichiers depuis le panneau des résultats de recherche.
|
||||
|
||||
Toutes les actions sont disponibles avec des fichiers multiples, mais certaines peuvent se comporter différemment. Détails :
|
||||
|
||||
- *Copier* : lors de la copie, il vous sera demandé un nom de destination. Avec plusieurs fichiers, cela correspond au dossier de destination.
|
||||
- *Renommer* : identique à la copie, mais déplace les fichiers.
|
||||
- *Enregistrer sous* : identique à la copie, mais enregistre les fichiers à cet emplacement.
|
||||
|
||||
Si vous sélectionnez un fichier dans un dossier (ex. `/home`) puis changez de répertoire, il restera sélectionné et sera affiché dans la **file d’attente de transfert** en bas.
|
||||
Lorsqu’un fichier est sélectionné, le dossier *distant* courant lui est associé ; en cas de transfert, il sera envoyé vers ce dossier.
|
||||
|
||||
#### Exemple
|
||||
|
||||
Si on sélectionne `/home/a.txt` localement et que le panneau distant est sur `/tmp`, puis on passe à `/var`, on sélectionne `/var/b.txt` et que le panneau distant est sur `/home`, le transfert donnera :
|
||||
|
||||
- `/home/a.txt` transféré vers `/tmp/a.txt`
|
||||
- `/var/b.txt` transféré vers `/home/b.txt`
|
||||
|
||||
### Navigation synchronisée ⏲️
|
||||
|
||||
Lorsqu'elle est activée, la navigation synchronisée vous permettra de synchroniser la navigation entre les deux panneaux.
|
||||
Cela signifie que chaque fois que vous changerez de répertoire de travail sur un panneau, la même action sera reproduite sur l'autre panneau. Si vous souhaitez activer la navigation synchronisée, appuyez simplement sur `<Y>` ; appuyez deux fois pour désactiver. Lorsqu'il est activé, l'état de navigation synchronisé sera signalé dans la barre d'état sur `ON`
|
||||
|
||||
### Ouvrir et ouvrir avec 🚪
|
||||
|
||||
Lors de l'ouverture de fichiers avec la commande Afficher (`<V>`), l'application par défaut du système pour le type de fichier sera utilisée. Pour ce faire, le service du système d'exploitation par défaut sera utilisé, alors assurez-vous d'avoir au moins l'un de ceux-ci installé sur votre système :
|
||||
|
||||
- Utilisateurs **Windows** : vous n'avez pas à vous en soucier, puisque la caisse utilisera la commande `start`.
|
||||
- Utilisateurs **MacOS** : vous n'avez pas à vous inquiéter non plus, puisque le crate utilisera `open`, qui est déjà installé sur votre système.
|
||||
- Utilisateurs **Linux** : l'un d'eux doit être installé
|
||||
- *xdg-open*
|
||||
- *gio*
|
||||
- *gnome-open*
|
||||
- *kde-open*
|
||||
- Utilisateurs **WSL** : *wslview* est requis, vous devez installer [wslu](https://github.com/wslutilities/wslu).
|
||||
|
||||
> Q: Puis-je modifier des fichiers distants à l'aide de la commande view ?
|
||||
> A: Non, du moins pas directement depuis le "panneau distant". Vous devez d'abord le télécharger dans un répertoire local, cela est dû au fait que lorsque vous ouvrez un fichier distant, le fichier est téléchargé dans un répertoire temporaire, mais il n'y a aucun moyen de créer un observateur pour que le fichier vérifie quand le programme que vous utilisé pour l'ouvrir était fermé, donc termscp n'est pas en mesure de savoir quand vous avez fini de modifier le fichier.
|
||||
|
||||
---
|
||||
|
||||
## Signets ⭐
|
||||
|
||||
Dans termscp, il est possible de sauvegarder les hôtes favoris, qui peuvent ensuite être chargés rapidement à partir de la mise en page principale de termscp.
|
||||
termscp enregistrera également les 16 derniers hôtes auxquels vous vous êtes connecté.
|
||||
Cette fonctionnalité vous permet de charger tous les paramètres nécessaires pour vous connecter à une certaine télécommande, en sélectionnant simplement le signet dans l'onglet sous le formulaire d'authentification.
|
||||
|
||||
Les signets seront enregistrés, si possible à l'adresse :
|
||||
|
||||
- `$HOME/.config/termscp/` sous Linux/BSD
|
||||
- `$HOME/Library/Application Support/termscp` sous MacOs
|
||||
- `FOLDERID_RoamingAppData\termscp\` sous Windows
|
||||
|
||||
Pour les signets uniquement (cela ne s'appliquera pas aux hôtes récents), il est également possible de sauvegarder le mot de passe utilisé pour s'authentifier. Le mot de passe n'est pas enregistré par défaut et doit être spécifié via l'invite lors de l'enregistrement d'un nouveau signet.
|
||||
Si vous êtes préoccupé par la sécurité du mot de passe enregistré pour vos favoris, veuillez lire le [chapitre ci-dessous 👀](#mes-mots-de-passe-sont-ils-sûrs-).
|
||||
|
||||
Pour créer un nouveau signet, suivez simplement ces étapes :
|
||||
|
||||
1. Tapez dans le formulaire d'authentification les paramètres pour vous connecter à votre serveur distant
|
||||
2. Appuyez sur `<CTRL+S>`
|
||||
3. Tapez le nom que vous souhaitez donner au signet
|
||||
4. Choisissez de rappeler ou non le mot de passe
|
||||
5. Appuyez sur `<ENTER>` pour soumettre
|
||||
|
||||
chaque fois que vous souhaitez utiliser la connexion précédemment enregistrée, appuyez simplement sur `<TAB>` pour accéder à la liste des signets et chargez les paramètres des signets dans le formulaire en appuyant sur `<ENTER>`.
|
||||
|
||||

|
||||
|
||||
### Mes mots de passe sont-ils sûrs 😈
|
||||
|
||||
Bien sûr 😉.
|
||||
Comme dit précédemment, les signets sont enregistrés dans votre répertoire de configuration avec les mots de passe. Les mots de passe ne sont évidemment pas en texte brut, ils sont cryptés avec **AES-128**. Est-ce que cela les sécurise ? Absolument! (sauf pour les utilisateurs BSD et WSL 😢)
|
||||
|
||||
Sous **Windows**, **Linux** et **MacOS**, la clé utilisée pour crypter les mots de passe est stockée, si possible (mais devrait l'être), respectivement dans le *Windows Vault*, dans le *porte-clés système* et dans le *Porte-clés*. Ceci est en fait super sûr et est directement géré par votre système d'exploitation.
|
||||
|
||||
❗ Veuillez noter que si vous êtes un utilisateur Linux, vous feriez mieux de lire le [chapitre ci-dessous 👀](#linux-keyring), car le trousseau peut ne pas être activé ou pris en charge sur votre système !
|
||||
|
||||
Sur *BSD* et *WSL*, en revanche, la clé utilisée pour crypter vos mots de passe est stockée sur votre disque (dans $HOME/.config/termscp). Il est alors, toujours possible de récupérer la clé pour déchiffrer les mots de passe. Heureusement, l'emplacement de la clé garantit que votre clé ne peut pas être lue par des utilisateurs différents du vôtre, mais oui, je n'enregistrerais toujours pas le mot de passe pour un serveur exposé sur Internet 😉.
|
||||
|
||||
#### Linux Keyring
|
||||
|
||||
Nous aimons tous Linux grâce à la liberté qu'il donne aux utilisateurs. En tant qu'utilisateur Linux, vous pouvez essentiellement faire tout ce que vous voulez, mais cela présente également des inconvénients, tels que le fait qu'il n'y a souvent pas d'applications standard dans différentes distributions. Et cela implique aussi un porte-clés.
|
||||
Cela signifie que sous Linux, aucun trousseau de clés n'est peut-être installé sur votre système. Malheureusement, la bibliothèque que nous utilisons pour travailler avec le stockage des clés nécessite un service qui expose `org.freedesktop.secrets` sur D-BUS et le pire est qu'il n'y a que deux services qui l'exposent.
|
||||
|
||||
- ❗ Si vous utilisez GNOME comme environnement de bureau (par exemple, les utilisateurs d'ubuntu), ça devrait déjà aller, car le trousseau de clés est déjà fourni par `gnome-keyring` et tout devrait déjà fonctionner.
|
||||
- ❗ Pour les autres utilisateurs d'environnement de bureau, il existe un programme sympa que vous pouvez utiliser pour obtenir un trousseau de clés qui est [KeepassXC](https://keepassxc.org/), que j'utilise sur mon installation Manjaro (avec KDE) et qui fonctionne bien. Le seul problème est que vous devez le configurer pour qu'il soit utilisé avec termscp (mais c'est assez simple). Pour commencer avec KeepassXC, lisez la suite [ici](#configuration-de-keepassxc-pour-termscp).
|
||||
- ❗ Et si vous ne souhaitez installer aucun de ces services ? Eh bien, il n'y a pas de problème ! **termscp continuera à fonctionner comme d'habitude**, mais il enregistrera la clé dans un fichier, comme il le fait habituellement pour BSD et WSL.
|
||||
|
||||
##### Configuration de KeepassXC pour termscp
|
||||
|
||||
Suivez ces étapes afin de configurer keepassXC pour termscp :
|
||||
|
||||
1. Installer KeepassXC
|
||||
2. Allez dans "outils" > "paramètres" dans la barre d'outils
|
||||
3. Selectioner "Secret service integration" et basculer "Enable KeepassXC freedesktop.org secret service integration"
|
||||
4. Creer une base de données, si vous n'en avez pas encore : à partir de la barre d'outils "Database" > "New database"
|
||||
5. De la barre d'outils: "Database" > "Database settings"
|
||||
6. Selectioner "Secret service integration" et basculer "Expose entries under this group"
|
||||
7. Sélectionnez le groupe dans la liste où vous souhaitez conserver le secret du termscp. N'oubliez pas que ce groupe peut être utilisé par toute autre application pour stocker des secrets via DBUS.
|
||||
|
||||
---
|
||||
|
||||
## Configuration ⚙️
|
||||
|
||||
termscp prend en charge certains paramètres définis par l'utilisateur, qui peuvent être définis dans la configuration.
|
||||
Underhood termscp a un fichier TOML et quelques autres répertoires où tous les paramètres seront enregistrés, mais ne vous inquiétez pas, vous ne toucherez à aucun de ces fichiers manuellement, car j'ai rendu possible la configuration complète de termscp à partir de son interface utilisateur.
|
||||
|
||||
termscp, comme pour les signets, nécessite juste d'avoir ces chemins accessibles :
|
||||
|
||||
- `$HOME/.config/termscp/` sous Linux/BSD
|
||||
- `$HOME/Library/Application Support/termscp` sous MacOs
|
||||
- `FOLDERID_RoamingAppData\termscp\` sous Windows
|
||||
|
||||
Pour accéder à la configuration, il vous suffit d'appuyer sur `<CTRL+C>` depuis l'accueil de termscp.
|
||||
|
||||
Ces paramètres peuvent être modifiés :
|
||||
|
||||
- **Text Editor**: l'éditeur de texte à utiliser. Par défaut, termscp trouvera l'éditeur par défaut pour vous ; avec cette option, vous pouvez forcer l'utilisation d'un éditeur (par exemple `vim`). **Les éditeurs d'interface graphique sont également pris en charge**, à moins qu'ils ne soient `nohup` à partir du processus parent.
|
||||
- **Default Protocol**: le protocole par défaut est la valeur par défaut du protocole de transfert de fichiers à utiliser dans termscp. Cela s'applique à la page de connexion et à l'argument de l'adresse CLI.
|
||||
- **Show Hidden Files**: sélectionnez si les fichiers cachés doivent être affichés par défaut. Vous pourrez décider d'afficher ou non les fichiers cachés au moment de l'exécution en appuyant sur `A` de toute façon.
|
||||
- **Check for updates**: s'il est défini sur `yes`, Termscp récupère l'API Github pour vérifier si une nouvelle version de Termscp est disponible.
|
||||
- **Prompt when replacing existing files?**: S'il est défini sur `yes`, Termscp vous demandera une confirmation chaque fois qu'un transfert de fichier entraînera le remplacement d'un fichier existant sur l'hôte cible.
|
||||
- **Group Dirs**: sélectionnez si les répertoires doivent être regroupés ou non dans les explorateurs de fichiers. Si `Display first` est sélectionné, les répertoires seront triés en utilisant la méthode configurée mais affichés avant les fichiers, vice-versa si `Display last` est sélectionné.
|
||||
- **Remote File formatter syntax**: syntaxe pour afficher les informations de fichier pour chaque fichier dans l'explorateur distant. Voir [File explorer format](#format-de-lexplorateur-de-fichiers)
|
||||
- **Local File formatter syntax**: syntaxe pour afficher les informations de fichier pour chaque fichier dans l'explorateur local. Voir [File explorer format](#format-de-lexplorateur-de-fichiers)
|
||||
- **Enable notifications?**: S'il est défini sur `Yes`, les notifications seront affichées.
|
||||
- **Notifications: minimum transfer size**: si la taille du transfert est supérieure ou égale à la valeur spécifiée, les notifications de transfert seront affichées. Les valeurs acceptées sont au format `{UNSIGNED} B/KB/MB/GB/TB/PB`
|
||||
- **SSH configuration path** : définissez le fichier de configuration SSH à utiliser lors de la connexion à un serveur SCP/SFTP. S'il n'est pas défini (vide), aucun fichier ne sera utilisé. Vous pouvez spécifier un chemin commençant par `~` pour indiquer le chemin d'accueil (par exemple `~/.ssh/config`). Les paramétrages disponibles pour la configuration sont listées [ICI](https://github.com/veeso/ssh2-config#exposed-attributes).
|
||||
|
||||
### SSH Key Storage 🔐
|
||||
|
||||
n plus de la configuration, termscp fournit également une fonctionnalité **essentielle** pour les **clients SFTP/SCP** : le stockage de clés SSH.
|
||||
|
||||
Vous pouvez accéder au stockage des clés SSH, de la configuration à l'onglet « Clés SSH », une fois là-bas, vous pouvez :
|
||||
|
||||
- **Ajouter une neuf clé SSH**: appuyez simplement sur `<CTRL+N>` et vous serez invité à créer une nouvelle clé. Fournissez le nom d'hôte/l'adresse IP et le nom d'utilisateur associé à la clé et enfin un éditeur de texte s'ouvrira : collez la clé ssh **PRIVÉE** dans l'éditeur de texte, enregistrez et quittez.
|
||||
- **Supprimer une clé existante**: appuyez simplement sur `<DEL>` ou `<CTRL+E>` sur la clé que vous souhaitez supprimer, pour supprimer de manière persistante la clé de termscp.
|
||||
- **Modifier une clé existante**: appuyez simplement sur `<ENTER>` sur la clé que vous souhaitez modifier, pour changer la clé privée.
|
||||
|
||||
> Q: Ma clé privée est protégée par mot de passe, puis-je l'utiliser ?
|
||||
> A: Bien sûr vous pouvez. Le mot de passe fourni pour l'authentification dans termscp est valide à la fois pour l'authentification par nom d'utilisateur/mot de passe et pour l'authentification par clé RSA.
|
||||
|
||||
### Format de l'explorateur de fichiers
|
||||
|
||||
Il est possible via la configuration de définir un format personnalisé pour l'explorateur de fichiers. Ceci est possible à la fois pour l'hôte local et distant, vous pouvez donc utiliser deux syntaxes différentes. Ces champs, nommés `File formatter syntax (local)` et `File formatter syntax (remote)` définiront comment les entrées de fichier seront affichées dans l'explorateur de fichiers.
|
||||
La syntaxe du formateur est la suivante `{KEY1}... {KEY2:LENGTH}... {KEY3:LENGTH:EXTRA} {KEYn}...`.
|
||||
Chaque clé entre crochets sera remplacée par l'attribut associé, tandis que tout ce qui se trouve en dehors des crochets restera inchangé.
|
||||
|
||||
- Le nom de la clé est obligatoire et doit être l'une des clés ci-dessous
|
||||
- La longueur décrit la longueur réservée pour afficher le champ. Les attributs statiques ne prennent pas en charge cela (GROUP, PEX, SIZE, USER)
|
||||
- Extra n'est pris en charge que par certains paramètres et constitue une option supplémentaire. Voir les touches pour vérifier si les extras sont pris en charge.
|
||||
|
||||
Voici les clés prises en charge par le formateur :
|
||||
|
||||
- `ATIME`: Heure du dernier accès (avec la syntaxe par défaut `%b %d %Y %H:%M`) ; Un supplément peut être fourni comme syntaxe de l'heure (par exemple, `{ATIME:8:%H:%M}`)
|
||||
- `CTIME`: Heure de création (avec la syntaxe `%b %d %Y %H:%M`); Un supplément peut être fourni comme syntaxe de l'heure (par exemple, `{CTIME:8:%H:%M}`)
|
||||
- `GROUP`: Groupe de propriétaires
|
||||
- `MTIME`: Heure du dernier changement (avec la syntaxe `%b %d %Y %H:%M`); Un supplément peut être fourni comme syntaxe de l'heure (par exemple, `{MTIME:8:%H:%M}`)
|
||||
- `NAME`: Nom du fichier (élidé si plus long que LENGTH)
|
||||
- `PATH`: Chemin absolu du fichier (les dossiers entre la racine et les premiers ancêtres sont éludés s'ils sont plus longs que LENGTH)
|
||||
- `PEX`: Autorisations de fichiers (format UNIX)
|
||||
- `SIZE`: Taille du fichier (omis pour les répertoires)
|
||||
- `SYMLINK`: Lien symbolique (le cas échéant `-> {FILE_PATH}`)
|
||||
- `USER`: Utilisateur propriétaire
|
||||
|
||||
Si elle est laissée vide, la syntaxe par défaut du formateur sera utilisée : `{NAME:24} {PEX} {USER} {SIZE} {MTIME:17:%b %d %Y %H:%M}`
|
||||
|
||||
---
|
||||
|
||||
## Thèmes 🎨
|
||||
|
||||
Termscp vous offre une fonctionnalité géniale : la possibilité de définir les couleurs de plusieurs composants de l'application.
|
||||
Si vous souhaitez personnaliser termscp, il existe deux manières de le faire :
|
||||
|
||||
- Depuis le **menu de configuration**
|
||||
- Importation d'un **fichier de thème**
|
||||
|
||||
Afin de créer votre propre personnalisation à partir de termscp, il vous suffit de saisir la configuration à partir de l'activité d'authentification, en appuyant sur `<CTRL+C>` puis sur `<TAB>` deux fois. Vous devriez être maintenant passé au panneau `thèmes`.
|
||||
|
||||
Ici, vous pouvez vous déplacer avec `<UP>` et `<DOWN>` pour changer le style que vous souhaitez modifier, comme indiqué dans le gif ci-dessous :
|
||||
|
||||

|
||||
|
||||
termscp prend en charge à la fois la syntaxe hexadécimale explicite traditionnelle (`#rrggbb`) et rgb `rgb(r, g, b)` pour fournir des couleurs, mais aussi **[couleurs css](https://www.w3schools.com/cssref/css_colors.asp)** (comme `crimson`) sont acceptés 😉. Il y a aussi un keywork spécial qui est `Default`. Par défaut signifie que la couleur utilisée sera la couleur de premier plan ou d'arrière-plan par défaut en fonction de la situation (premier plan pour les textes et les lignes, arrière-plan pour bien, devinez quoi)
|
||||
|
||||
Comme dit précédemment, vous pouvez également importer des fichiers de thème. Vous pouvez vous inspirer de ou utiliser directement l'un des thèmes fournis avec termscp, situé dans le répertoire `themes/` de ce référentiel et les importer en exécutant termscp en tant que `termscp -t <theme_file>`. Si tout allait bien, cela devrait vous dire que le thème a été importé avec succès.
|
||||
|
||||
### Mon thème ne se charge pas 😱
|
||||
|
||||
Cela est probablement dû à une mise à jour récente qui a cassé le thème. Chaque fois que j'ajoute une nouvelle clé aux thèmes, le thème enregistré ne se charge pas. Pour résoudre ces problèmes, il existe deux solutions vraiment rapides :
|
||||
|
||||
1. Recharger le thème : chaque fois que je publie une mise à jour, je corrige également les thèmes "officiels", il vous suffit donc de le télécharger à nouveau depuis le référentiel et de réimporter le thème via l'option `-t`
|
||||
|
||||
```sh
|
||||
termscp -t <theme.toml>
|
||||
```
|
||||
|
||||
2. Corrigez votre thème : si vous utilisez un thème personnalisé, vous pouvez le modifier via `vim` et ajouter la clé manquante. Le thème est situé dans `$CONFIG_DIR/termscp/theme.toml` où `$CONFIG_DIR` est :
|
||||
|
||||
- FreeBSD/GNU-Linux: `$HOME/.config/`
|
||||
- MacOs: `$HOME/Library/Application Support`
|
||||
- Windows: `%appdata%`
|
||||
|
||||
❗ Les clés manquantes sont signalées dans le CHANGELOG sous `BREAKING CHANGES` pour la version que vous venez d'installer.
|
||||
|
||||
### Modes 💈
|
||||
|
||||
Vous pouvez trouver dans le tableau ci-dessous, la description de chaque champ de style.
|
||||
Veuillez noter que **les styles ne s'appliqueront pas à la page de configuration**, afin de la rendre toujours accessible au cas où vous gâcheriez tout
|
||||
|
||||
#### Authentication page
|
||||
|
||||
| Key | Description |
|
||||
|----------------|------------------------------------------|
|
||||
| auth_address | Couleur du champ pour adresse IP |
|
||||
| auth_bookmarks | Couleur du panneau des signets |
|
||||
| auth_password | Couleur du champ pour mot de passe |
|
||||
| auth_port | Couleur du champ pour nombre de port |
|
||||
| auth_protocol | Couleur du groupe radio pour protocole |
|
||||
| auth_recents | Couleur du panneau récent |
|
||||
| auth_username | Couleur du champ pour nom d'utilisateur |
|
||||
|
||||
#### Transfer page
|
||||
|
||||
| Key | Description |
|
||||
|--------------------------------------|---------------------------------------------------------------------------|
|
||||
| transfer_local_explorer_background | Couleur d'arrière-plan de l'explorateur localhost |
|
||||
| transfer_local_explorer_foreground | Couleur de premier plan de l'explorateur localhost |
|
||||
| transfer_local_explorer_highlighted | Bordure et couleur surlignée pour l'explorateur localhost |
|
||||
| transfer_remote_explorer_background | Couleur d'arrière-plan de l'explorateur distant |
|
||||
| transfer_remote_explorer_foreground | Couleur de premier plan de l'explorateur distant |
|
||||
| transfer_remote_explorer_highlighted | Bordure et couleur en surbrillance pour l'explorateur distant |
|
||||
| transfer_log_background | Couleur d'arrière-plan du panneau de journal |
|
||||
| transfer_log_window | Couleur de la fenêtre du panneau de journal |
|
||||
| transfer_progress_bar_partial | Couleur de la barre de progression partielle |
|
||||
| transfer_progress_bar_total | Couleur de la barre de progression totale |
|
||||
| transfer_status_hidden | Couleur de l'étiquette "hidden" de la barre d'état |
|
||||
| transfer_status_sorting | Couleur de l'étiquette "sorting" de la barre d'état |
|
||||
| transfer_status_sync_browsing | Couleur de l'étiquette "sync browsing" de la barre d'état |
|
||||
|
||||
#### Misc
|
||||
|
||||
These styles applie to different part of the application.
|
||||
|
||||
| Key | Description |
|
||||
|-------------------|---------------------------------------------|
|
||||
| misc_error_dialog | Couleur des messages d'erreur |
|
||||
| misc_info_dialog | Couleur des messages d'info |
|
||||
| misc_input_dialog | Couleur des messages de input |
|
||||
| misc_keys | Couleur du texte pour les frappes de touches|
|
||||
| misc_quit_dialog | Couleur des messages de quit |
|
||||
| misc_save_dialog | Couleur des messages d'enregistrement |
|
||||
| misc_warn_dialog | Couleur des messages de attention |
|
||||
|
||||
---
|
||||
|
||||
## Éditeur de texte ✏
|
||||
|
||||
termscp a, comme vous l'avez peut-être remarqué, de nombreuses fonctionnalités, l'une d'entre elles est la possibilité de visualiser et de modifier un fichier texte. Peu importe que le fichier se trouve sur l'hôte local ou sur l'hôte distant, termscp offre la possibilité d'ouvrir un fichier dans votre éditeur de texte préféré.
|
||||
Si le fichier se trouve sur l'hôte distant, le fichier sera d'abord téléchargé dans votre répertoire de fichiers temporaires, puis **uniquement** si des modifications ont été apportées au fichier, rechargé sur l'hôte distant. termscp vérifie si vous avez apporté des modifications au fichier en vérifiant l'heure de la dernière modification du fichier.
|
||||
|
||||
> ❗ Juste un rappel : **vous ne pouvez éditer que des fichiers texte** ; les fichiers binaires ne sont pas pris en charge.
|
||||
|
||||
---
|
||||
|
||||
## Fichier Journal 🩺
|
||||
|
||||
termscp écrit un fichier journal pour chaque session, qui est écrit à
|
||||
|
||||
- `$HOME/.cache/termscp/termscp.log` sous Linux/BSD
|
||||
- `$HOME/Library/Caches/termscp/termscp.log` sous MacOs
|
||||
- `FOLDERID_LocalAppData\termscp\termscp.log` sous Windows
|
||||
|
||||
le journal ne sera pas tourné, mais sera simplement tronqué après chaque lancement de termscp, donc si vous souhaitez signaler un problème et que vous souhaitez joindre votre fichier journal, n'oubliez pas de sauvegarder le fichier journal dans un endroit sûr avant de l'utiliser termescp à nouveau.
|
||||
|
||||
La journalisation par défaut se rapporte au niveau *INFO*, elle n'est donc pas très détaillée.
|
||||
|
||||
Si vous souhaitez soumettre un problème, veuillez, si vous le pouvez, reproduire le problème avec le niveau défini sur `TRACE`, pour ce faire, lancez termscp avec
|
||||
l'option CLI `-D`.
|
||||
|
||||
Je sais que vous pourriez avoir des questions concernant les fichiers journaux, alors j'ai fait une sorte de Q/R :
|
||||
|
||||
> Je ne veux pas me connecter, puis-je le désactiver ?
|
||||
|
||||
Oui, vous pouvez. Démarrez simplement termscp avec l'option `-q ou --quiet`. Vous pouvez créer un alias termcp pour le rendre persistant. N'oubliez pas que la journalisation est utilisée pour diagnostiquer les problèmes, donc puisque derrière chaque projet open source, il devrait toujours y avoir ce genre d'aide mutuelle, la conservation des fichiers journaux peut être votre moyen de soutenir le projet 😉. Je ne veux pas que tu te sentes coupable, mais juste pour dire.
|
||||
|
||||
> La journalisation est-elle sûre ?
|
||||
|
||||
Si vous êtes préoccupé par la sécurité, le fichier journal ne contient aucun mot de passe simple, alors ne vous inquiétez pas et expose les mêmes informations que le fichier frère "signets".
|
||||
|
||||
## Notifications 📫
|
||||
|
||||
Termscp enverra des notifications de bureau pour ce type d'événements :
|
||||
|
||||
- sur **Transfert terminé** : La notification sera envoyée une fois le transfert terminé avec succès.
|
||||
- ❗ La notification ne s'affichera que si la taille totale du transfert est au moins la `Notifications: minimum transfer size` spécifiée dans la configuration.
|
||||
- sur **Transfert échoué** : La notification sera envoyée une fois qu'un transfert a échoué en raison d'une erreur.
|
||||
- ❗ La notification ne s'affichera que si la taille totale du transfert est au moins la `Notifications: minimum transfer size` spécifiée dans la configuration.
|
||||
- sur **Mise à jour disponible** : chaque fois qu'une nouvelle version de Termscp est disponible, une notification s'affiche.
|
||||
- sur **Mise à jour installée** : chaque fois qu'une nouvelle version de Termscp est installée, une notification s'affiche.
|
||||
- sur **Échec de la mise à jour** : chaque fois que l'installation de la mise à jour échoue, une notification s'affiche.
|
||||
|
||||
❗ Si vous préférez désactiver les notifications, vous pouvez simplement accéder à la configuration et définir `Enable notifications?` sur `No` 😉.
|
||||
❗ Si vous souhaitez modifier la taille de transfert minimale pour afficher les notifications, vous pouvez modifier la valeur dans la configuration avec la touche `Notifications: minimum transfer size` et la définir sur ce qui vous convient le mieux 🙂.
|
||||
|
||||
## Observateur de fichiers 🔭
|
||||
|
||||
L'observateur de fichiers vous permet de configurer une liste de chemins à synchroniser avec les hôtes distants.
|
||||
Cela signifie que chaque fois qu'un changement sur le système de fichiers local sera détecté sur le chemin synchronisé, le changement sera automatiquement signalé au chemin de l'hôte distant configuré, dans les 5 secondes.
|
||||
|
||||
Vous pouvez définir autant de chemins à synchroniser que vous préférez :
|
||||
|
||||
1. Placez le curseur de l'explorateur local sur le répertoire/fichier que vous souhaitez conserver synchronisé
|
||||
2. Accédez au répertoire dans lequel vous souhaitez que les modifications soient signalées sur l'hôte distant
|
||||
3. Appuyez sur `<T>`
|
||||
4. Répondez `<YES>` à la fenêtre contextuelle de la radio
|
||||
|
||||
Pour annuler la surveillance, appuyez simplement sur `<T>` sur le chemin synchronisé local (ou sur l'un de ses sous-dossiers)
|
||||
OU vous pouvez simplement appuyer sur `<CTRL + T>` et appuyer sur `<ENTER>` jusqu'au chemin synchronisé que vous souhaitez désactiver.
|
||||
|
||||
Ces modifications seront signalées à l'hôte distant :
|
||||
|
||||
- Nouveaux fichiers, modifications de fichiers
|
||||
- Fichier déplacé / renommé
|
||||
- Fichier supprimé / dissocié
|
||||
|
||||
> ❗ Le watcher ne fonctionne que dans un sens (local > distant). Il n'est PAS possible de synchroniser automatiquement les changements de distant à local.
|
||||
299
docs/it/README.md
Normal file
@@ -0,0 +1,299 @@
|
||||
# termscp
|
||||
|
||||
<p align="center">
|
||||
<img src="/assets/images/termscp.svg" alt="logo" width="256" height="256" />
|
||||
</p>
|
||||
|
||||
<p align="center">~ Un file transfer ricco di funzionalità ~</p>
|
||||
<p align="center">
|
||||
<a href="https://termscp.veeso.dev" target="_blank">Sito</a>
|
||||
·
|
||||
<a href="https://termscp.veeso.dev/#get-started" target="_blank">Installazione</a>
|
||||
·
|
||||
<a href="https://termscp.veeso.dev/#user-manual" target="_blank">Manuale utente</a>
|
||||
</p>
|
||||
|
||||
<p align="center">
|
||||
<a href="https://github.com/veeso/termscp"
|
||||
><img
|
||||
height="20"
|
||||
src="/assets/images/flags/gb.png"
|
||||
alt="English"
|
||||
/></a>
|
||||
|
||||
<a
|
||||
href="https://github.com/veeso/termscp/blob/main/docs/pt-BR/README.md"
|
||||
><img
|
||||
height="20"
|
||||
src="/assets/images/flags/br.png"
|
||||
alt="Brazilian Portuguese"
|
||||
/></a>
|
||||
|
||||
<a
|
||||
href="https://github.com/veeso/termscp/blob/main/docs/de/README.md"
|
||||
><img
|
||||
height="20"
|
||||
src="/assets/images/flags/de.png"
|
||||
alt="Deutsch"
|
||||
/></a>
|
||||
|
||||
<a
|
||||
href="https://github.com/veeso/termscp/blob/main/docs/es/README.md"
|
||||
><img
|
||||
height="20"
|
||||
src="/assets/images/flags/es.png"
|
||||
alt="Español"
|
||||
/></a>
|
||||
|
||||
<a
|
||||
href="https://github.com/veeso/termscp/blob/main/docs/fr/README.md"
|
||||
><img
|
||||
height="20"
|
||||
src="/assets/images/flags/fr.png"
|
||||
alt="Français"
|
||||
/></a>
|
||||
|
||||
<a
|
||||
href="https://github.com/veeso/termscp/blob/main/docs/it/README.md"
|
||||
><img
|
||||
height="20"
|
||||
src="/assets/images/flags/it.png"
|
||||
alt="Italiano"
|
||||
/></a>
|
||||
|
||||
<a
|
||||
href="https://github.com/veeso/termscp/blob/main/docs/zh-CN/README.md"
|
||||
><img
|
||||
height="20"
|
||||
src="/assets/images/flags/cn.png"
|
||||
alt="简体中文"
|
||||
/></a>
|
||||
</p>
|
||||
|
||||
<p align="center">Sviluppato da <a href="https://veeso.me/" target="_blank">@veeso</a></p>
|
||||
<p align="center">Versione corrente: 0.17.0 24/03/2025</p>
|
||||
|
||||
<p align="center">
|
||||
<a href="https://opensource.org/licenses/MIT"
|
||||
><img
|
||||
src="https://img.shields.io/badge/License-MIT-teal.svg"
|
||||
alt="License-MIT"
|
||||
/></a>
|
||||
<a href="https://github.com/veeso/termscp/stargazers"
|
||||
><img
|
||||
src="https://img.shields.io/github/stars/veeso/termscp.svg"
|
||||
alt="Repo stars"
|
||||
/></a>
|
||||
<a href="https://crates.io/crates/termscp"
|
||||
><img
|
||||
src="https://img.shields.io/crates/d/termscp.svg"
|
||||
alt="Downloads counter"
|
||||
/></a>
|
||||
<a href="https://crates.io/crates/termscp"
|
||||
><img
|
||||
src="https://img.shields.io/crates/v/termscp.svg"
|
||||
alt="Latest version"
|
||||
/></a>
|
||||
<a href="https://ko-fi.com/veeso">
|
||||
<img
|
||||
src="https://img.shields.io/badge/donate-ko--fi-red"
|
||||
alt="Ko-fi"
|
||||
/></a>
|
||||
</p>
|
||||
<p align="center">
|
||||
<a href="https://github.com/veeso/termscp/actions"
|
||||
><img
|
||||
src="https://github.com/veeso/termscp/workflows/Linux/badge.svg"
|
||||
alt="Linux CI"
|
||||
/></a>
|
||||
<a href="https://github.com/veeso/termscp/actions"
|
||||
><img
|
||||
src="https://github.com/veeso/termscp/workflows/MacOS/badge.svg"
|
||||
alt="MacOS CI"
|
||||
/></a>
|
||||
<a href="https://github.com/veeso/termscp/actions"
|
||||
><img
|
||||
src="https://github.com/veeso/termscp/workflows/Windows/badge.svg"
|
||||
alt="Windows CI"
|
||||
/></a>
|
||||
<a href="https://github.com/veeso/termscp/actions"
|
||||
><img
|
||||
src="https://github.com/veeso/termscp/workflows/FreeBSD/badge.svg"
|
||||
alt="FreeBSD CI"
|
||||
/></a>
|
||||
<a href="https://coveralls.io/github/veeso/termscp"
|
||||
><img
|
||||
src="https://coveralls.io/repos/github/veeso/termscp/badge.svg"
|
||||
alt="Coveralls"
|
||||
/></a>
|
||||
</p>
|
||||
|
||||
---
|
||||
|
||||
## Riguardo a termscp 🖥
|
||||
|
||||
Termscp è un file transfer ed explorer ricco di funzionalità, con supporto a SCP/SFTP/FTP/Kube/S3/WebDAV. In pratica è un utility su terminale con una terminal user-interface per connettersi a server remoti per scambiare file ed interagire con il file system sia locale che remoto. È compatibile con **Linux**, **MacOS**, **FreeBSD** e **Windows**.
|
||||
|
||||

|
||||
|
||||
---
|
||||
|
||||
## Funzionalità 🎁
|
||||
|
||||
- 📁 Diversi protocolli di comunicazione
|
||||
- **SFTP**
|
||||
- **SCP**
|
||||
- **FTP** and **FTPS**
|
||||
- **Kube**
|
||||
- **S3**
|
||||
- **SMB**
|
||||
- **WebDAV**
|
||||
- 🖥 Esplora e opera sia sul file system locale che su quello remoto con una UI di facile utilizzo.
|
||||
- Crea, rimuove, rinomina, cerca, visualizza e modifica file
|
||||
- ⭐ Connettiti ai tuoi host preferiti tramite la funzionalità integrata dei segnalibri e delle connessioni recenti.
|
||||
- 📝 Visualizza e modifica i file tramite le tue applicazioni preferite.
|
||||
- 💁 Autenticazione su server SFTP/SCP tramite chiavi SSH e/o username/password
|
||||
- 🐧 Compatibile con Windows, Linux, FreeBSD e MacOS
|
||||
- 🎨 Customizzalo!
|
||||
- Temi
|
||||
- Formattazione dell'explorer
|
||||
- Impostazione del text editor predefinito
|
||||
- Imposta l'ordinamento di file e cartelle
|
||||
- e tanto altro...
|
||||
- 📫 Ricevi notifiche desktop quando un file di cospicue dimensioni è stato trasferito
|
||||
- 🔭 Mantieni sincronizzate le modifiche con l'host remoto
|
||||
- 🔐 Salva le password degli host remoti nel keyring predefinito dal tuo sistema operativo
|
||||
- 🦀 Rust-powered
|
||||
- 👀 Progettato tenendo conto delle performance
|
||||
- 🦄 Aggiornamenti frequenti con nuove funzionalità
|
||||
|
||||
---
|
||||
|
||||
## Per iniziare 🚀
|
||||
|
||||
Intanto se stai considerando di installare termscp, ti voglio ringraziare 💜 e spero che termscp ti piacerà!
|
||||
Se vuoi contribuire al progetto, non dimenticarti di leggere la [contribute guide](../../CONTRIBUTING.md).
|
||||
|
||||
Se sei un utente che utilizza Linux, FreeBSD o MacOS, questo shell script installerà termscp sul tuo sistema con un comando secco:
|
||||
|
||||
```sh
|
||||
curl -sSLf http://get-termscp.veeso.dev | sh
|
||||
```
|
||||
|
||||
mentre se sei un utente Windows, puoi installare termscp con [Chocolatey](https://chocolatey.org/):
|
||||
|
||||
```sh
|
||||
choco install termscp
|
||||
```
|
||||
|
||||
Per ulteriori informazioni sui metodi di installazione su altre piattaforme, visita [termscp.veeso.dev](https://termscp.veeso.dev/termscp/#get-started).
|
||||
|
||||
⚠️ Se stavi cercando come aggiornare la tua versione di termscp, puoi semplicemente lanciare termscp con questi argomenti: `(sudo) termscp --update` ⚠️
|
||||
|
||||
### Requisiti ❗
|
||||
|
||||
- **Linux** users:
|
||||
- libdbus-1
|
||||
- pkg-config
|
||||
- libsmbclient
|
||||
- **FreeBSD** or, **NetBSD** users:
|
||||
- dbus
|
||||
- pkgconf
|
||||
- libsmbclient
|
||||
|
||||
### Requisiti opzionali ✔️
|
||||
|
||||
Questi requisiti non sono per forza necessari, ma lo sono per sfruttare tutte le sue funzionalità:
|
||||
|
||||
- Utenti **Linux/FreeBSD**:
|
||||
- Per **aprire** i file con `V` (almeno uno di questi)
|
||||
- *xdg-open*
|
||||
- *gio*
|
||||
- *gnome-open*
|
||||
- *kde-open*
|
||||
- Utenti **Linux**:
|
||||
- Un keyring manager: Approfondisci nel [Manuale](man.md#linux-keyring)
|
||||
- Utenti **WSL**
|
||||
- Per **aprire** i file con `V` (almeno uno di questi)
|
||||
- [wslu](https://github.com/wslutilities/wslu)
|
||||
|
||||
---
|
||||
|
||||
## Supporta lo sviluppatore ☕
|
||||
|
||||
Se ti piace termscp e ti piacerebbe vedere il progetto crescere e migliorare, considera una piccola donazione 🥳.
|
||||
|
||||
Puoi fare una donazione tramite una di queste piattaforme:
|
||||
|
||||
[](https://ko-fi.com/veeso)
|
||||
[](https://www.paypal.me/chrisintin)
|
||||
|
||||
---
|
||||
|
||||
## Manuale utente 📚
|
||||
|
||||
Il manuale utente lo puoi trovare sul [sito di termscp](https://termscp.veeso.dev/termscp/#user-manual) o su [Github](man.md).
|
||||
|
||||
---
|
||||
|
||||
## Contributi e issues 🤝🏻
|
||||
|
||||
Contributi, report di bug, nuove funzionalità e domande sono i benvenuti! 😉
|
||||
Se hai qualche domanda o dubbio o vuoi suggerire una nuova funzionalità, sentiti libero di aprire un issue o una PR.
|
||||
|
||||
Per favore segui le nostre [contributing guidelines](../../CONTRIBUTING.md)
|
||||
|
||||
---
|
||||
|
||||
## Changelog ⏳
|
||||
|
||||
Visualizza [Qui](../../CHANGELOG.md) il changelog
|
||||
|
||||
---
|
||||
|
||||
## Un grazie a questi progetti 💪
|
||||
|
||||
se termscp esiste, è anche grazie a questi fantastici progetti:
|
||||
|
||||
- [bytesize](https://github.com/hyunsik/bytesize)
|
||||
- [crossterm](https://github.com/crossterm-rs/crossterm)
|
||||
- [edit](https://github.com/milkey-mouse/edit)
|
||||
- [keyring-rs](https://github.com/hwchen/keyring-rs)
|
||||
- [open-rs](https://github.com/Byron/open-rs)
|
||||
- [rpassword](https://github.com/conradkleinespel/rpassword)
|
||||
- [rust-s3](https://github.com/durch/rust-s3)
|
||||
- [self_update](https://github.com/jaemk/self_update)
|
||||
- [ssh2-rs](https://github.com/alexcrichton/ssh2-rs)
|
||||
- [suppaftp](https://github.com/veeso/suppaftp)
|
||||
- [ratatui](https://github.com/ratatui-org/ratatui)
|
||||
- [tui-realm](https://github.com/veeso/tui-realm)
|
||||
- [whoami](https://github.com/libcala/whoami)
|
||||
- [wildmatch](https://github.com/becheran/wildmatch)
|
||||
|
||||
---
|
||||
|
||||
## Galleria 🎬
|
||||
|
||||
> Termscp Home
|
||||
|
||||

|
||||
|
||||
> Bookmarks
|
||||
|
||||

|
||||
|
||||
> Configurazione
|
||||
|
||||

|
||||
|
||||
> Text editor
|
||||
|
||||

|
||||
|
||||
---
|
||||
|
||||
## Licenza 📃
|
||||
|
||||
termscp è fornito sotto licenza MIT.
|
||||
|
||||
Puoi leggere l'intero documento di licenza [Qui](../../LICENSE)
|
||||
597
docs/it/man.md
Normal file
@@ -0,0 +1,597 @@
|
||||
# Manuale utente 🎓
|
||||
|
||||
- [Manuale utente 🎓](#manuale-utente-)
|
||||
- [Argomenti da linea di comando ❓](#argomenti-da-linea-di-comando-)
|
||||
- [Argomento indirizzo 🌎](#argomento-indirizzo-)
|
||||
- [Argomento indirizzo per AWS S3](#argomento-indirizzo-per-aws-s3)
|
||||
- [Argomento indirizzo Kube](#argomento-indirizzo-kube)
|
||||
- [Argomento indirizzo per WebDAV](#argomento-indirizzo-per-webdav)
|
||||
- [Indirizzo SMB](#indirizzo-smb)
|
||||
- [Come fornire la password 🔐](#come-fornire-la-password-)
|
||||
- [Parametri di connessione S3](#parametri-di-connessione-s3)
|
||||
- [Credenziali S3 🦊](#credenziali-s3-)
|
||||
- [File explorer 📂](#file-explorer-)
|
||||
- [Abbinamento tasti ⌨](#abbinamento-tasti-)
|
||||
- [Lavora con più file 🥷](#lavora-con-più-file-)
|
||||
- [Esempio](#esempio)
|
||||
- [Synchronized browsing ⏲️](#synchronized-browsing-️)
|
||||
- [Apri e apri con 🚪](#apri-e-apri-con-)
|
||||
- [Segnalibri ⭐](#segnalibri-)
|
||||
- [Le mie password sono al sicuro 😈](#le-mie-password-sono-al-sicuro-)
|
||||
- [Linux Keyring](#linux-keyring)
|
||||
- [KeepassXC setup per termscp](#keepassxc-setup-per-termscp)
|
||||
- [Configurazione ⚙️](#configurazione-️)
|
||||
- [SSH Key Storage 🔐](#ssh-key-storage-)
|
||||
- [File Explorer Format](#file-explorer-format)
|
||||
- [Temi 🎨](#temi-)
|
||||
- [Il tema non carica 😱](#il-tema-non-carica-)
|
||||
- [Stili 💈](#stili-)
|
||||
- [Pagina autenticazione](#pagina-autenticazione)
|
||||
- [Pagina explorer e trasferimento](#pagina-explorer-e-trasferimento)
|
||||
- [Misc](#misc)
|
||||
- [Editor di testo ✏](#editor-di-testo-)
|
||||
- [Logging 🩺](#logging-)
|
||||
- [Notifiche 📫](#notifiche-)
|
||||
- [File watcher 🔭](#file-watcher-)
|
||||
|
||||
## Argomenti da linea di comando ❓
|
||||
|
||||
termscp può essere lanciato con questi argomenti:
|
||||
|
||||
`termscp [options]... [protocol://user@address:port:wrkdir] [protocol://user@address:port:wrkdir] [local-wrkdir]`
|
||||
|
||||
O
|
||||
|
||||
`termscp [options]... -b [bookmark-name] -b [bookmark-name] [local-wrkdir]`
|
||||
|
||||
- `-P, --password <password>` Se viene fornito l'argomento indirizzo, questa sarà la password utilizzata per autenticarsi
|
||||
- `-b, --address-as-bookmark` risolve l'argomento indirizzo come nome di un segnalibro
|
||||
- `-q, --quiet` Disabilita i log
|
||||
- `-v, --version` Mostra a video le informazioni sulla versione attualmente installata
|
||||
- `-h, --help` Mostra la pagina di aiuto.
|
||||
|
||||
termscp può venire lanciato in due modalità diverse. Se nessun argomento posizionale viene fornito, termscp mostrerà il form di autenticazione, dove l'utente potrà fornire i parametri di connessione necessari.
|
||||
Alternativamente, l'utente può fornire l'argomento posizionale "indirizzo" per connettersi direttamente all'host fornito.
|
||||
Se viene fornito anche il secondo argomento posizionale, ovvero la directory locale, termscp avvierà l'explorer locale sul percorso fornito.
|
||||
|
||||
### Argomento indirizzo 🌎
|
||||
|
||||
L'argomento indirizzo ha la sintassi seguente:
|
||||
|
||||
```txt
|
||||
[protocollo://][username@]<indirizzo>[:porta][:wrkdir]
|
||||
```
|
||||
|
||||
Vediamo qualche esempio per questa sintassi, dal momento che risulta molto comodo connettersi tramite questa modalità:
|
||||
|
||||
- Connessione utilizzando il protocollo di default (definito in configurazione) a 192.168.1.31, la porta sarà quella di default per il protocollo di default. Il nome utente è quello attualmente attivo sulla propria macchina:
|
||||
|
||||
```sh
|
||||
termscp 192.168.1.31
|
||||
```
|
||||
|
||||
- Connessione con protocollo di default a 192.168.1.31, utente è `root`:
|
||||
|
||||
```sh
|
||||
termscp root@192.168.1.31
|
||||
```
|
||||
|
||||
- Connessione usando `scp`, la porta è 4022, l'utente è `omar`:
|
||||
|
||||
```sh
|
||||
termscp scp://omar@192.168.1.31:4022
|
||||
```
|
||||
|
||||
- Connessione via `scp`, porta 4022, utente `omar`, l'explorer si avvierà in `/tmp`:
|
||||
|
||||
```sh
|
||||
termscp scp://omar@192.168.1.31:4022:/tmp
|
||||
```
|
||||
|
||||
#### Argomento indirizzo per AWS S3
|
||||
|
||||
Aws S3 ha una sintassi differente dal classico argomento indirizzo, per ovvie ragioni, in quanto S3 non ha la porta o l'host o l'utente. Ho deciso però di mantenere una sintassi il più simile possibile a quella "tradizionale":
|
||||
|
||||
```txt
|
||||
s3://<bucket-name>@<region>[:profile][:/wrkdir]
|
||||
```
|
||||
|
||||
e.g.
|
||||
|
||||
```txt
|
||||
s3://buckethead@eu-central-1:default:/assets
|
||||
```
|
||||
|
||||
#### Argomento indirizzo Kube
|
||||
|
||||
Nel caso tu voglia connetterti a Kube usa la seguente sintassi
|
||||
|
||||
```txt
|
||||
kube://[namespace][@<cluster_url>][$</path>]
|
||||
```
|
||||
|
||||
#### Argomento indirizzo per WebDAV
|
||||
|
||||
Nel caso in cui si desideri connettersi a WebDAV utilizzare la seguente sintassi
|
||||
|
||||
```txt
|
||||
http://<username>:<password>@<url></path>
|
||||
```
|
||||
|
||||
oppure nel caso in cui si desideri utilizzare https
|
||||
|
||||
```txt
|
||||
https://<username>:<password>@<url></path>
|
||||
```
|
||||
|
||||
#### Indirizzo SMB
|
||||
|
||||
SMB ha una sintassi differente rispetto agli altri protocolli e cambia in base al sistema operativo:
|
||||
|
||||
**Windows**:
|
||||
|
||||
```txt
|
||||
\\[username@]<server-name>\<share>[\path\...]
|
||||
```
|
||||
|
||||
**Altri sistemi**:
|
||||
|
||||
```txt
|
||||
smb://[username@]<server-name>[:port]/<share>[/path/.../]
|
||||
```
|
||||
|
||||
|
||||
#### Come fornire la password 🔐
|
||||
|
||||
Quando si usa l'argomento indirizzo non è possibile fornire la password direttamente nell'argomento, esistono però altri metodi per farlo:
|
||||
|
||||
- Argomento `-P, --password <password>`: Passa direttamente la password nell'argomento. Non lo consiglio particolarmente questo metodo, in quanto la password rimarrebbe nella history della shell in chiaro.
|
||||
- Tramite `sshpass`: puoi fornire la password tramite l'applicazione GNU/Linux sshpass `sshpass -f ~/.ssh/topsecret.key termscp cvisintin@192.168.1.31`
|
||||
- Forniscila quando richiesta: se non la fornisci tramite nessun metodo precedente, alla connessione ti verrà richiesto di fornirla in un prompt che la oscurerà (come avviene con sudo tipo).
|
||||
|
||||
---
|
||||
|
||||
## Parametri di connessione S3
|
||||
|
||||
Questi parametri sono necessari per connettersi ad un bucket Aws s3 o ad uno storage compatibile:
|
||||
|
||||
- AWS S3:
|
||||
- **bucket name**
|
||||
- **region**
|
||||
- *profile* (se non fornito: "default")
|
||||
- *access key* (a meno che non sia pubblico)
|
||||
- *secret access key* (a meno che non sia pubblico)
|
||||
- *security token* (se necessario)
|
||||
- *session token* (se necessario)
|
||||
- new path style: **NO**
|
||||
- Other S3 endpoints:
|
||||
- **bucket name**
|
||||
- **endpoint**
|
||||
- *access key* (a meno che non sia pubblico)
|
||||
- *secret access key* (a meno che non sia pubblico)
|
||||
- new path style: **YES**
|
||||
|
||||
### Credenziali S3 🦊
|
||||
|
||||
Per connettersi ad un bucket S3 devi come già saprai fornire le credenziali fornite da AWS.
|
||||
Ci sono tre modi per passare queste credenziali a termscp.
|
||||
Questi sono quindi i tre modi per passare le chiavi:
|
||||
|
||||
1. Form di autenticazione:
|
||||
1. Puoi fornire la `access_key` (dovrebbe essere obbligatoria), la `secret_access_key` (dovrebbe essere obbligatoria), il `security_token` ed il `session_token`
|
||||
2. Se salvi la connessione s3 come segnalibro e decidi di salvare la password, questi parametri verranno salvati nel file dei segnalibri criptati con AES-256/BASE64; ad eccezion fatta per i due token, che dovrebbero essere credenziali temporanee, quindi inutili da salvare.
|
||||
2. Utilizza il file delle credenziali s3: configurando aws via `aws configure` le tue credenziali dovrebbero già venir salvate in `~/.aws/credentials`. Nel caso tu debba usare un profile diverso da `default`, puoi fornire un profilo diverso nell'authentication form.
|
||||
3. **Variabili d'ambiente**: nel caso il primo metodo non sia utilizzabile, puoi comunque fornirle come variabili d'ambiente. Considera però che queste variabili sovrascriveranno sempre le credenziali situate nel file credentials. Vediamo come impostarle:
|
||||
|
||||
Queste sono sempre obbligatorie:
|
||||
|
||||
- `AWS_ACCESS_KEY_ID`: aws access key ID (di solito inizia per `AKIA...`)
|
||||
- `AWS_SECRET_ACCESS_KEY`: la secret access key
|
||||
|
||||
nel caso tu abbia impostato un maggiore livello di sicurezza, potrebbero servirti anche queste:
|
||||
|
||||
- `AWS_SECURITY_TOKEN`: security token
|
||||
- `AWS_SESSION_TOKEN`: session token
|
||||
|
||||
⚠️ le tue credenziali sono al sicuro: termscp non manipola direttamente questi dati! Le credenziali sono direttamente lette dal crate di **s3**. Nel caso tu abbia dei dubbi sulla sicurezza, puoi contattare l'autore della libreria su [Github](https://github.com/durch/rust-s3) ⚠️
|
||||
|
||||
---
|
||||
|
||||
## File explorer 📂
|
||||
|
||||
Quando ci riferiamo al file explorer in termscp, intendiamo i pannelli che puoi vedere quando stabilisci una connessione con il server remoto.
|
||||
Questi pannelli sono 3 (e non 2 come sembra):
|
||||
|
||||
- Pannello locale: viene visualizzato sulla sinistra del tuo schermo e mostra la cartella sul file system locale.
|
||||
- Pannello remoto: viene visualizzato sulla destra del tuo schermo e mostra la cartella sul file system remoto.
|
||||
- Pannello di ricerca: viene visualizzato a destra o a sinistra in base a dove stai cercando dei file. Questo pannello mostra i file che matchano al pattern cercato sull'host.
|
||||
|
||||
Per cambiare pannello ti puoi muovere con le frecce, `<LEFT>` per andare sul pannello locale e `<RIGHT>` per andare su quello remoto. Attenzione che quando è attivo il pannello ricerca non puoi spostarti sugli altri pannelli e devi prima chiuderlo con `<ESC>`.
|
||||
|
||||
### Abbinamento tasti ⌨
|
||||
|
||||
| Key | Command | Reminder |
|
||||
|---------------|-------------------------------------------------------|-------------|
|
||||
| `<ESC>` | Disconnettiti; chiudi popup | |
|
||||
| `<BACKSPACE>` | Vai alla directory precedente | |
|
||||
| `<TAB>` | Cambia pannello remoto | |
|
||||
| `<RIGHT>` | Vai al pannello remoto | |
|
||||
| `<LEFT>` | Vai al pannello locale | |
|
||||
| `<UP>` | Muovi il cursore verso l'alto | |
|
||||
| `<DOWN>` | Muovi il cursore verso il basso | |
|
||||
| `<PGUP>` | Muovi il cursore verso l'alto di 8 | |
|
||||
| `<PGDOWN>` | Muovi il cursore verso il basso di 8 | |
|
||||
| `<ENTER>` | Entra nella directory | |
|
||||
| `<SPACE>` | Upload / download file selezionato/i | |
|
||||
| `<BACKTAB>` | Cambia tra explorer e pannello di log | |
|
||||
| `<A>` | Mostra/nascondi file nascosti | All |
|
||||
| `<B>` | Ordina file per | Bubblesort? |
|
||||
| `<C|F5>` | Copia file/directory | Copy |
|
||||
| `<D|F7>` | Crea directory | Directory |
|
||||
| `<E|F8|DEL>` | Elimina file | Erase |
|
||||
| `<F>` | Cerca file (wild match supportato) | Find |
|
||||
| `<G>` | Vai al percorso indicato | Go to |
|
||||
| `<H|F1>` | Mostra help | Help |
|
||||
| `<I>` | Mostra informazioni per il file selezionato | Info |
|
||||
| `<K>` | Crea un link simbolico che punta al file selezionato | symlinK |
|
||||
| `<L>` | Ricarica posizione corrente / pulisci selezione file | List |
|
||||
| `<M>` | Seleziona file | Mark |
|
||||
| `<N>` | Crea nuovo file con il nome fornito | New |
|
||||
| `<O|F4>` | Modifica file; Vedi text editor | Open |
|
||||
| `<P>` | Apri pannello log | Panel |
|
||||
| `<Q|F10>` | Termina termscp | Quit |
|
||||
| `<R|F6>` | Rinomina file | Rename |
|
||||
| `<S|F2>` | Salva file con nome | Save |
|
||||
| `<T>` | Sincronizza il percorso locale con l'host remoto | Track |
|
||||
| `<U>` | Vai alla directory padre | Upper |
|
||||
| `<V|F3>` | Apri il file con il programma definito dal sistema | View |
|
||||
| `<W>` | Apri il file con il programma specificato | With |
|
||||
| `<X>` | Esegui comando shell | eXecute |
|
||||
| `<Y>` | Abilita/disabilita Sync-Browsing | sYnc |
|
||||
| `<Z>` | Modifica permessi file | |
|
||||
| `</>` | Filtra i file (supporta sia regex che wildmatch ) | |
|
||||
| `<CTRL+A>` | Seleziona tutti i file | |
|
||||
| `<ALT+A>` | Deseleziona tutti i file | |
|
||||
| `<CTRL+C>` | Annulla trasferimento file | |
|
||||
| `<CTRL+T>` | Visualizza tutti i percorsi sincronizzati | Track |
|
||||
|
||||
### Lavora con più file 🥷
|
||||
|
||||
Puoi scegliere di lavorare con più file, usando questi semplici comandi:
|
||||
|
||||
- `<M>`: marca un file per la selezione
|
||||
- `<CTRL+A>`: seleziona tutti i file nella directory corrente
|
||||
- `<ALT+A>`: deseleziona tutti i file
|
||||
|
||||
Una volta che un file è stato selezionato, verrà **evidenziato con uno sfondo colorato** .
|
||||
Quando lavori su una selezione, solo i file selezionati verranno processati per le azioni, mentre l'elemento attualmente evidenziato sarà ignorato.
|
||||
|
||||
È possibile lavorare con più file anche dal pannello dei risultati di ricerca.
|
||||
|
||||
Tutte le azioni sono disponibili anche quando si lavora con più file, ma alcune funzionano in modo leggermente diverso. Ecco i dettagli:
|
||||
|
||||
- *Copia*: quando copi un file, ti verrà chiesto di inserire il nome di destinazione. Con più file selezionati, questo nome rappresenta la cartella di destinazione dove verranno copiati.
|
||||
- *Rinomina*: come la copia, ma i file verranno spostati lì.
|
||||
- *Salva come*: come la copia, ma i file verranno salvati lì.
|
||||
|
||||
Se selezioni un file in una directory (es. `/home`) e poi cambi directory, il file rimarrà selezionato e sarà visibile nella **coda di trasferimento** nel pannello inferiore.
|
||||
Quando un file viene selezionato, la directory *remota* corrente viene associata all’elemento; quindi, se il file viene trasferito, verrà trasferito nella directory associata.
|
||||
|
||||
#### Esempio
|
||||
|
||||
Se selezioniamo un file locale `/home/a.txt`, siamo su `/tmp` nel pannello remoto, poi ci spostiamo su `/var`, selezioniamo `/var/b.txt`, e sul pannello remoto siamo su `/home`, eseguendo il trasferimento otterremo:
|
||||
|
||||
- `/home/a.txt` trasferito su `/tmp/a.txt`
|
||||
- `/var/b.txt` trasferito su `/home/b.txt`
|
||||
|
||||
### Synchronized browsing ⏲️
|
||||
|
||||
Quando abilitato, ti permetterà di sincronizzare la navigazione tra i due pannelli.
|
||||
Ciò comporta che quando cambierai directory in uno dei due pannelli, lo stesso verrà fatto nell'altro. Per abilitare la modalità è sufficiente premere `<Y>`; fai lo stesso per disabilitarlo. Mentre abilitato, sull'interfaccia dovrebbe essere visualizzato `Sync Browsing: ON` nella barra di stato.
|
||||
|
||||
### Apri e apri con 🚪
|
||||
|
||||
I comandi "apri" e "apri con" sono forniti da [open-rs](https://docs.rs/crate/open/2.1.0).
|
||||
Quando apri un file (`<V>`), l'applicazione predefinita di sistema sarà utilizzata per aprire il file. Per fare ciò, sul tuo sistema dovrà essere usato il servizio di default del sistema.
|
||||
|
||||
- **Windows**: non devi installare niente, è già presente sul sistema.
|
||||
- **MacOS**: non devi installare niente, è già presente sul sistema.
|
||||
- **Linux**: uno di questi dev'essere presente (potrebbe già esserlo):
|
||||
- *xdg-open*
|
||||
- *gio*
|
||||
- *gnome-open*
|
||||
- *kde-open*
|
||||
- **WSL**: *wslview* è richiesto, lo puoi installare tramite questa suite [wslu](https://github.com/wslutilities/wslu).
|
||||
|
||||
> Q: Posso modificare i file su remoto tramite la funzionalità "apri" / "apri con"?
|
||||
> A: No, almeno non direttamente dal pannello remoto. Devi prima scaricarlo in locale, modificarlo e poi ricaricarlo. Questo perché il file remoto viene scaricato come file temporaneo in locale, ma non esiste poi un modo per sapere quando è stato modificato e quando l'utente ha effettivamente finito di lavorarci.
|
||||
|
||||
---
|
||||
|
||||
## Segnalibri ⭐
|
||||
|
||||
In termscp è possibile salvare i tuoi host preferiti tramite i segnalibri al fine di connettersi velocemente ad essi.
|
||||
Termscp salverà anche gli ultimi 16 host ai quali ti sei connesso.
|
||||
Questa funzionalità ti permette di caricare tutti i parametri necessari per connettersi ad un certo host, semplicemente selezioandolo dal tab dei preferiti nel form di autenticazione.
|
||||
|
||||
I preferiti saranno salvati se possibile presso:
|
||||
|
||||
- `$HOME/.config/termscp/` su Linux/BSD
|
||||
- `$HOME/Library/Application Support/termscp` su MacOs
|
||||
- `FOLDERID_RoamingAppData\termscp\` su Windows
|
||||
|
||||
Per i segnalibri (ma non per le connessioni recenti), è anche possibile salvare la password. La password non viene salvata di default e deve essere specificato tramite apposita opzione, al momento della creazione del segnalibro stesso.
|
||||
Se sei preoccupato riguardo alla sicurezza della password per i segnalibri, dai un'occhiata al capitolo qui sotto 👀.
|
||||
|
||||
Per creare un segnalibro, segui questa procedura:
|
||||
|
||||
1. Inserisci i parametri per connetterti all'host che vuoi inserire come segnalibro nell'authentication form.
|
||||
2. Premi `<CTRL+S>`
|
||||
3. Inserisci il nome che vuoi dare al bookmark
|
||||
4. Seleziona nel radio button se salvare la password
|
||||
5. Premi `<ENTER>` per salvare
|
||||
|
||||
Quando vuoi caricare un segnalibro, premi `<TAB>` e naviga nella lista dei segnalibri fino al segnalibro che vuoi caricare, quindi premi `<ENTER>`.
|
||||
|
||||

|
||||
|
||||
### Le mie password sono al sicuro 😈
|
||||
|
||||
Certo 😉.
|
||||
Come detto in precedenza, i segnalibri sono salvati nella cartella delle configurazioni insieme alle password. Le password però non sono in chiaro, ma bensì sono criptate con **AES-128**. Questo le rende sicure? Sì! Does this make them safe? (salvo che per gli utenti di FreeBSD e WSL 😢)
|
||||
|
||||
In **Windows**, **Linux** and **MacOS** la chiave per criptare le password è salvata, se possibile, rispettivamente nel *Windows Vault*, nel *system keyring* e nel *Keychain*. Questo sistema è super-sicuro, in quanto garantito direttamente dal tuo sistema operativo.
|
||||
|
||||
❗ Attenzione che se sei un utente Linux, dovresti leggere il capitolo qui sotto riguardante il linux keyring 👀, questo perché il keyring potrebbe non essere ancora presente sul tuo sistema.
|
||||
|
||||
Su *FreeBSD* e *WSL*, d'altro canto, la chiave utilizzata per criptare le password è salvata su file presso (at $HOME/.config/termscp). È quindi possibile per un malintenzionato ottenere la chiave. Per fortuna essendo sotto la tua home, non dovrebbe essere possibile accedere al file, se non con il tuo utente, ma comunque per sicurezza ti consiglio di non salvare dati sensibili 😉.
|
||||
|
||||
#### Linux Keyring
|
||||
|
||||
Tutti gli amanti di Linux lo preferiscono per la libertà che questo dà agli utenti nella personalizzazione. Allo stesso tempo però questo spesso comporta degli effetti collaterali, tra cui la mancanza spesso di un'imposizione da parte dei creatori delle distro di standard e applicazioni e questo fatto coinvolge anche la questione del keyring.
|
||||
Su alcuni sistemi di default, non c'è nessun provider di keyring, perché la distro dà all'utente la possibilità di sceglierne uno.
|
||||
termscp richiede un servizio D-BUS che fornisce `org.freedesktop.secrets` e purtroppo ci sono ad oggi solo due servizi mantenuti che lo supportano.
|
||||
|
||||
- ❗ Se usi GNOME come Desktop environment (come gli utenti Ubuntu), dovresti già averne uno installato sul sistema, chiamato `gnome-keyring` e quindi dovrebbe già funzionare tutto.
|
||||
- ❗ Se invece usi un altro DE, dovresti installare [KeepassXC](https://keepassxc.org/), che io per esempio utilizzo sul mio Manjaro Linux (con KDE) e funziona piuttosto bene. L'unico problema è che dovrai fare il setup per farlo funzionare. Per farlo puoi leggere il tutorial [qui](#keepassxc-setup-per-termscp)
|
||||
- ❗ Se non volessi installare uno di questi servizi, termscp funzionerà come sempre, l'unica differenza sarà che salverà la chiave di crittazione su un file, come fa per FreeBSD e WSL.
|
||||
|
||||
##### KeepassXC setup per termscp
|
||||
|
||||
Questo tutorial spiega come impostare KeepassXC per termscp.
|
||||
|
||||
1. Installa KeepassXC dal sito ufficiale <https://keepassxc.org/>
|
||||
2. Una volta avviato, vai su "strumenti" > "impostazioni" nella toolbar
|
||||
3. Seleziona "Secret service integration" e abilita "Enable KeepassXC freedesktop.org secret service integration"
|
||||
4. Crea un database se non ne hai già uno: dalla toolbar "Database" > "Nuovo database"
|
||||
5. Dalla toolbar: "Database" > "Impostazioni database"
|
||||
6. Seleziona "Secret service integration" e abilita "Expose entries under this group"
|
||||
7. Seleziona il gruppo in cui vuoi salvare le chiavi di termscp. Attenzione che questo gruppo sarà utilizzato da tutte le altre eventuali applicazioni che salvano le password via D-BUS.
|
||||
|
||||
---
|
||||
|
||||
## Configurazione ⚙️
|
||||
|
||||
termscp supporta diversi parametri definiti dall'utente, che possono essere impostati nella configurazione.
|
||||
termscp usa un file TOML e altre directory per salvare tutti i parametri, ma non preoccuparti, tutto può essere comodamente configurato da interfaccia grafica.
|
||||
|
||||
Per la configurazione, termscp richiede che i seguenti percorsi siano accessibili (termscp proverà a crearli per te):
|
||||
|
||||
- `$HOME/.config/termscp/` su Linux/BSD
|
||||
- `$HOME/Library/Application Support/termscp` su MacOs
|
||||
- `FOLDERID_RoamingAppData\termscp\` su Windows
|
||||
|
||||
Per accedere alla configurazione è sufficiente premere `<CTRL+C>` dall'authentication form.
|
||||
|
||||
Questi parametri possono essere impostati:
|
||||
|
||||
- **Text Editor**: l'editor di testo da utilizzare per aprire i file. Di default termscp userà quello definito nella variabile `EDITOR` od il primo che troverà installato tra quelli più popolari. Puoi tuttavia definire quello che vuoi (ad esempio `vim`). **Anche gli editor GUI sono supportati**, a meno che loro non partano in `nohup` dal processo padre.
|
||||
- **Default Protocol**: il protocollo di default da visualizzare come prima opzione nell'authentication form. Questa opzione sarà anche utilizzata quando si usa l'argomento indirizzo da CLI e non si specifica un protocollo.
|
||||
- **Show Hidden Files**: seleziona se mostrare di default i file nascosti. A runtime potrai comunque scegliere se visualizzarli o meno premendo `<A>`.
|
||||
- **Check for updates**: se impostato a `YES` all'avvio termscp controllerà l'eventuale presenza di aggiornamenti. Per farlo utilizzerà una chiamata GET all'API di Github.
|
||||
- **Prompt when replacing existing files?**: se impostato a `yes`, termscp ti chiederà una conferma prima di sovrascrivere un file a seguito di un download/upload.
|
||||
- **Group Dirs**: seleziona se e come raggruppare le cartelle negli explorer. Se `Display first` è impostato, le directory verranno ordinate secondo quanto stabilito nel `sort by`, ma verranno messe prima dei file, viceversa se `Display last` è utilizzato. Se invece metti `no`, le cartelle verrano messe in ordine assieme ad i file.
|
||||
- **Remote File formatter syntax**: La formattazione da usare per formattare i file sull'explorer remoto. Vedi [File explorer format](#file-explorer-format)
|
||||
- **Local File formatter syntax**: La formattazione da usare per formattare i file sull'explorer locale. Vedi [File explorer format](#file-explorer-format)
|
||||
- **Enable notifications?**: Se impostato a `yes`, le notifiche desktop saranno abilitate.
|
||||
- **Notifications: minimum transfer size**: se la dimensione di un trasferimento supera o è uguale al valore impostato, al termine del trasferimento riceverai una notifica desktop (se queste sono abilitate). Il formato del valore dev'essere `{UNSIGNED} B/KB/MB/GB/TB/PB`
|
||||
- **SSH configuration path**: Imposta il percorso del file di configurazione per SSH, per quando ci si connette ad un server SFTP/SCP. Se lasciato vuoto, nessun file verrà usato. Il percorso può anche iniziare con `~` per indicare il percorso della home dell'utente attuale (e.s. `~/.ssh/config`). I parametri supportati dalla configurazioni sono descritti [QUI](https://github.com/veeso/ssh2-config#exposed-attributes).
|
||||
|
||||
### SSH Key Storage 🔐
|
||||
|
||||
Assieme alla configurazione termscp supporta anche una feature essenziale per i client **SFTP/SCP**: lo storage di chiavi SSH.
|
||||
|
||||
Puoi accedere allo storage muovendoti nel tab delle chiavi SSH tramite `<TAB>` dalla configurazione.
|
||||
|
||||
- **Aggiungere chiavi**: premi `<CTRL+N>` e ti verrà chiesto di creare una nuova chiave. Inserisci l'hostname/indirizzo ed il nome utente, infine una volta che premerai invio, ti si aprirà l'editor di testo: incolla la chiave SSH **PRIVATA**, salva ed esci.
|
||||
- **Rimuovi una chiave esistente**: premi `<DEL>` o `<CTRL+E>` selezionando la chiave da rimuovere.
|
||||
- **Aggiorna una chiave esistente**: premi `<ENTER>` sulla chiave che vuoi modificare.
|
||||
|
||||
> Q: Se la mia chiave è protetta da password, posso comunque usarla?
|
||||
> A: Sì, certo. In questo caso dovrai fornire la password come faresti per autenticarti con utente/password, ma in questo caso la password sarà usata per decrittare la chiave.
|
||||
|
||||
### File Explorer Format
|
||||
|
||||
È possibile dalla configurazione impostare la formattazione dei file sull'explorer. È possibile sia farlo per il pannello locale, che per quello remoto; quindi puoi avere due sintassi diverse. Questi campi, con nome `File formatter syntax (local)` and `File formatter syntax (remote)` definiranno come i file devono essere formattati sull'explorer.
|
||||
La sintassi è la seguente `{KEY1}... {KEY2:LENGTH}... {KEY3:LENGTH:EXTRA} {KEYn}...`.
|
||||
Ogni chiave sarà rimpiazzata dal formatter con il relativo attributo, mentre tutto ciò che è fuori dalle parentesi graffe rimarrà inviariato (quindi puoi metterci del testo arbitratio).
|
||||
|
||||
- Il nome della chiave è obbligatorio e dev'essere uno di quelli sotto.
|
||||
- La lunghezza descrive quanto spazio in caratteri riservare al campo. Attributi con dimensione statico (GROUP, PEX, SIZE, USER) non supportano la lunghezza.
|
||||
- L'extra serve a definire degli attributi in più. Solo alcuni lo supportano.
|
||||
|
||||
These are the keys supported by the formatter:
|
||||
|
||||
- `ATIME`: Last access time (con sintassi di default `%b %d %Y %H:%M`); Extra definisce il formato data (e.g. `{ATIME:8:%H:%M}`)
|
||||
- `CTIME`: Creation time (con sintassi di default `%b %d %Y %H:%M`); Extra definisce il formato data (e.g. `{CTIME:8:%H:%M}`)
|
||||
- `GROUP`: Owner group
|
||||
- `MTIME`: Last change time (con sintassi di default `%b %d %Y %H:%M`); Extra definisce il formato data (e.g. `{MTIME:8:%H:%M}`)
|
||||
- `NAME`: Nome file (Le cartelle comprese tra la root ed il genitore del file sono omessi se la lunghezza è maggiore di LENGTH)
|
||||
- `PATH`: Percorso assoluto del file (Le cartelle comprese tra la root ed il genitore del file sono omessi se la lunghezza è maggiore di LENGHT)
|
||||
- `PEX`: Permessi utente (formato UNIX)
|
||||
- `SIZE`: Dimensione file (omesso per le directory)
|
||||
- `SYMLINK`: Link simbolico (se presente `-> {FILE_PATH}`)
|
||||
- `USER`: Owner user
|
||||
|
||||
Se lasciata vuota, la sintassi di default sarà utilizzata: `{NAME:24} {PEX} {USER} {SIZE} {MTIME:17:%b %d %Y %H:%M}`
|
||||
|
||||
---
|
||||
|
||||
## Temi 🎨
|
||||
|
||||
termscp fornisce anche una funzionalità strafiga: la possibilità di impostare i colori per tutta l'interfaccia.
|
||||
Se vuoi impostare i colori, ci sono due modi per farlo:
|
||||
|
||||
- dal **menù di configurazione**
|
||||
- importando un **tema** da file
|
||||
|
||||
Per personalizzare i colori dovrai andare nella configurazione temi, partendo dal menù di autenticazione, premendo `<CTRL+C>` e premendo due volte `<TAB>`. Dovresti essere quindi in configurazione nel tab `themes`.
|
||||
|
||||
Da qui puoi spostarti con le frecce per cambiare lo stile che vuoi, come mostrato nella GIF qua sotto:
|
||||
|
||||

|
||||
|
||||
termscp supporta diverse sintassi per i colori, sia il formato hex (`#rrggbb`) che rgb `rgb(r, g, b)`, ma anche i **[colori CSS](https://www.w3schools.com/cssref/css_colors.asp)** (tipo `crimson`) 😉. C'è anche una chiave speciale `Default`. Default significa che per il colore verrà usato il default in base al tipo di elemento (foreground per i testi e linee, background per gli sfondi e i riempimenti).
|
||||
|
||||
Come detto già in precedenza, puoi anche importare i temi da file. Volendo puoi anche creare un tema prendendo ispirazione da quelli situati nella cartella `themes/` del repository ed importarli su termscp con `termscp -t <theme_file>`. Se l'operazione va a buon fine dovrebbe dirti che l'ha importato con successo.
|
||||
|
||||
### Il tema non carica 😱
|
||||
|
||||
Probabilmente è dovuto ad un aggiornamento che ha rotto il tema. Se viene aggiunta una nuova chiave nel tema (ma questo accade molto raramente), il tema non verrà più caricato. Ci sono diverse soluzioni veloci per questo problema.
|
||||
|
||||
1. Ricarica il tema: se stai usando un tema "ufficiale" fornito nel repository, basterà ricaricarlo, perché li aggiorno sempre quando modifico i temi:
|
||||
|
||||
```sh
|
||||
termscp -t <theme.toml>
|
||||
```
|
||||
|
||||
2. Sistema il tuo tema a mano: puoi modificare il tuo tema con un editor di testo tipo `vim` e aggiungere la chiave mancante. Il il tema si trova in `$CONFIG_DIR/termscp/theme.toml` dove `$CONFIG_DIR` è:
|
||||
|
||||
- FreeBSD/GNU-Linux: `$HOME/.config/`
|
||||
- MacOs: `$HOME/Library/Application Support`
|
||||
- Windows: `%appdata%`
|
||||
|
||||
❗ Le chiavi mancanti vengono riportate nel CHANGELOG sotto `BREAKING CHANGES` per la versione installata.
|
||||
|
||||
### Stili 💈
|
||||
|
||||
Puoi trovare qui sotto la definizione per ogni chiave.
|
||||
Attenzione che gli stili **non coinvolgono la pagina di configurazione**, per renderla sempre accessibile nel caso gli stili siano inutilizzabili.
|
||||
|
||||
#### Pagina autenticazione
|
||||
|
||||
| Key | Description |
|
||||
|----------------|------------------------------------|
|
||||
| auth_address | Colore del campo indirizzo IP |
|
||||
| auth_bookmarks | Colore del pannello segnalibri |
|
||||
| auth_password | Colore del campo password |
|
||||
| auth_port | Colore del campo numero porta |
|
||||
| auth_protocol | Colore del selettore di protocollo |
|
||||
| auth_recents | Colore del pannello recenti |
|
||||
| auth_username | Colore del campo nome utente |
|
||||
|
||||
#### Pagina explorer e trasferimento
|
||||
|
||||
| Key | Description |
|
||||
|--------------------------------------|---------------------------------------------------------------------------|
|
||||
| transfer_local_explorer_background | Sfondo explorer locale |
|
||||
| transfer_local_explorer_foreground | Foreground explorer locale |
|
||||
| transfer_local_explorer_highlighted | Colore bordo e file selezionato explorer locale |
|
||||
| transfer_remote_explorer_background | Sfondo explorer remoto |
|
||||
| transfer_remote_explorer_foreground | Foreground explorer remoto |
|
||||
| transfer_remote_explorer_highlighted | Colore bordo e file selezionato explorer remoto |
|
||||
| transfer_log_background | Sfondo pannello di log |
|
||||
| transfer_log_window | Colore bordi e testo log |
|
||||
| transfer_progress_bar_partial | Colore barra progresso parziale |
|
||||
| transfer_progress_bar_total | Colore barra progresso totale |
|
||||
| transfer_status_hidden | Colore status bar file nascosti |
|
||||
| transfer_status_sorting | Colore status bar ordinamento file; si applica anche al popup ordinamento |
|
||||
| transfer_status_sync_browsing | Colore status bar per sync browsing |
|
||||
|
||||
#### Misc
|
||||
|
||||
Questi stili si applicano a varie componenti dell'applicazione.
|
||||
|
||||
| Key | Description |
|
||||
|-------------------|---------------------------------------------|
|
||||
| misc_error_dialog | Colore dialoghi errore |
|
||||
| misc_info_dialog | Colore per dialoghi informazioni |
|
||||
| misc_input_dialog | Colore per dialoghi input (tipo copia file) |
|
||||
| misc_keys | Colore per abbinamento tasti |
|
||||
| misc_quit_dialog | Colore per dialogo quit |
|
||||
| misc_save_dialog | Colore per dialogo salva |
|
||||
| misc_warn_dialog | Colore per dialoghi avvertimento |
|
||||
|
||||
---
|
||||
|
||||
## Editor di testo ✏
|
||||
|
||||
Con termscp puoi anche modificare i file di testo direttamente da terminale, utilizzando il tuo editor preferito.
|
||||
Non importa se il file si trova in locale od in remoto, termscp ti consente di modificare e sincronizzare le modifiche per entrambi.
|
||||
Nel caso il file si trovi su host remoto, il file verrà prima scaricato temporaneamente in locale, modificato e poi nel caso ci siano state modifiche, reinviato in remoto.
|
||||
|
||||
> ❗ Ricorda: **puoi modificare solo i file testuali**; non puoi modificare i file binari.
|
||||
|
||||
---
|
||||
|
||||
## Logging 🩺
|
||||
|
||||
termscp scrive un file di log per ogni sessione, nel percorso seguente:
|
||||
|
||||
- `$HOME/.cache/termscp/termscp.log` su Linux/BSD
|
||||
- `$HOME/Library/Caches/termscp/termscp.log` su MacOs
|
||||
- `FOLDERID_LocalAppData\termscp\termscp.log` su Windows
|
||||
|
||||
Il log non viene ruotato, ma viene troncato ad ogni lancio di termscp, quindi se devi riportare un issue, non avviare termscp fino a che non avrai salvato il file di log.
|
||||
I log sono di default riportati a livello *INFO*, quindi non sono particolarmente parlanti.
|
||||
|
||||
Se vuoi riportare un problema, se riesci, riproduci l'errore lanciando termscp in modalità di debug, in modo da fornire un log più dettagliato.
|
||||
Per farlo, lancia termscp con l'opzione `-D`.
|
||||
|
||||
Ho scritto questo FAQ sui log, visto che potresti avere qualche dubbio:
|
||||
|
||||
> Non voglio il log, posso disabilitarlo?
|
||||
|
||||
Sì, puoi. Basta lanciare termscp con `-q or --quiet` come opzione. Puoi mantenerlo persistente salvandolo come alias nella tua shell. Ricorda che i log vengono usati per diagnosticare problemi e considerando che questo è un progetto open-source è anche un modo per contribuire al progetto 😉. Non voglio far sentire in colpa nessuno, ma tanto per dire.
|
||||
|
||||
> Il log è sicuro?
|
||||
|
||||
Se ti chiedi se il log espone dati sensibili, il log non espone nessuna password o dato sensibile.
|
||||
|
||||
## Notifiche 📫
|
||||
|
||||
termscp invierà notifiche destkop per i seguenti eventi:
|
||||
|
||||
- a **Transferimento completato**: La notifica verrà inviata a seguito di un trasferimento completato.
|
||||
- ❗ La notifica verrà mostrata solo se la dimensione totale del trasferimento è uguale o maggiore al parametro `Notifications: minimum transfer size` definito in configurazione.
|
||||
- a **Transferimento fallito**: La notifica verrà inviata a seguito di un trasferimento fallito.
|
||||
- ❗ La notifica verrà mostrata solo se la dimensione totale del trasferimento è uguale o maggiore al parametro `Notifications: minimum transfer size` definito in configurazione.
|
||||
- ad **Aggiornamento disponibile**: Ogni volta che una nuova versione di termscp è disponibile, verrà mostrata una notifica.
|
||||
- ad **Aggiornamento installato**: Al termine dell'installazione di un aggiornamento, verrà mostrata una notifica.
|
||||
- ad **Aggiornamento fallito**: Al fallimento dell'installazione di un aggiornamento, verrà mostrata una notifica.
|
||||
|
||||
❗ Se vuoi disabilitare le notifiche, è sufficiente andare in configurazione ed impostare `Enable notifications?` a `No` 😉.
|
||||
❗ Se vuoi modificare la soglia minima per le notifiche dei trasferimenti, puoi impostare il valore di `Notifications: minimum transfer size` in configurazione 🙂.
|
||||
|
||||
## File watcher 🔭
|
||||
|
||||
Il file watcher ti permette di impostare una lista di percorsi da sincronizzare con l'host remoto.
|
||||
Ciò implica che ogni volta che una modifica verrà rilevata al percorso sincronizzato, la modifica verrà automaticamente sincronizzata con l'host remoto, entro 5 secondi.
|
||||
|
||||
Puoi impostare quanti percorsi preferisci da sincronizzare:
|
||||
|
||||
1. Porta il cursore dell'explorer sulla cartella/file che vuoi sincronizzare
|
||||
2. Vai alla directory sull'explorer remoto dove vuoi riportare le modifiche
|
||||
3. Premi `<T>`
|
||||
4. Rispondi `<YES>` alla domanda se vuoi sincronizzare il percorso
|
||||
|
||||
Per terminare la sincronizzazione, premi `<T>`, al percorso locale sincronizzato (od in qualsiasi sua sottocartella)
|
||||
OPPURE, puoi semplicemente premere `<CTRL+T>` e premi `<ENTER>` sul percorso che vuoi desincronizzare.
|
||||
|
||||
Queste modifiche verranno applicate sull'host remoto:
|
||||
|
||||
- Nuovi file, modifiche
|
||||
- File spostati o rinominati
|
||||
- File rimossi
|
||||
|
||||
> ❗ Il watcher funziona solo in maniera unidirezionale locale > remoto. NON è possibile tracciare le modifiche da remoto a locale.
|
||||
616
docs/man.md
Normal file
@@ -0,0 +1,616 @@
|
||||
# User manual 🎓
|
||||
|
||||
- [User manual 🎓](#user-manual-)
|
||||
- [Usage ❓](#usage-)
|
||||
- [Address argument 🌎](#address-argument-)
|
||||
- [AWS S3 address argument](#aws-s3-address-argument)
|
||||
- [Kube address argument](#kube-address-argument)
|
||||
- [WebDAV address argument](#webdav-address-argument)
|
||||
- [SMB address argument](#smb-address-argument)
|
||||
- [How Password can be provided 🔐](#how-password-can-be-provided-)
|
||||
- [Subcommands](#subcommands)
|
||||
- [Import a theme](#import-a-theme)
|
||||
- [Install latest version](#install-latest-version)
|
||||
- [S3 connection parameters](#s3-connection-parameters)
|
||||
- [S3 credentials 🦊](#s3-credentials-)
|
||||
- [File explorer 📂](#file-explorer-)
|
||||
- [Keybindings ⌨](#keybindings-)
|
||||
- [Work on multiple files 🥷](#work-on-multiple-files-)
|
||||
- [Example](#example)
|
||||
- [Synchronized browsing ⏲️](#synchronized-browsing-️)
|
||||
- [Open and Open With 🚪](#open-and-open-with-)
|
||||
- [Bookmarks ⭐](#bookmarks-)
|
||||
- [Are my passwords Safe 😈](#are-my-passwords-safe-)
|
||||
- [Linux Keyring](#linux-keyring)
|
||||
- [KeepassXC setup for termscp](#keepassxc-setup-for-termscp)
|
||||
- [Configuration ⚙️](#configuration-️)
|
||||
- [SSH Key Storage 🔐](#ssh-key-storage-)
|
||||
- [File Explorer Format](#file-explorer-format)
|
||||
- [Themes 🎨](#themes-)
|
||||
- [My theme won't load 😱](#my-theme-wont-load-)
|
||||
- [Styles 💈](#styles-)
|
||||
- [Authentication page](#authentication-page)
|
||||
- [Transfer page](#transfer-page)
|
||||
- [Misc](#misc)
|
||||
- [Text Editor ✏](#text-editor-)
|
||||
- [Logging 🩺](#logging-)
|
||||
- [Notifications 📫](#notifications-)
|
||||
- [File watcher 🔭](#file-watcher-)
|
||||
|
||||
## Usage ❓
|
||||
|
||||
termscp can be started with the following options:
|
||||
|
||||
`termscp [options]... [protocol://user@address:port:wrkdir] [protocol://user@address:port:wrkdir] [local-wrkdir]`
|
||||
|
||||
OR
|
||||
|
||||
`termscp [options]... -b [bookmark-name] -b [bookmark-name] [local-wrkdir]`
|
||||
|
||||
AND any combination of the two
|
||||
|
||||
- `-P, --password <password>` if address is provided, password will be this argument. A password *can* be specified for each remote provided. The order must be the same of the address argument. The use of this parameter is discouraged.
|
||||
- `-b, --address-as-bookmark` resolve address argument as a bookmark name
|
||||
- `-q, --quiet` Disable logging
|
||||
- `-v, --version` Print version info
|
||||
- `-h, --help` Print help page
|
||||
|
||||
termscp can be started in three different modes, if no extra arguments is provided, termscp will show the authentication form, where the user will be able to provide the parameters required to connect to the remote peer.
|
||||
|
||||
Alternatively, the user can provide an address as argument to skip the authentication form and starting directly the connection to the remote server.
|
||||
|
||||
If address argument or bookmark name is provided you can also provide the start working directory for local host
|
||||
|
||||
### Address argument 🌎
|
||||
|
||||
The address argument has the following syntax:
|
||||
|
||||
```txt
|
||||
[protocol://][username@]<address>[:port][:wrkdir]
|
||||
```
|
||||
|
||||
Let's see some example of this particular syntax, since it's very comfortable and you'll probably going to use this instead of the other one...
|
||||
|
||||
- Connect using default protocol (*defined in configuration*) to 192.168.1.31, port if not provided is default for the selected protocol (in this case depends on your configuration); username is current user's name
|
||||
|
||||
```sh
|
||||
termscp 192.168.1.31
|
||||
```
|
||||
|
||||
- Connect using default protocol (*defined in configuration*) to 192.168.1.31; username is `root`
|
||||
|
||||
```sh
|
||||
termscp root@192.168.1.31
|
||||
```
|
||||
|
||||
- Connect using scp to 192.168.1.31, port is 4022; username is `omar`
|
||||
|
||||
```sh
|
||||
termscp scp://omar@192.168.1.31:4022
|
||||
```
|
||||
|
||||
- Connect using scp to 192.168.1.31, port is 4022; username is `omar`. You will start in directory `/tmp`
|
||||
|
||||
```sh
|
||||
termscp scp://omar@192.168.1.31:4022:/tmp
|
||||
```
|
||||
|
||||
#### AWS S3 address argument
|
||||
|
||||
Aws S3 has a different syntax for CLI address argument, for obvious reasons, but I managed to keep it the more similar as possible to the generic address argument:
|
||||
|
||||
```txt
|
||||
s3://<bucket-name>@<region>[:profile][:/wrkdir]
|
||||
```
|
||||
|
||||
e.g.
|
||||
|
||||
```txt
|
||||
s3://buckethead@eu-central-1:default:/assets
|
||||
```
|
||||
|
||||
#### Kube address argument
|
||||
|
||||
In case you want to connect to Kube use the following syntax
|
||||
|
||||
```txt
|
||||
kube://[namespace][@<cluster_url>][$</path>]
|
||||
```
|
||||
|
||||
#### WebDAV address argument
|
||||
|
||||
In case you want to connect to webDAV use the following syntax
|
||||
|
||||
```txt
|
||||
http://<username>:<password>@<url></path>
|
||||
```
|
||||
|
||||
or in case you want to use https
|
||||
|
||||
```txt
|
||||
https://<username>:<password>@<url></path>
|
||||
```
|
||||
|
||||
#### SMB address argument
|
||||
|
||||
SMB has a different syntax for CLI address argument, which is different whether you're on Windows or other systems:
|
||||
|
||||
**Windows** syntax:
|
||||
|
||||
```txt
|
||||
\\[username@]<server-name>\<share>[\path\...]
|
||||
```
|
||||
|
||||
**Other systems** syntax:
|
||||
|
||||
```txt
|
||||
smb://[username@]<server-name>[:port]/<share>[/path/.../]
|
||||
```
|
||||
|
||||
#### How Password can be provided 🔐
|
||||
|
||||
You have probably noticed, that, when providing the address as argument, there's no way to provide the password.
|
||||
Password can be basically provided through 3 ways when address argument is provided:
|
||||
|
||||
- `-P, --password` option: just use this CLI option providing the password. I strongly unrecommend this method, since it's very insecure (since you might keep the password in the shell history)
|
||||
- Via `sshpass`: you can provide password via `sshpass`, e.g. `sshpass -f ~/.ssh/topsecret.key termscp cvisintin@192.168.1.31`
|
||||
- You will be prompted for it: if you don't use any of the previous methods, you will be prompted for the password, as happens with the more classics tools such as `scp`, `ssh`, etc.
|
||||
|
||||
### Subcommands
|
||||
|
||||
#### Import a theme
|
||||
|
||||
Run termscp as `termscp theme <theme-file>`
|
||||
|
||||
#### Install latest version
|
||||
|
||||
Run termscp as `termscp update`
|
||||
|
||||
---
|
||||
|
||||
## S3 connection parameters
|
||||
|
||||
These parameters are required to connect to aws s3 and other s3 compatible servers:
|
||||
|
||||
- AWS S3:
|
||||
- **bucket name**
|
||||
- **region**
|
||||
- *profile* (if not provided: "default")
|
||||
- *access key* (unless if public)
|
||||
- *secret access key* (unless if public)
|
||||
- *security token* (if required)
|
||||
- *session token* (if required)
|
||||
- new path style: **NO**
|
||||
- Other S3 endpoints:
|
||||
- **bucket name**
|
||||
- **endpoint**
|
||||
- *access key* (unless if public)
|
||||
- *secret access key* (unless if public)
|
||||
- new path style: **YES**
|
||||
|
||||
### S3 credentials 🦊
|
||||
|
||||
In order to connect to an Aws S3 bucket you must obviously provide some credentials.
|
||||
There are basically three ways to achieve this:
|
||||
So these are the ways you can provide the credentials for s3:
|
||||
|
||||
1. Authentication form:
|
||||
1. You can provide the `access_key` (should be mandatory), the `secret_access_key` (should be mandatory), `security_token` and the `session_token`
|
||||
2. If you save the s3 connection as a bookmark, these credentials will be saved as an encrypted AES-256/BASE64 string in your bookmarks file (except for the security token and session token which are meant to be temporary credentials).
|
||||
2. Use your credentials file: just configure the AWS cli via `aws configure` and your credentials should already be located at `~/.aws/credentials`. In case you're using a profile different from `default`, just provide it in the profile field in the authentication form.
|
||||
3. **Environment variables**: you can always provide your credentials as environment variables. Keep in mind that these credentials **will always override** the credentials located in the `credentials` file. See how to configure the environment below:
|
||||
|
||||
These should always be mandatory:
|
||||
|
||||
- `AWS_ACCESS_KEY_ID`: aws access key ID (usually starts with `AKIA...`)
|
||||
- `AWS_SECRET_ACCESS_KEY`: the secret access key
|
||||
|
||||
In case you've configured a stronger security, you *may* require these too:
|
||||
|
||||
- `AWS_SECURITY_TOKEN`: security token
|
||||
- `AWS_SESSION_TOKEN`: session token
|
||||
|
||||
⚠️ Your credentials are safe: termscp won't manipulate these values directly! Your credentials are directly consumed by the **s3** crate.
|
||||
In case you've got some concern regarding security, please contact the library author on [Github](https://github.com/durch/rust-s3) ⚠️
|
||||
|
||||
---
|
||||
|
||||
## File explorer 📂
|
||||
|
||||
When we refer to file explorers in termscp, we refer to the panels you can see after establishing a connection with the remote.
|
||||
These panels are basically 3 (yes, three actually):
|
||||
|
||||
- Local explorer panel: it is displayed on the left of your screen and shows the current directory entries for localhost
|
||||
- Remote explorer panel: it is displayed on the right of your screen and shows the current directory entries for the remote host.
|
||||
- Find results panel: depending on where you're searching for files (local/remote) it will replace the local or the explorer panel. This panel shows the entries matching the search query you performed.
|
||||
|
||||
In order to change panel you need to type `<LEFT>` to move the remote explorer panel and `<RIGHT>` to move back to the local explorer panel. Whenever you are in the find results panel, you need to press `<ESC>` to exit panel and go back to the previous panel.
|
||||
|
||||
### Keybindings ⌨
|
||||
|
||||
| Key | Command | Reminder |
|
||||
|---------------|---------------------------------------------------------|-------------|
|
||||
| `<ESC>` | Disconnect from remote; return to authentication page | |
|
||||
| `<BACKSPACE>` | Go to previous directory in stack | |
|
||||
| `<TAB>` | Switch explorer tab | |
|
||||
| `<RIGHT>` | Move to remote explorer tab | |
|
||||
| `<LEFT>` | Move to local explorer tab | |
|
||||
| `<UP>` | Move up in selected list | |
|
||||
| `<DOWN>` | Move down in selected list | |
|
||||
| `<PGUP>` | Move up in selected list by 8 rows | |
|
||||
| `<PGDOWN>` | Move down in selected list by 8 rows | |
|
||||
| `<ENTER>` | Enter directory | |
|
||||
| `<SPACE>` | Upload / download selected file | |
|
||||
| `<BACKTAB>` | Switch between log tab and explorer | |
|
||||
| `<A>` | Toggle hidden files | All |
|
||||
| `<B>` | Sort files by | Bubblesort? |
|
||||
| `<C\|F5>` | Copy file/directory | Copy |
|
||||
| `<D\|F7>` | Make directory | Directory |
|
||||
| `<E\|F8\|DEL>`| Delete file | Erase |
|
||||
| `<F>` | Search for files (wild match is supported) | Find |
|
||||
| `<G>` | Go to supplied path | Go to |
|
||||
| `<H\|F1>` | Show help | Help |
|
||||
| `<I>` | Show info about selected file or directory | Info |
|
||||
| `<K>` | Create symlink pointing to the currently selected entry | symlinK |
|
||||
| `<L>` | Reload current directory's content / Clear selection | List |
|
||||
| `<M>` | Select a file | Mark |
|
||||
| `<N>` | Create new file with provided name | New |
|
||||
| `<O\|F4>` | Edit file; see Text editor | Open |
|
||||
| `<P>` | Open log panel | Panel |
|
||||
| `<Q\|F10>` | Quit termscp | Quit |
|
||||
| `<R\|F6>` | Rename file | Rename |
|
||||
| `<S\|F2>` | Save file as... | Save |
|
||||
| `<T>` | Synchronize changes to selected path to remote | Track |
|
||||
| `<U>` | Go to parent directory | Up |
|
||||
| `<V\|F3>` | Open file with default program for filetype | View |
|
||||
| `<W>` | Open file with provided program | With |
|
||||
| `<X>` | Execute a command | eXecute |
|
||||
| `<Y>` | Toggle synchronized browsing | sYnc |
|
||||
| `<Z>` | Change file mode | |
|
||||
| `</>` | Filter files (both regex and wildmatch is supported) | |
|
||||
| `<CTRL+A>` | Select all files | |
|
||||
| `<ALT+A>` | Deselect all files | |
|
||||
| `<CTRL+C>` | Abort file transfer process | |
|
||||
| `<CTRL+T>` | Show all synchronized paths | Track |
|
||||
|
||||
### Work on multiple files 🥷
|
||||
|
||||
You can opt to work on multiple files, with these simple controls:
|
||||
|
||||
- `<M>`: mark a file for selection
|
||||
- `<CTRL+A>`: select all files in the current directory
|
||||
- `<ALT+A>`: deselect all files
|
||||
|
||||
Once a file is marked for selection, it will be **displayed with an highlighted background**.
|
||||
|
||||
When working on selection, only selected file will be processed for actions, while the current highlighted item will be ignored.
|
||||
It is possible to work on multiple files also when in the find result panel.
|
||||
|
||||
All the actions are available when working with multiple files, but be aware that some actions work in a slightly different way. Let's dive in:
|
||||
|
||||
- *Copy*: whenever you copy a file, you'll be prompted to insert the destination name. When working with multiple file, this name refers to the destination directory where all these files will be copied.
|
||||
- *Rename*: same as copy, but will move files there.
|
||||
- *Save as*: same as copy, but will write them there.
|
||||
|
||||
If you select a file in a directory (e.g. `/home`) and then you change directory the file will be kept selected and it will be displayed in the **transfer queue** in the bottom panel.
|
||||
|
||||
When a file gets selected the current *remote* directory is associated to its entry; so in case the file gets transferred it will be transferred to the directory associated to the file.
|
||||
|
||||
#### Example
|
||||
|
||||
If we select a file on local `/home/a.txt` and we're currently at `/tmp` on remote and then we move to `/var` and we select `/var/b.txt` and on the remote panel we're at `/home` and we perform a transfer the result will be:
|
||||
|
||||
- `/home/a.txt` transferred to `/tmp/a.txt`
|
||||
- `/var/b.txt` transferred to `/home/b.txt`
|
||||
|
||||
### Synchronized browsing ⏲️
|
||||
|
||||
When enabled, synchronized browsing, will allow you to synchronize the navigation between the two panels.
|
||||
This means that whenever you'll change the working directory on one panel, the same action will be reproduced on the other panel. If you want to enable synchronized browsing just press `<Y>`; press twice to disable. While enabled, the synchronized browsing state will be reported on the status bar on `ON`.
|
||||
|
||||
### Open and Open With 🚪
|
||||
|
||||
Open and open with commands are powered by [open-rs](https://docs.rs/crate/open/1.7.0).
|
||||
When opening files with View command (`<V>`), the system default application for the file type will be used. To do so, the default operting system service will be used, so be sure to have at least one of these installed on your system:
|
||||
|
||||
- **Windows** users: you don't have to worry about it, since the crate will use the `start` command.
|
||||
- **MacOS** users: you don't have to worry either, since the crate will use `open`, which is already installed on your system.
|
||||
- **Linux** users: one of these should be installed
|
||||
- *xdg-open*
|
||||
- *gio*
|
||||
- *gnome-open*
|
||||
- *kde-open*
|
||||
- **WSL** users: *wslview* is required, you must install [wslu](https://github.com/wslutilities/wslu).
|
||||
|
||||
> Q: Can I edit remote files using the view command?
|
||||
> A: No, at least not directly from the "remote panel". You have to download it to a local directory first, that's due to the fact that when you open a remote file, the file is downloaded into a temporary directory, but there's no way to create a watcher for the file to check when the program you used to open it was closed, so termscp is not able to know when you're done editing the file.
|
||||
|
||||
---
|
||||
|
||||
## Bookmarks ⭐
|
||||
|
||||
In termscp it is possible to save favourites hosts, which can be then loaded quickly from the main layout of termscp.
|
||||
termscp will also save the last 16 hosts you connected to.
|
||||
This feature allows you to load all the parameters required to connect to a certain remote, simply selecting the bookmark in the tab under the authentication form.
|
||||
|
||||
Bookmarks will be saved, if possible at:
|
||||
|
||||
- `$HOME/.config/termscp/` on Linux/BSD
|
||||
- `$HOME/Library/Application Support/termscp` on MacOs
|
||||
- `FOLDERID_RoamingAppData\termscp\` on Windows
|
||||
|
||||
For bookmarks only (this won't apply to recent hosts) it is also possible to save the password used to authenticate. The password is not saved by default and must be specified through the prompt when saving a new Bookmark.
|
||||
If you're concerned about the security of the password saved for your bookmarks, please read the [chapter below 👀](#are-my-passwords-safe-).
|
||||
|
||||
In order to create a new bookmark, just follow these steps:
|
||||
|
||||
1. Type in the authentication form the parameters to connect to your remote server
|
||||
2. Press `<CTRL+S>`
|
||||
3. Type in the name you want to give to the bookmark
|
||||
4. Choose whether to remind the password or not
|
||||
5. Press `<ENTER>` to submit
|
||||
|
||||
whenever you want to use the previously saved connection, just press `<TAB>` to navigate to the bookmarks list and load the bookmark parameters into the form pressing `<ENTER>`.
|
||||
|
||||

|
||||
|
||||
### Are my passwords Safe 😈
|
||||
|
||||
Sure 😉.
|
||||
As said before, bookmarks are saved in your configuration directory along with passwords. Passwords are obviously not plain text, they are encrypted with **AES-128**. Does this make them safe? Absolutely! (except for BSD and WSL users 😢)
|
||||
|
||||
On **Windows**, **Linux** and **MacOS** the key used to encrypt passwords is stored, if possible (but should be), respectively in the *Windows Vault*, in the *system keyring* and into the *Keychain*. This is actually super-safe and is directly managed by your operating system.
|
||||
|
||||
❗ Please, notice that if you're a Linux user, you'd better to read the [chapter below 👀](#linux-keyring), because the keyring might not be enabled or supported on your system!
|
||||
|
||||
On *BSD* and *WSL*, on the other hand, the key used to encrypt your passwords is stored on your drive (at $HOME/.config/termscp). It is then, still possible to retrieve the key to decrypt passwords. Luckily, the location of the key guarantees your key can't be read by users different from yours, but yeah, I still wouldn't save the password for a server exposed on the internet 😉.
|
||||
|
||||
#### Linux Keyring
|
||||
|
||||
We all love Linux thanks to the freedom it gives to the users. You can basically do anything you want as a Linux user, but this has also some cons, such as the fact that often there is no standard applications across different distributions. And this involves keyring too.
|
||||
This means that on Linux there might be no keyring installed on your system. Unfortunately the library we use to work with the key storage requires a service which exposes `org.freedesktop.secrets` on D-BUS and the worst fact is that there only two services exposing it.
|
||||
|
||||
- ❗ If you use GNOME as desktop environment (e.g. ubuntu users), you should already be fine, since keyring is already provided by `gnome-keyring` and everything should already be working.
|
||||
- ❗ For other desktop environment users there is a nice program you can use to get a keyring which is [KeepassXC](https://keepassxc.org/), which I use on my Manjaro installation (with KDE) and works fine. The only problem is that you have to setup it to be used along with termscp (but it's quite simple). To get started with KeepassXC read more [here](#keepassxc-setup-for-termscp).
|
||||
- ❗ What about you don't want to install any of these services? Well, there's no problem! **termscp will keep working as usual**, but it will save the key in a file, as it usually does for BSD and WSL.
|
||||
|
||||
##### KeepassXC setup for termscp
|
||||
|
||||
Follow these steps in order to setup keepassXC for termscp:
|
||||
|
||||
1. Install KeepassXC
|
||||
2. Go to "tools" > "settings" in toolbar
|
||||
3. Select "Secret service integration" and toggle "Enable KeepassXC freedesktop.org secret service integration"
|
||||
4. Create a database, if you don't have one yet: from toolbar "Database" > "New database"
|
||||
5. From toolbar: "Database" > "Database settings"
|
||||
6. Select "Secret service integration" and toggle "Expose entries under this group"
|
||||
7. Select the group in the list where you want the termscp secret to be kept. Remember that this group might be used by any other application to store secrets via DBUS.
|
||||
|
||||
---
|
||||
|
||||
## Configuration ⚙️
|
||||
|
||||
termscp supports some user defined parameters, which can be defined in the configuration.
|
||||
Underhood termscp has a TOML file and some other directories where all the parameters will be saved, but don't worry, you won't touch any of these files manually, since I made possible to configure termscp from its user interface entirely.
|
||||
|
||||
termscp, like for bookmarks, just requires to have these paths accessible:
|
||||
|
||||
- `$HOME/.config/termscp/` on Linux/BSD
|
||||
- `$HOME/Library/Application Support/termscp` on MacOs
|
||||
- `FOLDERID_RoamingAppData\termscp\` on Windows
|
||||
|
||||
To access configuration, you just have to press `<CTRL+C>` from the home of termscp.
|
||||
|
||||
These parameters can be changed:
|
||||
|
||||
- **Text Editor**: the text editor to use. By default termscp will find the default editor for you; with this option you can force an editor to be used (e.g. `vim`). **Also GUI editors are supported**, unless they `nohup` from the parent process.
|
||||
- **Default Protocol**: the default protocol is the default value for the file transfer protocol to be used in termscp. This applies for the login page and for the address CLI argument.
|
||||
- **Show Hidden Files**: select whether hidden files shall be displayed by default. You will be able to decide whether to show or not hidden files at runtime pressing `A` anyway.
|
||||
- **Check for updates**: if set to `yes`, termscp will fetch the Github API to check if there is a new version of termscp available.
|
||||
- **Prompt when replacing existing files?**: If set to `yes`, termscp will prompt for confirmation you whenever a file transfer would cause an existing file on target host to be replaced.
|
||||
- **Group Dirs**: select whether directories should be groupped or not in file explorers. If `Display first` is selected, directories will be sorted using the configured method but displayed before files, viceversa if `Display last` is selected.
|
||||
- **Remote File formatter syntax**: syntax to display file info for each file in the remote explorer. See [File explorer format](#file-explorer-format)
|
||||
- **Local File formatter syntax**: syntax to display file info for each file in the local explorer. See [File explorer format](#file-explorer-format)
|
||||
- **Enable notifications?**: If set to `Yes`, notifications will be displayed.
|
||||
- **Notifications: minimum transfer size**: if transfer size is greater or equal than the specified value, notifications for transfer will be displayed. The accepted values are in format `{UNSIGNED} B/KB/MB/GB/TB/PB`
|
||||
- **SSH configuration path**: Set SSH configuration file to use when connecting to a SCP/SFTP server. If unset (empty) no file will be used. You can specify a path starting with `~` to indicate the home path (e.g. `~/.ssh/config`). The parameters supported by termscp are specified [HERE](https://github.com/veeso/ssh2-config#exposed-attributes).
|
||||
|
||||
### SSH Key Storage 🔐
|
||||
|
||||
Along with configuration, termscp provides also an **essential** feature for **SFTP/SCP clients**: the SSH key storage.
|
||||
|
||||
You can access the SSH key storage, from configuration moving to the `SSH Keys` tab, once there you can:
|
||||
|
||||
- **Add a new key**: just press `<CTRL+N>` and you will be prompted to create a new key. Provide the hostname/ip address and the username associated to the key and finally a text editor will open up: paste the **PRIVATE** ssh key into the text editor, save and quit.
|
||||
- **Remove an existing key**: just press `<DEL>` or `<CTRL+E>` on the key you want to remove, to delete persistently the key from termscp.
|
||||
- **Edit an existing key**: just press `<ENTER>` on the key you want to edit, to change the private key.
|
||||
|
||||
> Q: Wait, my private key is protected with password, can I use it?
|
||||
> A: Of course you can. The password provided for authentication in termscp, is valid both for username/password authentication and for RSA key authentication.
|
||||
|
||||
### File Explorer Format
|
||||
|
||||
It is possible through configuration to define a custom format for the file explorer. This is possible both for local and remote host, so you can have two different syntax in use. These fields, with name `File formatter syntax (local)` and `File formatter syntax (remote)` will define how the file entries will be displayed in the file explorer.
|
||||
The syntax for the formatter is the following `{KEY1}... {KEY2:LENGTH}... {KEY3:LENGTH:EXTRA} {KEYn}...`.
|
||||
Each key in bracket will be replaced with the related attribute, while everything outside brackets will be left unchanged.
|
||||
|
||||
- The key name is mandatory and must be one of the keys below
|
||||
- The length describes the length reserved to display the field. Static attributes doesn't support this (GROUP, PEX, SIZE, USER)
|
||||
- Extra is supported only by some parameters and is an additional options. See keys to check if extra is supported.
|
||||
|
||||
These are the keys supported by the formatter:
|
||||
|
||||
- `ATIME`: Last access time (with default syntax `%b %d %Y %H:%M`); Extra might be provided as the time syntax (e.g. `{ATIME:8:%H:%M}`)
|
||||
- `CTIME`: Creation time (with syntax `%b %d %Y %H:%M`); Extra might be provided as the time syntax (e.g. `{CTIME:8:%H:%M}`)
|
||||
- `GROUP`: Owner group
|
||||
- `MTIME`: Last change time (with syntax `%b %d %Y %H:%M`); Extra might be provided as the time syntax (e.g. `{MTIME:8:%H:%M}`)
|
||||
- `NAME`: File name (Folders between root and first ancestors are elided if longer than LENGTH)
|
||||
- `PATH`: File absolute path (Folders between root and first ancestors are elided if longer than LENGHT)
|
||||
- `PEX`: File permissions (UNIX format)
|
||||
- `SIZE`: File size (omitted for directories)
|
||||
- `SYMLINK`: Symlink (if any `-> {FILE_PATH}`)
|
||||
- `USER`: Owner user
|
||||
|
||||
If left empty, the default formatter syntax will be used: `{NAME:24} {PEX} {USER} {SIZE} {MTIME:17:%b %d %Y %H:%M}`
|
||||
|
||||
---
|
||||
|
||||
## Themes 🎨
|
||||
|
||||
Termscp provides you with an awesome feature: the possibility to set the colors for several components in the application.
|
||||
If you want to customize termscp there are two available ways to do so:
|
||||
|
||||
- From the **configuration menu**
|
||||
- Importing a **theme file**
|
||||
|
||||
In order to create your own customization from termscp, all you have to do so is to enter the configuration from the auth activity, pressing `<CTRL+C>` and then `<TAB>` twice. You should have now moved to the `themes` panel.
|
||||
|
||||
Here you can move with `<UP>` and `<DOWN>` to change the style you want to change, as shown in the gif below:
|
||||
|
||||

|
||||
|
||||
termscp supports both the traditional explicit hex (`#rrggbb`) and rgb `rgb(r, g, b)` syntax to provide colors, but also **[css colors](https://www.w3schools.com/cssref/css_colors.asp)** (such as `crimson`) are accepted 😉. There is also a special keywork which is `Default`. Default means that the color used will be the default foreground or background color based on the situation (foreground for texts and lines, background for well, guess what).
|
||||
|
||||
As said before, you can also import theme files. You can take inspiration from or directly use one of the themes provided along with termscp, located in the `themes/` directory of this repository and import them running termscp as `termscp -t <theme_file>`. If everything was fine, it should tell you the theme has successfully been imported.
|
||||
|
||||
### My theme won't load 😱
|
||||
|
||||
This is probably due to a recent update which has broken the theme. Whenever I add a new key to themes, the saved theme won't load. To fix this issues there are two really quick-fix solutions:
|
||||
|
||||
1. Reload theme: whenever I release an update I will also patch the "official" themes, so you just have to download it from the repository again and re-import the theme via `-t` option
|
||||
|
||||
```sh
|
||||
termscp -t <theme.toml>
|
||||
```
|
||||
|
||||
2. Fix your theme: If you're using a custom theme, then you can edit via `vim` and add the missing key. The theme is located at `$CONFIG_DIR/termscp/theme.toml` where `$CONFIG_DIR` is:
|
||||
|
||||
- FreeBSD/GNU-Linux: `$HOME/.config/`
|
||||
- MacOs: `$HOME/Library/Application Support`
|
||||
- Windows: `%appdata%`
|
||||
|
||||
❗ Missing keys are reported in the CHANGELOG under `BREAKING CHANGES` for the version you've just installed.
|
||||
|
||||
### Styles 💈
|
||||
|
||||
You can find in the table below, the description for each style field.
|
||||
Please, notice that **styles won't apply to configuration page**, in order to make it always accessible in case you mess everything up
|
||||
|
||||
#### Authentication page
|
||||
|
||||
| Key | Description |
|
||||
|----------------|------------------------------------------|
|
||||
| auth_address | Color of the input field for IP address |
|
||||
| auth_bookmarks | Color of the bookmarks panel |
|
||||
| auth_password | Color of the input field for password |
|
||||
| auth_port | Color of the input field for port number |
|
||||
| auth_protocol | Color of the radio group for protocol |
|
||||
| auth_recents | Color of the recents panel |
|
||||
| auth_username | Color of the input field for username |
|
||||
|
||||
#### Transfer page
|
||||
|
||||
| Key | Description |
|
||||
|--------------------------------------|---------------------------------------------------------------------------|
|
||||
| transfer_local_explorer_background | Background color of localhost explorer |
|
||||
| transfer_local_explorer_foreground | Foreground color of localhost explorer |
|
||||
| transfer_local_explorer_highlighted | Border and highlighted color for localhost explorer |
|
||||
| transfer_remote_explorer_background | Background color of remote explorer |
|
||||
| transfer_remote_explorer_foreground | Foreground color of remote explorer |
|
||||
| transfer_remote_explorer_highlighted | Border and highlighted color for remote explorer |
|
||||
| transfer_log_background | Background color for log panel |
|
||||
| transfer_log_window | Window color for log panel |
|
||||
| transfer_progress_bar_partial | Partial progress bar color |
|
||||
| transfer_progress_bar_total | Total progress bar color |
|
||||
| transfer_status_hidden | Color for status bar "hidden" label |
|
||||
| transfer_status_sorting | Color for status bar "sorting" label; applies also to file sorting dialog |
|
||||
| transfer_status_sync_browsing | Color for status bar "sync browsing" label |
|
||||
|
||||
#### Misc
|
||||
|
||||
These styles applie to different part of the application.
|
||||
|
||||
| Key | Description |
|
||||
|-------------------|---------------------------------------------|
|
||||
| misc_error_dialog | Color for error messages |
|
||||
| misc_info_dialog | Color for info dialogs |
|
||||
| misc_input_dialog | Color for input dialogs (such as copy file) |
|
||||
| misc_keys | Color of text for key strokes |
|
||||
| misc_quit_dialog | Color for quit dialogs |
|
||||
| misc_save_dialog | Color for save dialogs |
|
||||
| misc_warn_dialog | Color for warn dialogs |
|
||||
|
||||
---
|
||||
|
||||
## Text Editor ✏
|
||||
|
||||
termscp has, as you might have noticed, many features, one of these is the possibility to view and edit text file. It doesn't matter if the file is located on the local host or on the remote host, termscp provides the possibility to open a file in your favourite text editor.
|
||||
In case the file is located on remote host, the file will be first downloaded into your temporary file directory and then, **only** if changes were made to the file, re-uploaded to the remote host. termscp checks if you made changes to the file verifying the last modification time of the file.
|
||||
|
||||
> ❗ Just a reminder: **you can edit only textual file**; binary files are not supported.
|
||||
|
||||
---
|
||||
|
||||
## Logging 🩺
|
||||
|
||||
termscp writes a log file for each session, which is written at
|
||||
|
||||
- `$HOME/.cache/termscp/termscp.log` on Linux/BSD
|
||||
- `$HOME/Library/Caches/termscp/termscp.log` on MacOs
|
||||
- `FOLDERID_LocalAppData\termscp\termscp.log` on Windows
|
||||
|
||||
the log won't be rotated, but will just be truncated after each launch of termscp, so if you want to report an issue and you want to attach your log file, keep in mind to save the log file in a safe place before using termscp again.
|
||||
The logging by default reports in *INFO* level, so it is not very verbose.
|
||||
|
||||
If you want to submit an issue, please, if you can, reproduce the issue with the level set to `TRACE`, to do so, launch termscp with
|
||||
the `-D` CLI option.
|
||||
|
||||
I know you might have some questions regarding log files, so I made a kind of a Q/A:
|
||||
|
||||
> I don't want logging, can I turn it off?
|
||||
|
||||
Yes, you can. Just start termscp with `-q or --quiet` option. You can alias termscp to make it persistent. Remember that logging is used to diagnose issues, so since behind every open source project, there should always be this kind of mutual help, keeping log files might be your way to support the project 😉. I don't want you to feel guilty, but just to say.
|
||||
|
||||
> Is logging safe?
|
||||
|
||||
If you're concerned about security, the log file doesn't contain any plain password, so don't worry and exposes the same information the sibling file `bookmarks` reports.
|
||||
|
||||
## Notifications 📫
|
||||
|
||||
Termscp will send Desktop notifications for these kind of events:
|
||||
|
||||
- on **Transfer completed**: The notification will be sent once a transfer has been successfully completed.
|
||||
- ❗ The notification will be displayed only if the transfer total size is at least the specified `Notifications: minimum transfer size` in the configuration.
|
||||
- on **Transfer failed**: The notification will be sent once a transfer has failed due to an error.
|
||||
- ❗ The notification will be displayed only if the transfer total size is at least the specified `Notifications: minimum transfer size` in the configuration.
|
||||
- on **Update available**: Whenever a new version of termscp is available, a notification will be displayed.
|
||||
- on **Update installed**: Whenever a new version of termscp has been installed, a notification will be displayed.
|
||||
- on **Update failed**: Whenever the installation of the update fails, a notification will be displayed.
|
||||
|
||||
❗ If you prefer to keep notifications turned off, you can just enter setup and set `Enable notifications?` to `No` 😉.
|
||||
❗ If you want to change the minimum transfer size to display notifications, you can change the value in the configuration with key `Notifications: minimum transfer size` and set it to whatever suits better for you 🙂.
|
||||
|
||||
---
|
||||
|
||||
## File watcher 🔭
|
||||
|
||||
The file watcher allows you to setup a list of paths to synchronize with the remote hosts.
|
||||
This means that whenever a change on the local file system will be detected on the synchronized path, the change will be automatically reported to the configured remote host path, within 5 seconds.
|
||||
|
||||
You can set as many paths to synchronize as you prefer:
|
||||
|
||||
1. Put the cursor on the local explorer on the directory/file you want to keep synchronized
|
||||
2. Go to the directory you want the changes to be reported to on the remote host
|
||||
3. Press `<T>`
|
||||
4. Answer `<YES>` to the radio popup
|
||||
|
||||
To unwatch, just press `<T>` on the local synchronized path (or to any of its subfolders)
|
||||
OR you can just press `<CTRL+T>` and press `<ENTER>` to the synchronized path you want to unwatch.
|
||||
|
||||
These changes will be reported to the remote host:
|
||||
|
||||
- New files, file changes
|
||||
- File moved/renamed
|
||||
- File removed/unlinked
|
||||
|
||||
> ❗ The watcher works only in one direction (local > remote). It is NOT possible to synchronize automatically the changes from remote to local.
|
||||
28
docs/misc/README.deb.txt
Normal file
@@ -0,0 +1,28 @@
|
||||
Termscp is a feature rich terminal file transfer and explorer, with support for SCP/SFTP/FTP/Kube/S3/WebDAV.
|
||||
Basically is a terminal utility with an TUI to connect to a remote server to retrieve and upload files and
|
||||
to interact with the local file system.
|
||||
|
||||
Features:
|
||||
|
||||
- 📁 Different communication protocols
|
||||
- SFTP
|
||||
- SCP
|
||||
- FTP and FTPS
|
||||
- S3
|
||||
- 🖥 Explore and operate on the remote and on the local machine file system with a handy UI
|
||||
- Create, remove, rename, search, view and edit files
|
||||
- ⭐ Connect to your favourite hosts through built-in bookmarks and recent connections
|
||||
- 📝 View and edit files with your favourite applications
|
||||
- 💁 SFTP/SCP authentication with SSH keys and username/password
|
||||
- 🐧 Compatible with Windows, Linux, FreeBSD and MacOS
|
||||
- 🎨 Make it yours!
|
||||
- Themes
|
||||
- Custom file explorer format
|
||||
- Customizable text editor
|
||||
- Customizable file sorting
|
||||
- and many other parameters...
|
||||
- 📫 Get notified via Desktop Notifications when a large file has been transferred
|
||||
- 🔐 Save your password in your operating system key vault
|
||||
- 🦀 Rust-powered
|
||||
- 👀 Developed keeping an eye on performance
|
||||
- 🦄 Frequent awesome updates
|
||||
317
docs/pt-BR/README.md
Normal file
@@ -0,0 +1,317 @@
|
||||
# termscp
|
||||
|
||||
<p align="center">
|
||||
<img src="/assets/images/termscp.svg" alt="termscp logo" width="256" height="256" />
|
||||
</p>
|
||||
|
||||
<p align="center">~ Uma transferência de arquivos de terminal rica em recursos ~</p>
|
||||
<p align="center">
|
||||
<a href="https://termscp.veeso.dev" target="_blank">Website</a>
|
||||
·
|
||||
<a href="https://termscp.veeso.dev/#get-started" target="_blank">Instalação</a>
|
||||
·
|
||||
<a href="https://termscp.veeso.dev/#user-manual" target="_blank">Manual do usuário</a>
|
||||
</p>
|
||||
|
||||
<p align="center">
|
||||
<a href="https://github.com/veeso/termscp"
|
||||
><img
|
||||
height="20"
|
||||
src="/assets/images/flags/gb.png"
|
||||
alt="English"
|
||||
/></a>
|
||||
|
||||
<a
|
||||
href="https://github.com/veeso/termscp/blob/main/docs/pt-BR/README.md"
|
||||
><img
|
||||
height="20"
|
||||
src="/assets/images/flags/br.png"
|
||||
alt="Brazilian Portuguese"
|
||||
/></a>
|
||||
|
||||
<a
|
||||
href="https://github.com/veeso/termscp/blob/main/docs/de/README.md"
|
||||
><img
|
||||
height="20"
|
||||
src="/assets/images/flags/de.png"
|
||||
alt="Deutsch"
|
||||
/></a>
|
||||
|
||||
<a
|
||||
href="https://github.com/veeso/termscp/blob/main/docs/es/README.md"
|
||||
><img
|
||||
height="20"
|
||||
src="/assets/images/flags/es.png"
|
||||
alt="Español"
|
||||
/></a>
|
||||
|
||||
<a
|
||||
href="https://github.com/veeso/termscp/blob/main/docs/fr/README.md"
|
||||
><img
|
||||
height="20"
|
||||
src="/assets/images/flags/fr.png"
|
||||
alt="Français"
|
||||
/></a>
|
||||
|
||||
<a
|
||||
href="https://github.com/veeso/termscp/blob/main/docs/it/README.md"
|
||||
><img
|
||||
height="20"
|
||||
src="/assets/images/flags/it.png"
|
||||
alt="Italiano"
|
||||
/></a>
|
||||
|
||||
<a
|
||||
href="https://github.com/veeso/termscp/blob/main/docs/zh-CN/README.md"
|
||||
><img
|
||||
height="20"
|
||||
src="/assets/images/flags/cn.png"
|
||||
alt="简体中文"
|
||||
/></a>
|
||||
</p>
|
||||
|
||||
<p align="center">Desenvolvido por <a href="https://veeso.me/" target="_blank">@veeso</a></p>
|
||||
<p align="center">Versão atual: 0.17.0 24/03/2025</p>
|
||||
|
||||
<p align="center">
|
||||
<a href="https://opensource.org/licenses/MIT"
|
||||
><img
|
||||
src="https://img.shields.io/badge/License-MIT-teal.svg"
|
||||
alt="License-MIT"
|
||||
/></a>
|
||||
<a href="https://github.com/veeso/termscp/stargazers"
|
||||
><img
|
||||
src="https://img.shields.io/github/stars/veeso/termscp?style=flat"
|
||||
alt="Repo stars"
|
||||
/></a>
|
||||
<a href="https://crates.io/crates/termscp"
|
||||
><img
|
||||
src="https://img.shields.io/crates/d/termscp.svg"
|
||||
alt="Downloads counter"
|
||||
/></a>
|
||||
<a href="https://crates.io/crates/termscp"
|
||||
><img
|
||||
src="https://img.shields.io/crates/v/termscp.svg"
|
||||
alt="Latest version"
|
||||
/></a>
|
||||
<a href="https://ko-fi.com/veeso">
|
||||
<img
|
||||
src="https://img.shields.io/badge/donate-ko--fi-red"
|
||||
alt="Ko-fi"
|
||||
/></a>
|
||||
</p>
|
||||
<p align="center">
|
||||
<a href="https://github.com/veeso/termscp/actions"
|
||||
><img
|
||||
src="https://github.com/veeso/termscp/workflows/Linux/badge.svg"
|
||||
alt="Linux CI"
|
||||
/></a>
|
||||
<a href="https://github.com/veeso/termscp/actions"
|
||||
><img
|
||||
src="https://github.com/veeso/termscp/workflows/MacOS/badge.svg"
|
||||
alt="MacOS CI"
|
||||
/></a>
|
||||
<a href="https://github.com/veeso/termscp/actions"
|
||||
><img
|
||||
src="https://github.com/veeso/termscp/workflows/Windows/badge.svg"
|
||||
alt="Windows CI"
|
||||
/></a>
|
||||
<a href="https://coveralls.io/github/veeso/termscp"
|
||||
><img
|
||||
src="https://coveralls.io/repos/github/veeso/termscp/badge.svg"
|
||||
alt="Coveralls"
|
||||
/></a>
|
||||
</p>
|
||||
|
||||
---
|
||||
|
||||
## Sobre o termscp 🖥
|
||||
|
||||
Termscp é um explorador e utilitário de transferência de arquivos com uma interface de terminal, com suporte para SCP/SFTP/FTP/Kube/S3/WebDAV. Basicamente, é uma ferramenta de terminal com uma interface de usuário para conectar-se a um servidor remoto para baixar e enviar arquivos e interagir com o sistema de arquivos local. Ele é compatível com **Linux**, **MacOS**, **FreeBSD**, **NetBSD** e **Windows**.
|
||||
|
||||

|
||||
|
||||
---
|
||||
|
||||
## Recursos 🎁
|
||||
|
||||
- 📁 Diferentes protocolos de comunicação
|
||||
- **SFTP**
|
||||
- **SCP**
|
||||
- **FTP** e **FTPS**
|
||||
- **Kube**
|
||||
- **S3**
|
||||
- **SMB**
|
||||
- **WebDAV**
|
||||
- 🖥 Explore e opere no sistema de arquivos remoto e local com uma interface amigável
|
||||
- Crie, remova, renomeie, pesquise, visualize e edite arquivos
|
||||
- ⭐ Conecte-se aos seus hosts favoritos por meio de marcadores integrados e conexões recentes
|
||||
- 📝 Veja e edite arquivos com suas aplicações favoritas
|
||||
- 💁 Autenticação SFTP/SCP com chaves SSH e nome de usuário/senha
|
||||
- 🐧 Compatível com Windows, Linux, FreeBSD, NetBSD e MacOS
|
||||
- 🎨 Personalize do seu jeito!
|
||||
- Temas
|
||||
- Formato de explorador de arquivos customizável
|
||||
- Editor de texto personalizável
|
||||
- Ordenação de arquivos customizável
|
||||
- e muitos outros parâmetros...
|
||||
- 📫 Receba notificações no Desktop quando um arquivo grande for transferido
|
||||
- 🔭 Mantenha as alterações de arquivos sincronizadas com o host remoto
|
||||
- 🔐 Salve sua senha no cofre de senhas do sistema operacional
|
||||
- 🦀 Feito em Rust
|
||||
- 👀 Desenvolvido com foco em desempenho
|
||||
- 🦄 Atualizações frequentes e incríveis
|
||||
|
||||
---
|
||||
|
||||
## Como começar 🚀
|
||||
|
||||
Se você está pensando em instalar o termscp, eu quero te agradecer 💜 ! Espero que você goste do termscp!
|
||||
Se você quiser contribuir para este projeto, não se esqueça de verificar nosso [guia de contribuição](CONTRIBUTING.md).
|
||||
|
||||
Se você é um usuário de Linux, FreeBSD ou MacOS, este simples script de shell instalará o termscp no seu sistema com um único comando:
|
||||
|
||||
```sh
|
||||
curl --proto '=https' --tlsv1.2 -sSLf "https://git.io/JBhDb" | sh
|
||||
```
|
||||
|
||||
> ❗ A instalação no MacOS requer [Homebrew](https://brew.sh/), caso contrário, o compilador Rust será instalado.
|
||||
|
||||
Se você é um usuário de Windows, pode instalar o termscp com [Chocolatey](https://chocolatey.org/):
|
||||
|
||||
```ps
|
||||
choco install termscp
|
||||
```
|
||||
|
||||
Usuários do NetBSD podem instalar o termscp pelos repositórios oficiais.
|
||||
|
||||
```sh
|
||||
pkgin install termscp
|
||||
```
|
||||
|
||||
Usuários do Arch Linux podem instalar o termscp pelos repositórios oficiais.
|
||||
|
||||
```sh
|
||||
pacman -S termscp
|
||||
```
|
||||
|
||||
Para mais informações ou outras plataformas, visite [termscp.veeso.dev](https://termscp.veeso.dev/#get-started) para ver todos os métodos de instalação.
|
||||
|
||||
⚠️ Se você quer saber como atualizar o termscp, basta executar o termscp a partir do CLI com: `(sudo) termscp --update` ⚠️
|
||||
|
||||
### Requisitos ❗
|
||||
|
||||
- Para usuários de **Linux**:
|
||||
- libdbus-1
|
||||
- pkg-config
|
||||
- libsmbclient
|
||||
- Para usuários de **FreeBSD** ou **NetBSD**:
|
||||
- dbus
|
||||
- pkgconf
|
||||
- libsmbclient
|
||||
|
||||
### Requisitos Opcionais ✔️
|
||||
|
||||
Estes requisitos não são obrigatórios para rodar o termscp, mas para aproveitar todos os seus recursos.
|
||||
|
||||
- Para usuários de **Linux/FreeBSD**:
|
||||
- Para **abrir** arquivos via `V` (pelo menos um dos seguintes)
|
||||
- *xdg-open*
|
||||
- *gio*
|
||||
- *gnome-open*
|
||||
- *kde-open*
|
||||
- Para usuários de **Linux**:
|
||||
- Um gerenciador de chaves: leia mais no [Manual do Usuário](docs/man.md#linux-keyring)
|
||||
- Para usuários do **WSL**
|
||||
- Para **abrir** arquivos via `V` (pelo menos um dos seguintes)
|
||||
- [wslu](https://github.com/wslutilities/wslu)
|
||||
|
||||
---
|
||||
|
||||
## Apoie o desenvolvedor ☕
|
||||
|
||||
Se você gosta do termscp e está grato pelo trabalho que fiz, considere uma pequena doação 🥳
|
||||
|
||||
Você pode fazer uma doação por meio de uma dessas plataformas:
|
||||
|
||||
[](https://ko-fi.com/veeso)
|
||||
[](https://www.paypal.me/chrisintin)
|
||||
|
||||
---
|
||||
|
||||
## Manual do Usuário 📚
|
||||
|
||||
O manual do usuário pode ser encontrado no [site do termscp](https://termscp.veeso.dev/#user-manual) ou no [Github](docs/man.md).
|
||||
|
||||
---
|
||||
|
||||
## Próximos Recursos 🧪
|
||||
|
||||
Para **2023**, haverá duas grandes atualizações durante o ano.
|
||||
|
||||
Além de novos recursos, o desenvolvimento do termscp agora está focado em melhorias de UX e desempenho, então, se você tiver alguma sugestão, sinta-se à vontade para abrir um problema.
|
||||
|
||||
---
|
||||
|
||||
## Contribuições e problemas 🤝🏻
|
||||
|
||||
Contribuições, relatos de bugs, novos recursos e perguntas são bem-vindos! 😉
|
||||
Se você tiver alguma pergunta ou preocupação, ou se quiser sugerir um novo recurso, ou apenas melhorar o termscp, sinta-se à vontade para abrir um problema ou um PR.
|
||||
|
||||
Uma contribuição **apreciada** seria a tradução do manual do usuário e do README para **outros idiomas**.
|
||||
|
||||
Por favor, siga [nosso guia de contribuição](CONTRIBUTING.md).
|
||||
|
||||
---
|
||||
|
||||
## Mudanças ⏳
|
||||
|
||||
Veja o changelog do termscp [AQUI](CHANGELOG.md).
|
||||
|
||||
---
|
||||
|
||||
## Impulsionado por 💪
|
||||
|
||||
O termscp é impulsionado por esses projetos incríveis:
|
||||
|
||||
- [bytesize](https://github.com/hyunsik/bytesize)
|
||||
- [crossterm](https://github.com/crossterm-rs/crossterm)
|
||||
- [edit](https://github.com/milkey-mouse/edit)
|
||||
- [keyring-rs](https://github.com/hwchen/keyring-rs)
|
||||
- [open-rs](https://github.com/Byron/open-rs)
|
||||
- [pavao](https://github.com/veeso/pavao)
|
||||
- [remotefs](https://github.com/veeso/remotefs-rs)
|
||||
- [rpassword](https://github.com/conradkleinespel/rpassword)
|
||||
- [self_update](https://github.com/jaemk/self_update)
|
||||
- [ratatui](https://github.com/ratatui-org/ratatui)
|
||||
- [tui-realm](https://github.com/veeso/tui-realm)
|
||||
- [whoami](https://github.com/libcala/whoami)
|
||||
- [wildmatch](https://github.com/becheran/wildmatch)
|
||||
|
||||
---
|
||||
|
||||
## Galeria 🎬
|
||||
|
||||
> Termscp Home
|
||||
|
||||

|
||||
|
||||
> Marcadores
|
||||
|
||||

|
||||
|
||||
> Configuração
|
||||
|
||||

|
||||
|
||||
> Editor de Texto
|
||||
|
||||

|
||||
|
||||
---
|
||||
|
||||
## Licença 📃
|
||||
|
||||
O termscp é licenciado sob a licença MIT.
|
||||
|
||||
Você pode ler a licença completa [AQUI](LICENSE).
|
||||
613
docs/pt-BR/man.md
Normal file
@@ -0,0 +1,613 @@
|
||||
# Manual do Usuário 🎓
|
||||
|
||||
- [Manual do Usuário 🎓](#manual-do-usuário-)
|
||||
- [Uso ❓](#uso-)
|
||||
- [Argumento de Endereço 🌎](#argumento-de-endereço-)
|
||||
- [Argumento de Endereço do AWS S3](#argumento-de-endereço-do-aws-s3)
|
||||
- [Argumento de endereço Kube](#argumento-de-endereço-kube)
|
||||
- [Argumento de Endereço do WebDAV](#argumento-de-endereço-do-webdav)
|
||||
- [Argumento de Endereço do SMB](#argumento-de-endereço-do-smb)
|
||||
- [Como a Senha Pode Ser Fornecida 🔐](#como-a-senha-pode-ser-fornecida-)
|
||||
- [Subcomandos](#subcomandos)
|
||||
- [Importar um Tema](#importar-um-tema)
|
||||
- [Instalar a Última Versão](#instalar-a-última-versão)
|
||||
- [Parâmetros de Conexão do S3](#parâmetros-de-conexão-do-s3)
|
||||
- [Credenciais do S3 🦊](#credenciais-do-s3-)
|
||||
- [Explorador de Arquivos 📂](#explorador-de-arquivos-)
|
||||
- [Atalhos de Teclado ⌨](#atalhos-de-teclado-)
|
||||
- [Trabalhar com múltiplos arquivos 🥷](#trabalhar-com-múltiplos-arquivos-)
|
||||
- [Exemplo](#exemplo)
|
||||
- [Navegação Sincronizada ⏲️](#navegação-sincronizada-️)
|
||||
- [Abrir e Abrir Com 🚪](#abrir-e-abrir-com-)
|
||||
- [Favoritos ⭐](#favoritos-)
|
||||
- [Minhas Senhas São Seguras? 😈](#minhas-senhas-são-seguras-)
|
||||
- [Keyring do Linux](#keyring-do-linux)
|
||||
- [Configuração do KeepassXC para o termscp](#configuração-do-keepassxc-para-o-termscp)
|
||||
- [Configuração ⚙️](#configuração-️)
|
||||
- [Armazenamento de Chave SSH 🔐](#armazenamento-de-chave-ssh-)
|
||||
- [Formato do Explorador de Arquivos](#formato-do-explorador-de-arquivos)
|
||||
- [Temas 🎨](#temas-)
|
||||
- [Meu Tema Não Carrega 😱](#meu-tema-não-carrega-)
|
||||
- [Estilos 💈](#estilos-)
|
||||
- [Página de Autenticação](#página-de-autenticação)
|
||||
- [Página de Transferência](#página-de-transferência)
|
||||
- [Diversos](#diversos)
|
||||
- [Editor de Texto ✏](#editor-de-texto-)
|
||||
- [Registro de Logs 🩺](#registro-de-logs-)
|
||||
- [Notificações 📫](#notificações-)
|
||||
- [Observador de Arquivos 🔭](#observador-de-arquivos-)
|
||||
|
||||
## Uso ❓
|
||||
|
||||
O termscp pode ser iniciado com as seguintes opções:
|
||||
|
||||
`termscp [opções]... [protocol://usuário@endereço:porta:diretório-trabalho] [protocol://usuário@endereço:porta:diretório-trabalho] [diretório-trabalho-local]`
|
||||
|
||||
OU
|
||||
|
||||
`termscp [opções]... -b [nome-do-favorito] -b [nome-do-favorito] [diretório-trabalho-local]`
|
||||
|
||||
- `-P, --password <senha>` se o endereço for fornecido, a senha será este argumento
|
||||
- `-b, --address-as-bookmark` resolve o argumento do endereço como um nome de favorito
|
||||
- `-q, --quiet` Desabilita o registro de logs
|
||||
- `-v, --version` Exibe informações da versão
|
||||
- `-h, --help` Exibe a página de ajuda
|
||||
|
||||
O termscp pode ser iniciado em três modos diferentes, se nenhum argumento adicional for fornecido, ele exibirá o formulário de autenticação, onde o usuário poderá fornecer os parâmetros necessários para se conectar ao peer remoto.
|
||||
|
||||
Alternativamente, o usuário pode fornecer um endereço como argumento para pular o formulário de autenticação e iniciar diretamente a conexão com o servidor remoto.
|
||||
|
||||
Se um argumento de endereço ou nome de favorito for fornecido, você também pode definir o diretório de trabalho para o host local.
|
||||
|
||||
### Argumento de Endereço 🌎
|
||||
|
||||
O argumento de endereço tem a seguinte sintaxe:
|
||||
|
||||
```txt
|
||||
[protocol://][username@]<address>[:port][:wrkdir]
|
||||
```
|
||||
|
||||
Vamos ver alguns exemplos dessa sintaxe particular, pois ela é bem conveniente e você provavelmente a usará com mais frequência do que a outra...
|
||||
|
||||
- Conectar usando o protocolo padrão (*definido na configuração*) a 192.168.1.31; a porta, se não for fornecida, será a padrão para o protocolo selecionado (dependerá da sua configuração); o nome de usuário será o do usuário atual
|
||||
|
||||
```sh
|
||||
termscp 192.168.1.31
|
||||
```
|
||||
|
||||
- Conectar usando o protocolo padrão (*definido na configuração*) a 192.168.1.31; o nome de usuário é `root`
|
||||
|
||||
```sh
|
||||
termscp root@192.168.1.31
|
||||
```
|
||||
|
||||
- Conectar usando scp a 192.168.1.31, a porta é 4022; o nome de usuário é `omar`
|
||||
|
||||
```sh
|
||||
termscp scp://omar@192.168.1.31:4022
|
||||
```
|
||||
|
||||
- Conectar usando scp a 192.168.1.31, a porta é 4022; o nome de usuário é `omar`. Você começará no diretório `/tmp`
|
||||
|
||||
```sh
|
||||
termscp scp://omar@192.168.1.31:4022:/tmp
|
||||
```
|
||||
|
||||
#### Argumento de Endereço do AWS S3
|
||||
|
||||
O AWS S3 tem uma sintaxe diferente para o argumento de endereço CLI, por razões óbvias, mas tentei mantê-la o mais próxima possível do argumento de endereço genérico:
|
||||
|
||||
```txt
|
||||
s3://<bucket-name>@<region>[:profile][:/wrkdir]
|
||||
```
|
||||
|
||||
Exemplo:
|
||||
|
||||
```txt
|
||||
s3://buckethead@eu-central-1:default:/assets
|
||||
```
|
||||
|
||||
#### Argumento de endereço Kube
|
||||
|
||||
Caso queira se conectar ao Kube, use a seguinte sintaxe
|
||||
|
||||
```txt
|
||||
kube://[namespace][@<cluster_url>][$</path>]
|
||||
```
|
||||
|
||||
#### Argumento de Endereço do WebDAV
|
||||
|
||||
Caso você queira se conectar ao WebDAV, use a seguinte sintaxe:
|
||||
|
||||
```txt
|
||||
http://<username>:<password>@<url></path>
|
||||
```
|
||||
|
||||
ou, se preferir usar https:
|
||||
|
||||
```txt
|
||||
https://<username>:<password>@<url></path>
|
||||
```
|
||||
|
||||
#### Argumento de Endereço do SMB
|
||||
|
||||
O SMB tem uma sintaxe diferente para o argumento de endereço CLI, que varia se você estiver no Windows ou em outros sistemas:
|
||||
|
||||
**Sintaxe do Windows:**
|
||||
|
||||
```txt
|
||||
\\[username@]<server-name>\<share>[\path\...]
|
||||
```
|
||||
|
||||
**Sintaxe de outros sistemas:**
|
||||
|
||||
```txt
|
||||
smb://[username@]<server-name>[:port]/<share>[/path/.../]
|
||||
```
|
||||
|
||||
#### Como a Senha Pode Ser Fornecida 🔐
|
||||
|
||||
Você provavelmente notou que, ao fornecer o argumento de endereço, não há como fornecer a senha.
|
||||
A senha pode ser fornecida basicamente de três maneiras quando o argumento de endereço é fornecido:
|
||||
|
||||
- Opção `-P, --password`: apenas use essa opção CLI fornecendo a senha. Eu desaconselho fortemente esse método, pois é muito inseguro (você pode manter a senha no histórico do shell).
|
||||
- Via `sshpass`: você pode fornecer a senha via `sshpass`, por exemplo, `sshpass -f ~/.ssh/topsecret.key termscp cvisintin@192.168.1.31`.
|
||||
- Você será solicitado a fornecer a senha: se você não usar nenhum dos métodos anteriores, será solicitado a fornecer a senha, como acontece com ferramentas mais clássicas como `scp`, `ssh`, etc.
|
||||
|
||||
### Subcomandos
|
||||
|
||||
#### Importar um Tema
|
||||
|
||||
Execute o termscp como `termscp theme <theme-file>`
|
||||
|
||||
#### Instalar a Última Versão
|
||||
|
||||
Execute o termscp como `termscp update`
|
||||
|
||||
---
|
||||
|
||||
## Parâmetros de Conexão do S3
|
||||
|
||||
Esses parâmetros são necessários para se conectar ao AWS S3 e a outros servidores compatíveis com S3:
|
||||
|
||||
- AWS S3:
|
||||
- **Nome do balde**
|
||||
- **Região**
|
||||
- *Perfil* (se não fornecido: "default")
|
||||
- *Chave de acesso* (a menos que seja público)
|
||||
- *Chave de acesso secreta* (a menos que seja público)
|
||||
- *Token de segurança* (se necessário)
|
||||
- *Token de sessão* (se necessário)
|
||||
- Novo estilo de caminho: **NÃO**
|
||||
- Outros endpoints S3:
|
||||
- **Nome do balde**
|
||||
- **Endpoint**
|
||||
- *Chave de acesso* (a menos que seja público)
|
||||
- *Chave de acesso secreta* (a menos que seja público)
|
||||
- Novo estilo de caminho: **SIM**
|
||||
|
||||
### Credenciais do S3 🦊
|
||||
|
||||
Para se conectar a um balde do AWS S3, você obviamente precisa fornecer algumas credenciais.
|
||||
Existem basicamente três maneiras de fazer isso:
|
||||
Estes são os métodos para fornecer credenciais para o S3:
|
||||
|
||||
1. Formulário de autenticação:
|
||||
|
||||
|
||||
1. Você pode fornecer a `access_key` (deve ser obrigatória), a `secret_access_key` (deve ser obrigatória), o `security_token` e o `session_token`.
|
||||
2. Se você salvar a conexão S3 como um favorito, essas credenciais serão salvas como uma string criptografada AES-256/BASE64 no seu arquivo de favoritos (exceto para o token de segurança e o token de sessão, que são credenciais temporárias).
|
||||
2. Use seu arquivo de credenciais: basta configurar a CLI da AWS via `aws configure` e suas credenciais já devem estar localizadas em `~/.aws/credentials`. Caso você esteja usando um perfil diferente de `default`, apenas forneça-o no campo de perfil no formulário de autenticação.
|
||||
3. **Variáveis de ambiente**: você sempre pode fornecer suas credenciais como variáveis de ambiente. Lembre-se de que essas credenciais **sempre substituirão** as credenciais localizadas no arquivo de `credentials`. Veja como configurar o ambiente abaixo:
|
||||
|
||||
Estas devem sempre ser obrigatórias:
|
||||
|
||||
- `AWS_ACCESS_KEY_ID`: ID da chave de acesso da AWS (geralmente começa com `AKIA...`)
|
||||
- `AWS_SECRET_ACCESS_KEY`: a chave de acesso secreta
|
||||
|
||||
Caso você tenha configurado uma segurança mais rigorosa, você *pode* precisar destes também:
|
||||
|
||||
- `AWS_SECURITY_TOKEN`: token de segurança
|
||||
- `AWS_SESSION_TOKEN`: token de sessão
|
||||
|
||||
⚠️ Suas credenciais estão seguras: o termscp não manipula esses valores diretamente! Suas credenciais são consumidas diretamente pelo crate **s3**.
|
||||
Se você tiver alguma preocupação com a segurança, entre em contato com o autor da biblioteca no [Github](https://github.com/durch/rust-s3) ⚠️
|
||||
|
||||
---
|
||||
|
||||
## Explorador de Arquivos 📂
|
||||
|
||||
Quando nos referimos a exploradores de arquivos no termscp, estamos falando dos painéis que você pode ver após estabelecer uma conexão com o remoto.
|
||||
Esses painéis são basicamente três (sim, três na verdade):
|
||||
|
||||
- Painel do explorador local: ele é exibido à esquerda da sua tela e mostra as entradas do diretório atual do localhost.
|
||||
- Painel do explorador remoto: ele é exibido à direita da sua tela e mostra as entradas do diretório atual do host remoto.
|
||||
- Painel de resultados de busca: dependendo de onde você está buscando arquivos (local/remoto), ele substituirá o painel local ou o painel do explorador. Este painel mostra as entradas que correspondem à consulta de busca que você realizou.
|
||||
|
||||
Para trocar de painel, você precisa pressionar `<LEFT>` para mover para o painel do explorador remoto e `<RIGHT>` para voltar para o painel do explorador local. Sempre que estiver no painel de resultados da busca, você precisa pressionar `<ESC>` para sair do painel e voltar ao painel anterior.
|
||||
|
||||
### Atalhos de Teclado ⌨
|
||||
|
||||
| Tecla | Comando | Lembrete |
|
||||
|----------------|----------------------------------------------------------|-------------|
|
||||
| `<ESC>` | Desconectar do remoto; retornar à página de autenticação | |
|
||||
| `<BACKSPACE>` | Voltar ao diretório anterior na pilha | |
|
||||
| `<TAB>` | Alternar aba do explorador | |
|
||||
| `<RIGHT>` | Mover para a aba do explorador remoto | |
|
||||
| `<LEFT>` | Mover para a aba do explorador local | |
|
||||
| `<UP>` | Mover para cima na lista selecionada | |
|
||||
| `<DOWN>` | Mover para baixo na lista selecionada | |
|
||||
| `<PGUP>` | Mover para cima na lista selecionada por 8 linhas | |
|
||||
| `<PGDOWN>` | Mover para baixo na lista selecionada por 8 linhas | |
|
||||
| `<ENTER>` | Entrar no diretório | |
|
||||
| `<ESPAÇO>` | Fazer upload/download do arquivo selecionado | |
|
||||
| `<BACKTAB>` | Alternar entre aba de logs e explorador | |
|
||||
| `<A>` | Alternar arquivos ocultos | Todos |
|
||||
| `<B>` | Ordenar arquivos por | Bubblesort?|
|
||||
| `<C\|F5>` | Copiar arquivo/diretório | Copiar |
|
||||
| `<D\|F7>` | Criar diretório | Diretório |
|
||||
| `<E\|F8\|DEL>`| Deletar arquivo | Apagar |
|
||||
| `<F>` | Buscar arquivos (suporta pesquisa com coringas) | Buscar |
|
||||
| `<G>` | Ir para caminho especificado | Ir para |
|
||||
| `<H\|F1>` | Mostrar ajuda | Ajuda |
|
||||
| `<I>` | Mostrar informações sobre arquivo ou diretório selecionado | Informação |
|
||||
| `<K>` | Criar link simbólico apontando para a entrada selecionada | Symlink |
|
||||
| `<L>` | Recarregar conteúdo do diretório atual / Limpar seleção | Lista |
|
||||
| `<M>` | Selecionar um arquivo | Marcar |
|
||||
| `<N>` | Criar novo arquivo com o nome fornecido | Novo |
|
||||
| `<O\|F4>` | Editar arquivo; veja Editor de Texto | Abrir |
|
||||
| `<P>` | Abrir painel de logs | Painel |
|
||||
| `<Q\|F10>` | Sair do termscp | Sair |
|
||||
| `<R\|F6>` | Renomear arquivo | Renomear |
|
||||
| `<S\|F2>` | Salvar arquivo como... | Salvar |
|
||||
| `<T>` | Sincronizar alterações para caminho selecionado para remoto | Track |
|
||||
| `<U>` | Ir para o diretório pai | Subir |
|
||||
| `<V\|F3>` | Abrir arquivo com o programa padrão para o tipo de arquivo | Visualizar |
|
||||
| `<W>` | Abrir arquivo com o programa fornecido | Com |
|
||||
| `<X>` | Executar um comando | Executar |
|
||||
| `<Y>` | Alternar navegação sincronizada | Sincronizar |
|
||||
| `<Z>` | Alterar modo de arquivo | |
|
||||
| `</>` | Filtrar arquivos (suporte tanto para regex quanto para coringa) | |
|
||||
| `<CTRL+A>` | Selecionar todos os arquivos | |
|
||||
| `<ALT+A>` | Deselecionar todos os arquivos | |
|
||||
| `<CTRL+C>` | Abortir processo de transferência de arquivo | |
|
||||
| `<CTRL+T>` | Mostrar todos os caminhos sincronizados | Track |
|
||||
|
||||
### Trabalhar com múltiplos arquivos 🥷
|
||||
|
||||
Você pode optar por trabalhar com vários arquivos, usando estes controles simples:
|
||||
|
||||
- `<M>`: marcar um arquivo para seleção
|
||||
- `<CTRL+A>`: selecionar todos os arquivos no diretório atual
|
||||
- `<ALT+A>`: desselecionar todos os arquivos
|
||||
|
||||
Uma vez marcado, o arquivo será **exibido com fundo destacado** .
|
||||
Ao trabalhar com seleção, apenas os arquivos selecionados serão processados, enquanto o item atualmente destacado será ignorado.
|
||||
|
||||
É possível trabalhar com múltiplos arquivos também no painel de resultados de busca.
|
||||
|
||||
Todas as ações estão disponíveis ao trabalhar com múltiplos arquivos, mas algumas funcionam de forma ligeiramente diferente. Vamos ver:
|
||||
|
||||
- *Copiar*: ao copiar, será solicitado o nome de destino. Com múltiplos arquivos, esse nome será o diretório de destino para todos eles.
|
||||
- *Renomear*: igual a copiar, mas moverá os arquivos.
|
||||
- *Salvar como*: igual a copiar, mas escreverá os arquivos nesse local.
|
||||
|
||||
Se você selecionar um arquivo num diretório (ex: `/home`) e mudar de diretório, ele continuará selecionado e aparecerá na **fila de transferência** no painel inferior.
|
||||
Ao selecionar um arquivo, o diretório *remoto* atual é associado a ele; então, se for transferido, será enviado para esse diretório associado.
|
||||
|
||||
#### Exemplo
|
||||
|
||||
Se selecionarmos `/home/a.txt` localmente e estivermos em `/tmp` no painel remoto, depois mudarmos para `/var` e selecionarmos `/var/b.txt`, e estivermos em `/home` no painel remoto, ao transferir teremos:
|
||||
|
||||
- `/home/a.txt` transferido para `/tmp/a.txt`
|
||||
- `/var/b.txt` transferido para `/home/b.txt`
|
||||
|
||||
### Navegação Sincronizada ⏲️
|
||||
|
||||
Quando ativada, a navegação sincronizada permitirá sincronizar a navegação entre os dois painéis.
|
||||
Isso significa que, sempre que você mudar o diretório de trabalho em um painel, a mesma ação será reproduzida no outro painel. Se quiser ativar a navegação sincronizada, basta pressionar `<Y>`; pressione duas vezes para desativar. Enquanto estiver ativada, o estado da navegação sincronizada será exibido na barra de status como `ON` (Ligado).
|
||||
|
||||
### Abrir e Abrir Com 🚪
|
||||
|
||||
Os comandos para abrir e abrir com são alimentados pelo [open-rs](https://docs.rs/crate/open/1.7.0).
|
||||
Ao abrir arquivos com o comando Visualizar (`<V>`), será usado o aplicativo padrão do sistema para o tipo de arquivo. Para isso, será usado o serviço padrão do sistema operacional, então certifique-se de ter pelo menos um destes instalados no seu sistema:
|
||||
|
||||
- Para usuários do **Windows**: você não precisa se preocupar, pois o crate usará o comando `start`.
|
||||
- Para usuários do **MacOS**: também não é necessário se preocupar, pois o crate usará `open`, que já está instalado no seu sistema.
|
||||
- Para usuários do **Linux**: um dos seguintes deve estar instalado:
|
||||
- *xdg-open*
|
||||
- *gio*
|
||||
- *gnome-open*
|
||||
- *kde-open*
|
||||
- Para usuários do **WSL**: *wslview* é necessário, você deve instalar [wslu](https://github.com/wslutilities/wslu).
|
||||
|
||||
> Pergunta: Posso editar arquivos remotos usando o comando de visualização?
|
||||
> Resposta: Não, pelo menos não diretamente do "painel remoto". Você deve baixá-lo para um diretório local primeiro, porque quando você abre um arquivo remoto, ele é baixado para um diretório temporário, mas não há como criar um observador para o arquivo para verificar quando o programa que você usou para abri-lo foi fechado, então o termscp não pode saber quando você terminou de editar o arquivo.
|
||||
|
||||
---
|
||||
|
||||
## Favoritos ⭐
|
||||
|
||||
No termscp é possível salvar hosts favoritos, que podem ser carregados rapidamente a partir do layout principal do termscp.
|
||||
O termscp também salvará os últimos 16 hosts aos quais você se conectou.
|
||||
Esse recurso permite que você carregue todos os parâmetros necessários para se conectar a um determinado host remoto, simplesmente selecionando o favorito na aba abaixo do formulário de autenticação.
|
||||
|
||||
Os favoritos serão salvos, se possível, em:
|
||||
|
||||
- `$HOME/.config/termscp/` no Linux/BSD
|
||||
- `$HOME/Library/Application Support/termscp` no MacOS
|
||||
- `FOLDERID_RoamingAppData\termscp\` no Windows
|
||||
|
||||
Para os favoritos apenas (isso não se aplica aos hosts recentes), também é possível salvar a senha usada para autenticar. A senha não é salva por padrão e deve ser especificada no prompt ao salvar um novo favorito.
|
||||
Se você estiver preocupado com a segurança da senha salva para seus favoritos, por favor, leia o [capítulo abaixo 👀](#minhas-senhas-são-seguras-).
|
||||
|
||||
Para criar um novo favorito, siga estas etapas:
|
||||
|
||||
1. Digite no formulário de autenticação os parâmetros para se conectar ao seu servidor remoto
|
||||
2. Pressione `<CTRL+S>`
|
||||
3. Digite o nome que deseja dar ao favorito
|
||||
4. Escolha se deseja lembrar da senha ou não
|
||||
5. Pressione `<ENTER>` para enviar
|
||||
|
||||
Sempre que quiser usar a conexão salva anteriormente, basta pressionar `<TAB>` para navegar para a lista de favoritos e carregar os parâmetros do favorito no formulário pressionando `<ENTER>`.
|
||||
|
||||

|
||||
|
||||
### Minhas Senhas São Seguras? 😈
|
||||
|
||||
Claro 😉.
|
||||
Como já mencionado, os favoritos são salvos no diretório de configuração juntamente com as senhas. As senhas, obviamente, não são texto simples, elas são criptografadas com **AES-128**. Isso as torna seguras? Absolutamente! (exceto para usuários de BSD e WSL 😢)
|
||||
|
||||
No **Windows**, **Linux** e **MacOS**, a chave usada para criptografar senhas é armazenada, se possível (e deve ser), respectivamente no *Windows Vault*, no *sistema keyring* e no *Keychain*. Isso é realmente super seguro e é gerenciado diretamente pelo seu sistema operacional.
|
||||
|
||||
❗ Por favor, note que se você é um usuário de Linux, seria melhor ler o [capítulo abaixo 👀](#keyring-do-linux), porque o keyring pode não estar habilitado ou suportado no seu sistema!
|
||||
|
||||
Por outro lado, no *BSD* e no *WSL*, a chave usada para criptografar suas senhas é armazenada em seu disco (em `$HOME/.config/termscp`). Ainda é possível recuperar a chave para descriptografar as senhas. Felizmente, a localização da chave garante que ela não possa ser lida por outros usuários diferentes de você, mas sim, eu ainda não salvaria a senha para um servidor exposto na internet 😉.
|
||||
|
||||
#### Keyring do Linux
|
||||
|
||||
Todos nós amamos o Linux por causa da liberdade que ele oferece aos usuários. Você pode basicamente fazer o que quiser como usuário de Linux, mas isso também tem alguns contras, como o fato de muitas vezes não haver aplicativos padrão em diferentes distribuições. E isso também envolve o keyring.
|
||||
Isso significa que no Linux pode não haver um keyring instalado no seu sistema. Infelizmente, a biblioteca que usamos para trabalhar com o armazenamento de chaves requer um serviço que expõe `org.freedesktop.secrets` no D-BUS, e o pior é que há apenas dois serviços que o expõem.
|
||||
|
||||
- ❗ Se você usa GNOME como ambiente de desktop (por exemplo, usuários do Ubuntu), já deve estar bem, pois o keyring já é fornecido pelo `gnome-keyring` e tudo deve estar funcionando.
|
||||
- ❗ Para usuários de outros ambientes de desktop, há um programa legal que você pode usar para obter um keyring, que é o [KeepassXC](https://keepassxc.org/), que eu uso na minha instalação Manjaro (com KDE) e funciona bem. O único problema é que você precisa configurá-lo para ser usado junto com o termscp (mas é bastante simples). Para começar com KeepassXC, leia mais [aqui](#configuração-do-keepassxc-para-o-termscp).
|
||||
- ❗ E se você não quiser instalar nenhum desses serviços? Bem, não tem problema! **termscp continuará funcionando normalmente**, mas salvará a chave em um arquivo, como normalmente faz para BSD e WSL.
|
||||
|
||||
##### Configuração do KeepassXC para o termscp
|
||||
|
||||
Siga estas etapas para configurar o KeepassXC para o termscp:
|
||||
|
||||
1. Instale o KeepassXC
|
||||
2. Vá para "ferramentas" > "configurações" na barra de ferramentas
|
||||
3. Selecione "Integração do Serviço Secreto" e ative "Habilitar Integração do Serviço Secreto do KeepassXC"
|
||||
4. Crie um banco de dados, se você ainda não tiver um: na barra de ferramentas "Banco de dados" > "Novo banco de dados"
|
||||
5. Na barra de ferramentas: "Banco de dados" > "Configurações do banco de dados"
|
||||
6. Selecione "Integração do Serviço Secreto" e ative "Expor entradas sob este grupo"
|
||||
7. Selecione o grupo na lista onde deseja que o segredo do termscp seja mantido. Lembre-se de que esse grupo pode ser usado por qualquer outro aplicativo para armazenar segredos via DBUS.
|
||||
|
||||
---
|
||||
|
||||
## Configuração ⚙️
|
||||
|
||||
O termscp suporta alguns parâmetros definidos pelo usuário, que podem ser definidos na configuração.
|
||||
Por baixo dos panos, o termscp tem um arquivo TOML e alguns outros diretórios onde todos os parâmetros serão salvos, mas não se preocupe, você não precisará tocar em nenhum desses arquivos manualmente, pois fiz com que fosse possível configurar o termscp completamente a partir de sua interface de usuário.
|
||||
|
||||
Assim como para os favoritos, o termscp só requer que esses caminhos estejam acessíveis:
|
||||
|
||||
- `$HOME/.config/termscp/` no Linux/BSD
|
||||
- `$HOME/Library/Application Support/termscp` no MacOs
|
||||
- `FOLDERID_RoamingAppData\termscp\` no Windows
|
||||
|
||||
Para acessar a configuração, basta pressionar `<CTRL+C>` a partir da tela inicial do termscp.
|
||||
|
||||
Estes parâmetros podem ser alterados:
|
||||
|
||||
- **Editor de Texto**: o editor de texto a ser usado. Por padrão, o termscp encontrará o editor padrão para você; com essa opção, você pode forçar um editor a ser usado (por exemplo, `vim`). **Também são suportados editores GUI**, a menos que eles `nohup` do processo pai.
|
||||
- **Protocolo Padrão**: o protocolo padrão é o valor padrão para o protocolo de transferência de arquivos a ser usado no termscp. Isso se aplica à página de login e ao argumento CLI do endereço.
|
||||
- **Exibir Arquivos Ocultos**: selecione se os arquivos ocultos devem ser exibidos por padrão. Você ainda poderá decidir se deseja exibir ou não arquivos ocultos em tempo de execução pressionando `A`.
|
||||
- **Verificar atualizações**: se definido como `yes`, o termscp buscará a API do Github para verificar se há uma nova versão do termscp disponível.
|
||||
- **Prompt ao substituir arquivos existentes?**: Se definido como `yes`, o termscp pedirá confirmação sempre que uma transferência de arquivos causaria a substituição de um arquivo existente no host de destino.
|
||||
- **Agrupar Diretórios**: selecione se os diretórios devem ser agrupados ou não nos exploradores de arquivos. Se `Display first` for selecionado, os diretórios serão ordenados usando o método configurado, mas exibidos antes dos arquivos; se `Display last` for selecionado, eles serão exibidos depois.
|
||||
- **Sintaxe do formatador de arquivos remotos**: sintaxe para exibir informações de arquivo para cada arquivo no explorador remoto. Veja [Formato do Explorador de Arquivos](#formato-do-explorador-de-arquivos)
|
||||
- **Sintaxe do formatador de arquivos locais**: sintaxe para exibir informações de arquivo para cada arquivo no explorador local. Veja [Formato do Explorador de Arquivos](#formato-do-explorador-de-arquivos)
|
||||
- **Habilitar notificações?**: Se definido como `Yes`, as notificações serão exibidas.
|
||||
- **Notificações: tamanho mínimo para transferência**: se o tamanho da transferência for maior ou igual ao valor especificado, as notificações para a transferência serão exibidas. Os valores aceitos estão no formato `{UNSIGNED} B/KB/MB/GB/TB/PB`.
|
||||
- **Caminho da configuração SSH**: define o arquivo de configuração SSH a ser usado ao se conectar a um servidor SCP/SFTP. Se não definido (vazio), nenhum arquivo será usado. Você pode especificar um caminho começando com `~` para indicar o caminho inicial (por exemplo, `~/.ssh/config`). Os parâmetros suportados pelo termscp estão especificados [AQUI](https://github.com/veeso/ssh2-config#exposed-attributes).
|
||||
|
||||
### Armazenamento de Chave SSH 🔐
|
||||
|
||||
Além da configuração, o termscp também oferece um recurso **essencial** para **clientes SFTP/SCP**: o armazenamento de chave SSH.
|
||||
|
||||
Você pode acessar o armazenamento de chaves SSH na configuração, indo para a aba `Chaves SSH`. Uma vez lá, você pode:
|
||||
|
||||
- **Adicionar uma nova chave**: basta pressionar `<CTRL+N>` e você será solicitado a criar uma nova chave. Forneça o nome do host/endereço IP e o nome de usuário associado à chave e, finalmente, um editor de texto será aberto: cole a **chave SSH PRIVADA** no editor de texto, salve e saia.
|
||||
- **Remover uma chave existente**: apenas pressione `<DEL>` ou `<CTRL+E>` na chave que você deseja remover para deletar a chave do termscp permanentemente.
|
||||
- **Editar uma chave existente**: basta pressionar `<ENTER>` na chave que você deseja editar para alterar a chave privada.
|
||||
|
||||
> Pergunta: Espere, minha chave privada está protegida com senha, posso usá-la?
|
||||
> Resposta: Claro que sim. A senha fornecida para autenticação no termscp é válida tanto para autenticação por nome de usuário/senha quanto para autenticação por chave RSA.
|
||||
|
||||
### Formato do Explorador de Arquivos
|
||||
|
||||
É possível, através da configuração, definir um formato personalizado para o explorador de arquivos. Isso é possível tanto para o host local quanto para o remoto, para que você possa ter duas sintaxes diferentes em uso. Esses campos, com nome `File formatter syntax (local)` e `File formatter syntax (remote)`, definirão como as entradas de arquivos serão exibidas no explorador de arquivos.
|
||||
A sintaxe para o formatador é a seguinte `{KEY1}... {KEY2:LENGTH}... {KEY3:LENGTH:EXTRA} {KEYn}...`.
|
||||
Cada chave entre colchetes será substituída pelo atributo relacionado, enquanto tudo fora dos colchetes permanecerá inalterado.
|
||||
|
||||
- O nome da chave é obrigatório e deve ser uma das chaves abaixo.
|
||||
- O comprimento descreve o espaço reservado para exibir o campo. Atributos estáticos não suportam esse recurso (GRUPO, PEX, TAMANHO, USUÁRIO).
|
||||
- O Extra é suportado apenas por alguns parâmetros e é uma opção adicional. Veja as chaves para verificar se o extra é suportado.
|
||||
|
||||
Estas são as chaves suportadas pelo formatador:
|
||||
|
||||
- `ATIME`: Última vez de acesso (com sintaxe padrão `%b %d %Y %H:%M`); O Extra pode ser fornecido como a sintaxe de tempo (por exemplo, `{ATIME:8:%H:%M}`).
|
||||
- `CTIME`: Tempo de criação (com sintaxe `%b %d %Y %H:%M`); O Extra pode ser fornecido como a sintaxe de tempo (por exemplo, `{CTIME:8:%H:%M}`).
|
||||
- `GROUP`: Grupo do proprietário.
|
||||
- `MTIME`: Última modificação (com sintaxe `%b %d %Y %H:%M`); O Extra pode ser fornecido como a sintaxe de tempo (por exemplo, `{MTIME:8:%H:%M}`).
|
||||
- `NAME`: Nome do arquivo (pastas entre a raiz e os primeiros ancestrais são omitidas se forem maiores que o comprimento).
|
||||
- `PATH`: Caminho absoluto do arquivo (pastas entre a raiz e os primeiros ancestrais são omitidas se forem maiores que o comprimento).
|
||||
- `PEX`: Permissões do arquivo (formato UNIX).
|
||||
- `SIZE`: Tamanho do arquivo (omitido para diretórios).
|
||||
- `SYMLINK`: Link simbólico (se houver `-> {FILE_PATH}`).
|
||||
- `USER`: Nome do proprietário.
|
||||
|
||||
Se deixado vazio, será usada a sintaxe padrão do formatador: `{NAME:24} {PEX} {USER} {SIZE} {MTIME:17:%b %d %Y %H:%M}`.
|
||||
|
||||
---
|
||||
|
||||
## Temas 🎨
|
||||
|
||||
O termscp oferece a você um recurso incrível: a possibilidade de definir as cores para vários componentes no aplicativo.
|
||||
Se você deseja personalizar o termscp, há duas maneiras disponíveis para fazer isso:
|
||||
|
||||
- A partir do **menu de configuração**
|
||||
- Importando um **arquivo de tema**
|
||||
|
||||
Para criar sua própria personalização no termscp, tudo o que você precisa fazer é entrar na configuração a partir da atividade de autenticação, pressionar `<CTRL+C>` e depois `<TAB>` duas vezes. Agora você deve ter se movido para o painel de `themes`.
|
||||
|
||||
Aqui você pode se mover com `<UP>` e `<DOWN>` para alterar o estilo que deseja alterar, como mostrado no gif abaixo:
|
||||
|
||||

|
||||
|
||||
O termscp suporta tanto a sintaxe tradicional de hexadecimal explícito (`#rrggbb`) quanto rgb `rgb(r, g, b)` para fornecer cores, mas também **[cores CSS](https://www.w3schools.com/cssref/css_colors.asp)** (como `crimson`) são aceitas 😉. Há também uma palavra-chave especial, que é `Default`. Default significa que a cor usada será a cor padrão de primeiro plano ou plano de fundo, dependendo da situação (primeiro plano para textos e linhas, plano de fundo para, bem, adivinhe).
|
||||
|
||||
Como mencionado antes, você também pode importar arquivos de temas. Você pode se inspirar ou usar diretamente um dos temas fornecidos junto com o termscp, localizado no diretório `themes/` deste repositório, e importá-los executando o termscp como `termscp -t <arquivo-do-tema>`. Se tudo correu bem, ele deve informar que o tema foi importado com sucesso.
|
||||
|
||||
### Meu Tema Não Carrega 😱
|
||||
|
||||
Isso provavelmente se deve a uma atualização recente que quebrou o tema. Sempre que eu adiciono uma nova chave aos temas, o tema salvo não será carregado. Para corrigir esse problema, existem duas soluções rápidas:
|
||||
|
||||
1. Recarregar o tema: sempre que eu lançar uma atualização, também corrigirei os "temas oficiais", então você só precisará baixá-lo novamente do repositório e reimportar o tema usando a opção `-t`.
|
||||
|
||||
```sh
|
||||
termscp -t <theme.toml>
|
||||
```
|
||||
|
||||
2. Corrigir seu tema: se você estiver usando um tema personalizado, você pode editá-lo via `vim` e adicionar a chave que está faltando. O tema está localizado em `$CONFIG_DIR/termscp/theme.toml`, onde `$CONFIG_DIR` é:
|
||||
|
||||
- FreeBSD/GNU-Linux: `$HOME/.config/`
|
||||
- MacOs: `$HOME/Library/Application Support`
|
||||
- Windows: `%appdata%`
|
||||
|
||||
❗ As chaves que faltam são relatadas no CHANGELOG sob `BREAKING CHANGES` para a versão que você acabou de instalar.
|
||||
|
||||
### Estilos 💈
|
||||
|
||||
Você pode encontrar na tabela abaixo a descrição para cada campo de estilo.
|
||||
Por favor, note que **estilos não se aplicam à página de configuração**, para torná-la sempre acessível no caso de você bagunçar tudo.
|
||||
|
||||
#### Página de Autenticação
|
||||
|
||||
| Chave | Descrição |
|
||||
|-----------------|----------------------------------------------|
|
||||
| auth_address | Cor do campo de entrada para endereço IP |
|
||||
| auth_bookmarks | Cor do painel de favoritos |
|
||||
| auth_password | Cor do campo de entrada para senha |
|
||||
| auth_port | Cor do campo de entrada para número da porta |
|
||||
| auth_protocol | Cor do grupo de rádio para protocolo |
|
||||
| auth_recents | Cor do painel de recentes |
|
||||
| auth_username | Cor do campo de entrada para nome de usuário |
|
||||
|
||||
#### Página de Transferência
|
||||
|
||||
| Chave | Descrição |
|
||||
|--------------------------------------|---------------------------------------------------------------------------------|
|
||||
| transfer_local_explorer_background | Cor de fundo do explorador do localhost |
|
||||
| transfer_local_explorer_foreground | Cor de primeiro plano do explorador do localhost |
|
||||
| transfer_local_explorer_highlighted | Cor da borda e realce do explorador do localhost |
|
||||
| transfer_remote_explorer_background | Cor de fundo do explorador remoto |
|
||||
| transfer_remote_explorer_foreground | Cor de primeiro plano do explorador remoto |
|
||||
| transfer_remote_explorer_highlighted | Cor da borda e realce do explorador remoto |
|
||||
| transfer_log_background | Cor de fundo do painel de logs |
|
||||
| transfer_log_window | Cor da janela para o painel de logs |
|
||||
| transfer_progress_bar_partial | Cor parcial da barra de progresso |
|
||||
| transfer_progress_bar_total | Cor total da barra de progresso |
|
||||
| transfer_status_hidden | Cor para a etiqueta "oculto" na barra de status |
|
||||
| transfer_status_sorting | Cor para a etiqueta "ordenando" na barra de status; aplica-se também ao diálogo de ordenação de arquivos |
|
||||
| transfer_status_sync_browsing | Cor para a etiqueta "navegação sincronizada" na barra de status |
|
||||
|
||||
#### Diversos
|
||||
|
||||
Estes estilos se aplicam a diferentes partes do aplicativo.
|
||||
|
||||
| Chave | Descrição |
|
||||
|-----------------------------|------------------------------------------------|
|
||||
| misc_error_dialog | Cor para mensagens de erro |
|
||||
| misc_info_dialog | Cor para diálogos de informações |
|
||||
| misc_input_dialog | Cor para diálogos de entrada (como copiar arquivo) |
|
||||
| misc_keys | Cor do texto para teclas de atalho |
|
||||
| misc_quit_dialog | Cor para diálogos de saída |
|
||||
| misc_save_dialog | Cor para diálogos de salvar |
|
||||
| misc_warn_dialog | Cor para diálogos de aviso |
|
||||
|
||||
---
|
||||
|
||||
## Editor de Texto ✏
|
||||
|
||||
O termscp possui, como você deve ter notado, muitos recursos, um deles é a possibilidade de visualizar e editar arquivos de texto. Não importa se o arquivo está localizado no host local ou no host remoto, o termscp oferece a possibilidade de abrir um arquivo no seu editor de texto favorito.
|
||||
Caso o arquivo esteja localizado no host remoto, ele será primeiro baixado para o seu diretório temporário e, **somente** se alterações forem feitas no arquivo, ele será re-enviado para o host remoto. O termscp verifica se você fez alterações no arquivo verificando o último tempo de modificação do arquivo.
|
||||
|
||||
> ❗ Apenas um lembrete: **você só pode editar arquivos de texto**; arquivos binários não são suportados.
|
||||
|
||||
---
|
||||
|
||||
## Registro de Logs 🩺
|
||||
|
||||
O termscp escreve um arquivo de log para cada sessão, que é gravado em:
|
||||
|
||||
- `$HOME/.cache/termscp/termscp.log` no Linux/BSD
|
||||
- `$HOME/Library/Caches/termscp/termscp.log` no MacOs
|
||||
- `FOLDERID_LocalAppData\termscp\termscp.log` no Windows
|
||||
|
||||
o log não será rotacionado, mas será truncado após cada execução do termscp, então se você quiser relatar um problema e anexar seu arquivo de log, lembre-se de salvar o arquivo de log em um local seguro antes de usar o termscp novamente. O registro por padrão é feito no nível *INFO*, então não é muito detalhado.
|
||||
|
||||
Se você quiser enviar um problema, por favor, se puder, reproduza o problema com o nível definido como `TRACE`, para isso, inicie o termscp com a opção CLI `-D`.
|
||||
|
||||
Sei que você pode ter algumas perguntas sobre arquivos de log, então fiz um tipo de perguntas e respostas:
|
||||
|
||||
> Não quero registros, posso desativá-los?
|
||||
|
||||
Sim, você pode. Basta iniciar o termscp com a opção `-q ou --quiet`. Você pode aliasar o termscp para tornar isso persistente. Lembre-se de que os registros são usados para diagnosticar problemas, então, como atrás de todo projeto de código aberto deve sempre haver esse tipo de ajuda mútua, manter os arquivos de log pode ser sua maneira de apoiar o projeto 😉. Não quero que você se sinta culpado, mas só estou dizendo.
|
||||
|
||||
> O registro é seguro?
|
||||
|
||||
Se você estiver preocupado com a segurança, o arquivo de log não contém nenhuma senha em texto simples, então não se preocupe e expõe as mesmas informações que o arquivo irmão `bookmarks` relata.
|
||||
|
||||
## Notificações 📫
|
||||
|
||||
O termscp enviará notificações da área de trabalho para estes tipos de eventos:
|
||||
|
||||
- Em **Transferência concluída**: A notificação será enviada quando uma transferência for concluída com sucesso.
|
||||
- ❗ A notificação será exibida apenas se o tamanho total da transferência for pelo menos o especificado em `Notifications: minimum transfer size` na configuração.
|
||||
- Em **Transferência falhou**: A notificação será enviada quando uma transferência falhar devido a um erro.
|
||||
- ❗ A notificação será exibida apenas se o tamanho total da transferência for pelo menos o especificado em `Notifications: minimum transfer size` na configuração.
|
||||
- Em **Atualização disponível**: Sempre que uma nova versão do termscp estiver disponível, uma notificação será exibida.
|
||||
- Em **Atualização instalada**: Sempre que uma nova versão do termscp for instalada, uma notificação será exibida.
|
||||
- Em **Falha na atualização**: Sempre que a instalação da atualização falhar, uma notificação será exibida.
|
||||
|
||||
❗ Se você prefere manter as notificações desativadas, basta entrar na configuração e definir `Enable notifications?` para `No` 😉.
|
||||
❗ Se quiser alterar o tamanho mínimo para exibir notificações, você pode mudar o valor na configuração com a chave `Notifications: minimum transfer size` e ajustá-lo ao que for melhor para você 🙂.
|
||||
|
||||
---
|
||||
|
||||
## Observador de Arquivos 🔭
|
||||
|
||||
O observador de arquivos permite que você configure uma lista de caminhos para sincronizar com os hosts remotos.
|
||||
Isso significa que, sempre que uma alteração no sistema de arquivos local for detectada no caminho sincronizado, a alteração será automaticamente relatada para o caminho do host remoto configurado, dentro de 5 segundos.
|
||||
|
||||
Você pode definir quantos caminhos desejar para sincronizar:
|
||||
|
||||
1. Coloque o cursor no explorador local no diretório/arquivo que deseja manter sincronizado.
|
||||
2. Vá para o diretório para o qual deseja que as alterações sejam relatadas no host remoto.
|
||||
3. Pressione `<T>`.
|
||||
4. Responda `<YES>` na janela pop-up.
|
||||
|
||||
Para desfazer a observação, basta pressionar `<T>` no caminho local sincronizado (ou em qualquer um de seus subdiretórios)
|
||||
OU você pode simplesmente pressionar `<CTRL+T>` e pressionar `<ENTER>` no caminho sincronizado que deseja desfazer a observação.
|
||||
|
||||
Estas alterações serão relatadas para o host remoto:
|
||||
|
||||
- Novos arquivos, alterações em arquivos.
|
||||
- Arquivo movido/renomeado.
|
||||
- Arquivo removido/desvinculado.
|
||||
|
||||
> ❗ O observador funciona apenas em uma direção (local > remoto). Não é possível sincronizar automaticamente as alterações do host remoto para o local.
|
||||
306
docs/zh-CN/README.md
Normal file
@@ -0,0 +1,306 @@
|
||||
# termscp
|
||||
|
||||
<p align="center">
|
||||
<img src="/assets/images/termscp.svg" alt="logo" width="256" height="256" />
|
||||
</p>
|
||||
|
||||
<p align="center">~ 功能丰富的终端文件传输工具 ~</p>
|
||||
<p align="center">
|
||||
<a href="https://termscp.veeso.dev" target="_blank">网站</a>
|
||||
·
|
||||
<a href="https://termscp.veeso.dev/#get-started" target="_blank">安装</a>
|
||||
·
|
||||
<a href="https://termscp.veeso.dev/#user-manual" target="_blank">用户手册</a>
|
||||
</p>
|
||||
|
||||
<p align="center">
|
||||
<a href="https://github.com/veeso/termscp"
|
||||
><img
|
||||
height="20"
|
||||
src="/assets/images/flags/gb.png"
|
||||
alt="English"
|
||||
/></a>
|
||||
|
||||
<a
|
||||
href="https://github.com/veeso/termscp/blob/main/docs/pt-BR/README.md"
|
||||
><img
|
||||
height="20"
|
||||
src="/assets/images/flags/br.png"
|
||||
alt="Brazilian Portuguese"
|
||||
/></a>
|
||||
|
||||
<a
|
||||
href="https://github.com/veeso/termscp/blob/main/docs/de/README.md"
|
||||
><img
|
||||
height="20"
|
||||
src="/assets/images/flags/de.png"
|
||||
alt="Deutsch"
|
||||
/></a>
|
||||
|
||||
<a
|
||||
href="https://github.com/veeso/termscp/blob/main/docs/es/README.md"
|
||||
><img
|
||||
height="20"
|
||||
src="/assets/images/flags/es.png"
|
||||
alt="Español"
|
||||
/></a>
|
||||
|
||||
<a
|
||||
href="https://github.com/veeso/termscp/blob/main/docs/fr/README.md"
|
||||
><img
|
||||
height="20"
|
||||
src="/assets/images/flags/fr.png"
|
||||
alt="Français"
|
||||
/></a>
|
||||
|
||||
<a
|
||||
href="https://github.com/veeso/termscp/blob/main/docs/it/README.md"
|
||||
><img
|
||||
height="20"
|
||||
src="/assets/images/flags/it.png"
|
||||
alt="Italiano"
|
||||
/></a>
|
||||
|
||||
<a
|
||||
href="https://github.com/veeso/termscp/blob/main/docs/zh-CN/README.md"
|
||||
><img
|
||||
height="20"
|
||||
src="/assets/images/flags/cn.png"
|
||||
alt="简体中文"
|
||||
/></a>
|
||||
</p>
|
||||
|
||||
<p align="center">由 <a href="https://veeso.me/" target="_blank">@veeso</a> 开发</p>
|
||||
<p align="center">当前版本: 0.17.0 24/03/2025</p>
|
||||
|
||||
<p align="center">
|
||||
<a href="https://opensource.org/licenses/MIT"
|
||||
><img
|
||||
src="https://img.shields.io/badge/License-MIT-teal.svg"
|
||||
alt="License-MIT"
|
||||
/></a>
|
||||
<a href="https://github.com/veeso/termscp/stargazers"
|
||||
><img
|
||||
src="https://img.shields.io/github/stars/veeso/termscp.svg"
|
||||
alt="Repo stars"
|
||||
/></a>
|
||||
<a href="https://crates.io/crates/termscp"
|
||||
><img
|
||||
src="https://img.shields.io/crates/d/termscp.svg"
|
||||
alt="Downloads counter"
|
||||
/></a>
|
||||
<a href="https://crates.io/crates/termscp"
|
||||
><img
|
||||
src="https://img.shields.io/crates/v/termscp.svg"
|
||||
alt="Latest version"
|
||||
/></a>
|
||||
<a href="https://ko-fi.com/veeso">
|
||||
<img
|
||||
src="https://img.shields.io/badge/donate-ko--fi-red"
|
||||
alt="Ko-fi"
|
||||
/></a>
|
||||
</p>
|
||||
<p align="center">
|
||||
<a href="https://github.com/veeso/termscp/actions"
|
||||
><img
|
||||
src="https://github.com/veeso/termscp/workflows/Linux/badge.svg"
|
||||
alt="Linux CI"
|
||||
/></a>
|
||||
<a href="https://github.com/veeso/termscp/actions"
|
||||
><img
|
||||
src="https://github.com/veeso/termscp/workflows/MacOS/badge.svg"
|
||||
alt="MacOS CI"
|
||||
/></a>
|
||||
<a href="https://github.com/veeso/termscp/actions"
|
||||
><img
|
||||
src="https://github.com/veeso/termscp/workflows/Windows/badge.svg"
|
||||
alt="Windows CI"
|
||||
/></a>
|
||||
<a href="https://github.com/veeso/termscp/actions"
|
||||
><img
|
||||
src="https://github.com/veeso/termscp/workflows/FreeBSD/badge.svg"
|
||||
alt="FreeBSD CI"
|
||||
/></a>
|
||||
<a href="https://coveralls.io/github/veeso/termscp"
|
||||
><img
|
||||
src="https://coveralls.io/repos/github/veeso/termscp/badge.svg"
|
||||
alt="Coveralls"
|
||||
/></a>
|
||||
</p>
|
||||
|
||||
---
|
||||
|
||||
## 关于 termscp 🖥
|
||||
|
||||
termscp 是一个功能丰富的终端文件浏览和传输工具,支持 SCP/SFTP/FTP/Kube/S3/WebDAV。 作为一个带有 TUI 的命令行工具,它可以连接到远程服务器进行文件检索和上传,并能够与本地文件系统进行交互。
|
||||
|
||||
兼容 **Linux**、**MacOS**、**FreeBSD** 和 **Windows** 操作系统。
|
||||
|
||||

|
||||
|
||||
---
|
||||
|
||||
## 特性 🎁
|
||||
|
||||
- 📁 支持多种通信协议
|
||||
- **SFTP**
|
||||
- **SCP**
|
||||
- **FTP** and **FTPS**
|
||||
- **Kube**
|
||||
- **S3**
|
||||
- **SMB**
|
||||
- **WebDAV**
|
||||
- 🖥 使用便捷的 UI 在远程和本地文件系统上浏览和操作
|
||||
- 创建、删除、重命名、搜索、查看和编辑文件
|
||||
- ⭐ 通过“内置书签”和“最近连接”快速连接到您的主机
|
||||
- 📝 使用您喜欢的应用程序查看和编辑文件
|
||||
- 💁 使用 SSH 密钥和用户名/密码进行 SFTP/SCP 身份验证
|
||||
- 🐧 兼容 Windows、Linux、FreeBSD 和 MacOS 操作系统
|
||||
- 🎨 丰富的个性化设置!
|
||||
- 主题
|
||||
- 自定义文件浏览器格式
|
||||
- 可选择的文本编辑器
|
||||
- 可选择的文件排序
|
||||
- 探索更多功能...
|
||||
- 📫 传输大文件时通过桌面通知获得提醒
|
||||
- 🔭 与远程主机文件更改保持同步
|
||||
- 🔐 将密码保存在操作系统密钥保管库中
|
||||
- 🦀 由 Rust 提供强力支持
|
||||
- 👀 开发时更注重性能
|
||||
- 🦄 快速且精彩迭代
|
||||
|
||||
---
|
||||
|
||||
## 开始 🚀
|
||||
|
||||
非常荣幸您能考虑安装termscp💜! 希望你会喜欢termscp!
|
||||
|
||||
如果您想为此项目做出贡献,请不要忘记查看我们的贡献指南。 [阅读更多](../../CONTRIBUTING.md)
|
||||
|
||||
如果您是 Linux、FreeBSD 或 MacOS 用户,使用以下简单的 shell 脚本通过单行指令在您的系统上安装 termscp:
|
||||
|
||||
```sh
|
||||
curl -sSLf http://get-termscp.veeso.dev | sh
|
||||
```
|
||||
|
||||
如果您是 Windows 用户,则可以使用 [Chocolatey](https://chocolatey.org/) 安装 termscp:
|
||||
|
||||
```sh
|
||||
choco install termscp
|
||||
```
|
||||
|
||||
如需更多信息或其他的平台支持,请访问 [termscp.veeso.dev](https://termscp.veeso.dev/termscp/#get-started) 查看所有安装方法。
|
||||
|
||||
⚠️ 如果您正在寻找如何更新 termscp 只需从 CLI 运行 termscp : `(sudo) termscp --update` ⚠️
|
||||
|
||||
### 依赖 ❗
|
||||
|
||||
- **Linux** 用户:
|
||||
- libssh
|
||||
- libdbus-1
|
||||
- pkg-config
|
||||
- libsmbclient
|
||||
- **FreeBSD** 用户:
|
||||
- libssh
|
||||
- dbus
|
||||
- pkgconf
|
||||
- libsmbclient
|
||||
|
||||
### 可选项 ✔️
|
||||
|
||||
通过执行以下操作以享受软件的完整功能,但不做强制要求
|
||||
|
||||
- **Linux/FreeBSD** 用户:
|
||||
- 用 `V` **打开** 文件(至少其中之一)
|
||||
- *xdg-open*
|
||||
- *gio*
|
||||
- *gnome-open*
|
||||
- *kde-open*
|
||||
- **Linux** 用户:
|
||||
- keyring manager: [在用户手册中阅读更多内容](man.md#linux-keyring)
|
||||
- **WSL** 用户
|
||||
- 用 `V` **打开** 文件(至少其中之一)
|
||||
- [wslu](https://github.com/wslutilities/wslu)
|
||||
|
||||
---
|
||||
|
||||
## 支持我 ☕
|
||||
|
||||
如果您喜欢 termscp 并且希望看到该项目不断发展和改进,请考虑在 **Buy me a coffee** 上赞赏以支持我🥳
|
||||
|
||||
[](https://ko-fi.com/veeso)
|
||||
|
||||
或者,如果您愿意,您也可以在 PayPal 上赞赏我:
|
||||
|
||||
[](https://www.paypal.me/chrisintin)
|
||||
|
||||
---
|
||||
|
||||
## 用户手册和文档 📚
|
||||
|
||||
用户手册可以在[termscp的网站](https://termscp.veeso.dev/termscp/#user-manual)或者在[Github](man.md)上找到。
|
||||
|
||||
---
|
||||
|
||||
## 贡献和问题 🤝🏻
|
||||
|
||||
欢迎贡献、bug报告、新功能和问题! 😉
|
||||
|
||||
如果您有任何问题或困惑,或者您想建议新功能,或者您只是想改进termscp,请随时打开 issue 或 PR。
|
||||
|
||||
请遵循 [我们的贡献指南](../../CONTRIBUTING.md)
|
||||
|
||||
---
|
||||
|
||||
## 更新日志 ⏳
|
||||
|
||||
查看termscp的 [更新日志](../../CHANGELOG.md)
|
||||
|
||||
---
|
||||
|
||||
## 支持 💪
|
||||
|
||||
termscp 由这些很棒的项目提供支持:
|
||||
|
||||
- [bytesize](https://github.com/hyunsik/bytesize)
|
||||
- [crossterm](https://github.com/crossterm-rs/crossterm)
|
||||
- [edit](https://github.com/milkey-mouse/edit)
|
||||
- [keyring-rs](https://github.com/hwchen/keyring-rs)
|
||||
- [open-rs](https://github.com/Byron/open-rs)
|
||||
- [rpassword](https://github.com/conradkleinespel/rpassword)
|
||||
- [rust-s3](https://github.com/durch/rust-s3)
|
||||
- [self_update](https://github.com/jaemk/self_update)
|
||||
- [ssh2-rs](https://github.com/alexcrichton/ssh2-rs)
|
||||
- [suppaftp](https://github.com/veeso/suppaftp)
|
||||
- [ratatui](https://github.com/ratatui-org/ratatui)
|
||||
- [tui-realm](https://github.com/veeso/tui-realm)
|
||||
- [whoami](https://github.com/libcala/whoami)
|
||||
- [wildmatch](https://github.com/becheran/wildmatch)
|
||||
|
||||
---
|
||||
|
||||
## 演示 🎬
|
||||
|
||||
> 首页
|
||||
|
||||

|
||||
|
||||
> 书签
|
||||
|
||||

|
||||
|
||||
> 设置
|
||||
|
||||

|
||||
|
||||
> 文本编辑器
|
||||
|
||||

|
||||
|
||||
---
|
||||
|
||||
## 许可协议 📃
|
||||
|
||||
“termscp”使用 MIT 许可。
|
||||
|
||||
您可以阅读整个 [许可证](../../LICENSE)
|
||||
593
docs/zh-CN/man.md
Normal file
@@ -0,0 +1,593 @@
|
||||
# 操作指南 🎓
|
||||
|
||||
- [操作指南 🎓](#操作指南-)
|
||||
- [用法](#用法)
|
||||
- [地址参数](#地址参数)
|
||||
- [AWS S3 地址参数](#aws-s3-地址参数)
|
||||
- [Kube 地址参数](#kube-地址参数)
|
||||
- [WebDAV 地址参数](#webdav-地址参数)
|
||||
- [SMB 地址参数](#smb-地址参数)
|
||||
- [如何输入密码](#如何输入密码)
|
||||
- [S3 连接参数](#s3-连接参数)
|
||||
- [Aws S3 凭证](#aws-s3-凭证)
|
||||
- [文件浏览](#文件浏览)
|
||||
- [快捷键](#快捷键)
|
||||
- [操作多个文件 🥷](#操作多个文件-)
|
||||
- [示例](#示例)
|
||||
- [同步浏览](#同步浏览)
|
||||
- [打开/打开方式](#打开打开方式)
|
||||
- [书签](#书签)
|
||||
- [我的密码安全吗?](#我的密码安全吗)
|
||||
- [Linux Keyring](#linux-keyring)
|
||||
- [用于 termscp 的 KeepassXC 设置](#用于-termscp-的-keepassxc-设置)
|
||||
- [配置](#配置)
|
||||
- [SSH Key Storage](#ssh-key-storage)
|
||||
- [资源管理器格式](#资源管理器格式)
|
||||
- [主题](#主题)
|
||||
- [样式](#样式)
|
||||
- [我的主题无法加载](#我的主题无法加载)
|
||||
- [登录页](#登录页)
|
||||
- [文件传输页](#文件传输页)
|
||||
- [Misc](#misc)
|
||||
- [文本编辑器](#文本编辑器)
|
||||
- [日志](#日志)
|
||||
- [通知](#通知)
|
||||
- [文件观察者🔭](#文件观察者)
|
||||
|
||||
## 用法
|
||||
|
||||
termscp启动时可以使用以下选项:
|
||||
|
||||
`termscp [options]... [protocol://user@address:port:wrkdir] [protocol://user@address:port:wrkdir] [local-wrkdir]`
|
||||
|
||||
或作为
|
||||
|
||||
`termscp [options]... -b [bookmark-name] -b [bookmark-name] [local-wrkdir]`
|
||||
|
||||
- `-P, --password <password>` 登陆密码
|
||||
- `-b, --address-as-bookmark` 将地址参数解析为书签名称
|
||||
- `-q, --quiet` 禁用日志
|
||||
- `-v, --version` 打印版本信息
|
||||
- `-h, --help` 打开帮助
|
||||
|
||||
termscp有两种不同的启动模式,不带参数时,termscp将显示登录表单页,用户可以填写连接到远程服务端所需的参数。
|
||||
|
||||
或者,用户可以提供一个url作为参数,跳过认证页,直接与远程服务器进行连接。
|
||||
|
||||
如果提供了url参数,你也可以提供本地主机的起始工作目录。
|
||||
|
||||
### 地址参数
|
||||
|
||||
地址参数的格式如下:
|
||||
|
||||
```txt
|
||||
[protocol://][username@]<address>[:port][:wrkdir]
|
||||
```
|
||||
|
||||
让我们通过一些例子熟悉这个特殊语法,它很好上手,你会很快习惯并且替代其他工具......
|
||||
|
||||
- 使用默认协议(*在配置中定义*)连接到192.168.1.31,如果没有提供端口,则为所选协议的默认端口(取决于你的配置);用户名是系统当前用户名
|
||||
|
||||
```sh
|
||||
termscp 192.168.1.31
|
||||
```
|
||||
|
||||
- 使用默认协议(*在配置中定义*)连接到192.168.1.31,用户名为`root`
|
||||
|
||||
```sh
|
||||
termscp root@192.168.1.31
|
||||
```
|
||||
|
||||
- 使用scp连接到192.168.1.31, 端口号为4022; 用户名为 `omar`
|
||||
|
||||
```sh
|
||||
termscp scp://omar@192.168.1.31:4022
|
||||
```
|
||||
|
||||
- 使用scp连接到192.168.1.31, 端口号为4022; 用户名为 `omar`。工作目录为 `/tmp`
|
||||
|
||||
```sh
|
||||
termscp scp://omar@192.168.1.31:4022:/tmp
|
||||
```
|
||||
|
||||
#### AWS S3 地址参数
|
||||
|
||||
出于显而易见的原因,Aws S3 对 CLI 地址参数有不同的语法,但我设法使其与通用地址参数尽可能相似:
|
||||
|
||||
```txt
|
||||
s3://<bucket-name>@<region>[:profile][:/wrkdir]
|
||||
```
|
||||
|
||||
例如
|
||||
|
||||
```txt
|
||||
s3://buckethead@eu-central-1:default:/assets
|
||||
```
|
||||
|
||||
#### Kube 地址参数
|
||||
|
||||
如果您想连接到 Kube,请使用以下语法
|
||||
|
||||
```txt
|
||||
kube://[namespace][@<cluster_url>][$</path>]
|
||||
```
|
||||
|
||||
#### WebDAV 地址参数
|
||||
|
||||
如果您想要连接到 WebDAV,请使用以下语法
|
||||
|
||||
```txt
|
||||
http://<username>:<password>@<url></path>
|
||||
或者如果您想要使用 https
|
||||
```
|
||||
|
||||
```txt
|
||||
https://<username>:<password>@<url></path>
|
||||
```
|
||||
|
||||
#### SMB 地址参数
|
||||
|
||||
SMB 对 CLI 地址参数有不同的语法,无论您是在 Windows 还是其他系统上,这都是不同的:
|
||||
|
||||
**Windows** 句法:
|
||||
|
||||
```txt
|
||||
\\[username@]<server-name>\<share>[\path\...]
|
||||
```
|
||||
|
||||
**其他系统** 句法:
|
||||
|
||||
```txt
|
||||
smb://[username@]<server-name>[:port]/<share>[/path/.../]
|
||||
```
|
||||
|
||||
#### 如何输入密码
|
||||
|
||||
你可能已经注意到,url参数中没有办法直接附加密码,你可以通过以下三种方式提供密码:
|
||||
|
||||
- `-P, --password` 不推荐:直接在参数中填写明文密码。强烈不推荐这种方法,因为它非常不安全(因为你可能会把密码保留在shell历史记录中)。
|
||||
- 通过 `sshpass`: 你可以通过 `sshpass` 传入密码, 例如: `sshpass -f ~/.ssh/topsecret.key termscp cvisintin@192.168.1.31`
|
||||
- 提示输入密码:如果你不使用前面的任何方法,你会被提示输入密码,就像 `scp`、`ssh` 等比较经典的工具上一样。
|
||||
|
||||
---
|
||||
|
||||
## S3 连接参数
|
||||
|
||||
这些参数是连接到 aws s3 和其他 s3 兼容服务器所必需的:
|
||||
|
||||
- AWS S3:
|
||||
- **bucket name**
|
||||
- **region**
|
||||
- *profile* (如果未提供:“default”)
|
||||
- *access key* (除非公开)
|
||||
- *secret access key* (除非公开)
|
||||
- *security token* (如果需要的话)
|
||||
- *session token* (如果需要的话)
|
||||
- new path style: **NO**
|
||||
- 其他 S3 端点:
|
||||
- **bucket name**
|
||||
- **endpoint**
|
||||
- *access key* (如果需要的话)
|
||||
- *secret access key* (如果需要的话)
|
||||
- new path style: **YES**
|
||||
|
||||
### Aws S3 凭证
|
||||
|
||||
为了连接到 Aws S3 存储桶,您显然必须提供一些凭据。
|
||||
因此,您可以通过以下方式为 s3 提供凭据:
|
||||
|
||||
1. 认证形式:
|
||||
1. 您可以提供 `access_key`(应该是强制性的)、`secret_access_key`(应该是强制性的)、`security_token` 和`session_token`
|
||||
2. 如果您将 s3 连接保存为书签,这些凭据将在您的书签文件中保存为加密的 AES-256/BASE64 字符串(安全令牌和会话令牌除外,它们是临时凭据)。.
|
||||
2. 使用您的凭证文件:只需通过`aws configure` 配置AWS cli,您的凭证应该已经位于`~/.aws/credentials`。 如果您使用的配置文件不同于“默认”,只需在身份验证表单的配置文件字段中提供它。
|
||||
3. **环境变量**: 您始终可以将您的凭据作为环境变量提供。 请记住,这些凭据**将始终覆盖**位于 `credentials` 文件中的凭据。 下面看看如何配置环境:
|
||||
|
||||
这些应该始终是强制性的:
|
||||
|
||||
- `AWS_ACCESS_KEY_ID`: aws 访问密钥 ID(通常以 `AKIA...` 开头)
|
||||
- `AWS_SECRET_ACCESS_KEY`: 秘密访问密钥
|
||||
|
||||
如果您配置了更强的安全性,您*可能*也需要这些:
|
||||
|
||||
- `AWS_SECURITY_TOKEN`: 安全令牌
|
||||
- `AWS_SESSION_TOKEN`: 会话令牌
|
||||
|
||||
⚠️ 您的凭据是安全的:termscp 不会直接操作这些值! 您的凭据直接由 **s3** crate 使用。
|
||||
如果您对安全有一些担忧,请联系 [Github](https://github.com/durch/rust-s3) 上的库作者 ⚠️
|
||||
|
||||
---
|
||||
|
||||
## 文件浏览
|
||||
|
||||
termscp中的文件资源管理器是指你与远程建立连接后可以看到的面板。
|
||||
面板由3个部分组成(是的,就这三个):
|
||||
|
||||
- 本地资源管理器面板:它显示在你的屏幕左侧,显示localhost的当前目录文件列表。
|
||||
- 远程资源管理器面板:它显示在你屏幕的右边,显示远程主机的当前目录文件列表。
|
||||
- 查找结果面板:根据你搜索文件的位置(本地/远程),它将取代对应资源管理器面板。这个面板显示与你执行的搜索查询相匹配的条目。
|
||||
|
||||
为了切换面板,你需要输入 `<LEFT>` 来移动远程资源管理器面板,`<RIGHT>` 来移动回本地资源管理器面板。当在查找结果面板时,你需要按`<ESC>`来退出面板,回到前一个面板。
|
||||
|
||||
### 快捷键
|
||||
|
||||
| 按键 | 命令 | 助记词 |
|
||||
|---------------|-------------------------------------------------------|-------------|
|
||||
| `<ESC>` | 断开远程连接;回到登录页 | |
|
||||
| `<BACKSPACE>` | 返回上一次目录 | |
|
||||
| `<TAB>` | 切换资源管理器选项卡 | |
|
||||
| `<RIGHT>` | 切换到远程管理器面板 | |
|
||||
| `<LEFT>` | 切换到本地管理器面板 | |
|
||||
| `<UP>` | 在当前列表中向上移动光标 | |
|
||||
| `<DOWN>` | 在当前列表中向下移动光标 | |
|
||||
| `<PGUP>` | 在当前列表中光标上移8行 | |
|
||||
| `<PGDOWN>` | 在当前列表中光标下移8行 | |
|
||||
| `<ENTER>` | 进入文件夹 | |
|
||||
| `<SPACE>` | 上传 / 下载选中文件 | |
|
||||
| `<BACKTAB>` | 在日志面板和管理器面板之间切换 | |
|
||||
| `<A>` | 是否显示隐藏文件 | All |
|
||||
| `<B>` | 按..排序 | Bubblesort? |
|
||||
| `<C|F5>` | 复制文件(夹) | Copy |
|
||||
| `<D|F7>` | 创建文件夹 | Directory |
|
||||
| `<E|F8|DEL>` | 删除文件 | Erase |
|
||||
| `<F>` | 文件搜索 (支持通配符) | Find |
|
||||
| `<G>` | 跳转到指定路径 | Go to |
|
||||
| `<H|F1>` | 显示帮助 | Help |
|
||||
| `<I>` | 显示选中文件(夹)信息 | Info |
|
||||
| `<K>` | 创建指向当前选定条目的符号链接 | symlinK |
|
||||
| `<L>` | 刷新当前目录列表 / 清除选中状态 | List |
|
||||
| `<M>` | 选中文件 | Mark |
|
||||
| `<N>` | 使用键入的名称新建文件 | New |
|
||||
| `<O|F4>` | 编辑文件;参考文本编辑器文档 | Open |
|
||||
| `<P>` | 打开日志面板 | Panel |
|
||||
| `<Q|F10>` | 退出termscp | Quit |
|
||||
| `<R|F7>` | 重命名文件 | Rename |
|
||||
| `<S|F2>` | 另存为... | Save |
|
||||
| `<T>` | 显示所有同步路径 | Track |
|
||||
| `<U>` | 进入上层目录 | Upper |
|
||||
| `<V|F3>` | 使用默认方式打开文件 | View |
|
||||
| `<W>` | 使用指定程序打开文件 | With |
|
||||
| `<X>` | 运行命令 | eXecute |
|
||||
| `<Y>` | 是否开启同步浏览 | sYnc |
|
||||
| `<Z>` | 更改文件权限 | |
|
||||
| `</>` | 过滤文件(支持正则表达式和通配符匹配) | |
|
||||
| `<CTRL+A>` | 选中所有文件 | |
|
||||
| `<ALT+A>` | 取消选择所有文件 | |
|
||||
| `<CTRL+C>` | 终止文件传输 | |
|
||||
| `<CTRL+T>` | 显示所有同步路径 | Track |
|
||||
|
||||
### 操作多个文件 🥷
|
||||
|
||||
你可以通过以下简单的控制操作多个文件:
|
||||
|
||||
- `<M>`:标记文件以进行选择
|
||||
- `<CTRL+A>`:选择当前目录下的所有文件
|
||||
- `<ALT+A>`:取消选择所有文件
|
||||
|
||||
被标记的文件将会以**高亮背景** 显示。
|
||||
当进行选择操作时,只有被选中的文件会执行操作,而当前高亮显示的项目会被忽略。
|
||||
|
||||
即使是在查找结果面板中,也可以操作多个文件。
|
||||
|
||||
在操作多个文件时,所有功能都可用,但某些功能会有些许不同。具体如下:
|
||||
|
||||
- *复制*:复制时会提示你输入目标名称。操作多个文件时,该名称是目标目录,所有文件将被复制到此目录中。
|
||||
- *重命名*:与复制相同,但文件将被移动到该目录。
|
||||
- *另存为*:与复制相同,但文件将被写入该目录。
|
||||
|
||||
如果你在某个目录(如 `/home`)中选择了文件,然后切换目录,文件仍会保持被选中状态,并在底部面板的**传输队列** 中显示。
|
||||
文件被选中时,会将当前*远程*目录与该文件关联;如果文件被传输,它将被传输到与之关联的目录中。
|
||||
|
||||
#### 示例
|
||||
|
||||
如果我们在本地选择 `/home/a.txt`,此时远程目录是 `/tmp`,然后我们切换到 `/var`,选择 `/var/b.txt`,而此时远程目录为 `/home`,执行传输后的结果为:
|
||||
|
||||
- `/home/a.txt` 传输到 `/tmp/a.txt`
|
||||
- `/var/b.txt` 传输到 `/home/b.txt`
|
||||
|
||||
### 同步浏览
|
||||
|
||||
启用时,同步浏览将允许你在两个面板之间同步导航操作。这意味着,每当你在一个面板上改变工作目录时,同样的动作会在另一个面板上重现。如果你想启用同步浏览,只需按下`<Y>`;按两次就可以禁用。当启用时,同步浏览的状态将在状态栏上显示为`ON`。
|
||||
|
||||
### 打开/打开方式
|
||||
|
||||
打开和打开方式的功能是由 [open-rs](https://docs.rs/crate/open/2.1.0)提供的。
|
||||
执行视图命令(`<V>`)时,关联该文件类型的系统默认应用程序会被调用以打开当前文件。这依赖于操作系统默认的服务,所以要确保你的系统中至少安装了一个这样的服务:
|
||||
|
||||
- **Windows** 用户: 无需额外操作,程序内部会调用 `start` 命令。
|
||||
- **MacOS** 用户: 同样无需额外操作,程序内部会调用系统内置的 `open` 命令。
|
||||
- **Linux** 用户: 以下程序之一需要被安装:
|
||||
- *xdg-open*
|
||||
- *gio*
|
||||
- *gnome-open*
|
||||
- *kde-open*
|
||||
- **WSL** 用户: *wslview* 是必要的,你需要安装 [wslu](https://github.com/wslutilities/wslu).
|
||||
|
||||
> Q: 我可以使用V命令编辑远程文件吗?
|
||||
> A: 不可以,至少不能在 "远程管理面板 "上直接操作。你必须先把它下载到本地目录,这是由于当你打开一个远程文件时,该文件会被下载到一个临时目录中,但没有办法监控这个文件的状态,同时也无法得知你用来打开它的程序何时被关闭。也就是说,termscp无法获知你何时完成对该文件的编辑。
|
||||
|
||||
---
|
||||
|
||||
## 书签
|
||||
|
||||
在termscp中,你可以保存常用的服务器,随后可以从termscp的主界面中快速连接到这些服务器。termscp也会在历史记录中保存你最后连接的16个主机。这个功能保留了连接到某个远程服务器的所有参数,只需在登录页下方的Tab中选中书签即可。
|
||||
|
||||
书签会尝试被保存在以下路径:
|
||||
|
||||
- `$HOME/.config/termscp/` -- Linux/BSD
|
||||
- `$HOME/Library/Application Support/termscp` -- MacOs
|
||||
- `FOLDERID_RoamingAppData\termscp\` -- Windows
|
||||
|
||||
对于书签(不包括服务器连接历史记录)而言,也可以保存用于验证的密码。注意默认情况下不保存密码,必须在保存新书签时通过提示指定密码。
|
||||
|
||||
如果您担心为您的书签保存的密码的安全性,请阅读[以下章节](#我的密码安全吗?)👀
|
||||
|
||||
请按照以下步骤新建书签:
|
||||
|
||||
1. 在认证页中输入待连接服务器的参数
|
||||
2. 按 `<CTRL+S>`
|
||||
3. 输入书签名称
|
||||
4. 选择是否保留密码
|
||||
5. 按 `<ENTER>` 提交
|
||||
|
||||
无论何时你想使用以前保存的连接,只需按下`<TAB>`导航到书签列表,然后按`<ENTER>`将书签参数加载到表格中。
|
||||
|
||||

|
||||
|
||||
### 我的密码安全吗?
|
||||
|
||||
这是当然 😉。
|
||||
如前所述,书签与密码一起保存在你的配置目录中。密码显然不是纯文本,它们是用**AES-128**加密的。这够不够安全?绝对够 (BSD和WSL用户除外😢)
|
||||
|
||||
在**Windows**、**Linux**和**MacOS**上,如果可能的话(但应该是),密码会被分别存储在*Windows Vault*、*系统钥匙串*和*Keychain*中。这实际上是超级安全的,并且是由你的操作系统直接管理的。
|
||||
|
||||
❗请注意,如果你是一个Linux用户,你真的应该阅读[下面的章节👀](#linux-keyring),因为你的系统可能没有启用或支持钥匙串功能
|
||||
|
||||
另一方面,在*BSD*和*WSL*上,用于加密密码的密钥是存储在你的驱动器上的(在$HOME/.config/termscp)。那么,仍然有可能检索到密钥来解密密码。幸运的是,密钥的位置保证了你的密钥不能被与你不同的用户读取,但是,是的,我仍然不会为暴露在互联网上的服务器保存密码😉。
|
||||
|
||||
#### Linux Keyring
|
||||
|
||||
我们都喜欢Linux,因为它给了用户自由。作为一个Linux用户,你基本上可以做任何你想做的事情,但这也有一些缺点,比如说,不同的发行版之间往往没有标准的应用程序。这也涉及到钥匙串。
|
||||
这意味着,在Linux上,你的系统可能没有安装钥匙串。不幸的是,我们用来处理钥匙存储的库需要一个在D-BUS上公开`org.freedesktop.secrets`的服务,而最糟糕的事实是,只有两个服务在公开它。
|
||||
|
||||
- ❗ 如果你使用GNOME作为桌面环境(例如ubuntu用户),那么你是幸运的,因为钥匙串已经由`gnome-keyring`提供,一切都应该已经准备就绪了。
|
||||
- ❗对于其他桌面环境的用户,有一个很好的程序,你可以用它来获得钥匙串,这就是[KeepassXC](https://keepassxc.org/),我在我的Manjaro中使用它(带KDE),一切都很正常。唯一的问题是,你必须设置它与termscp一起使用(但这很简单)。要开始使用KeepassXC,请阅读更多[这里](#keepassxc-setup-for-termscp)。
|
||||
- ❗如果你不想安装任何这些服务呢?好吧,这没有问题! **termscp依然能正常工作**,但它会将密钥保存在一个文件中,就像它通常为BSD和WSL做的那样。
|
||||
|
||||
##### 用于 termscp 的 KeepassXC 设置
|
||||
|
||||
参照以下步骤,为termscp配置keepassXC:
|
||||
|
||||
1. 安装KeepassXC
|
||||
2. 进入工具栏的 "工具">"设置"。
|
||||
3. 选择 "秘密服务集成 "并切换 "启用KeepassXC freedesktop.org secret服务集成"
|
||||
4. 创建一个数据库,如果你还没有:在工具栏的 "数据库">"新数据库"
|
||||
5. 从工具条上 "数据库" > "数据库设置"
|
||||
6. 选择 "secret服务集成 "并切换 "在此组下暴露条目"
|
||||
7. 7.在列表中选择你希望termscp secret保存到的组。记住,这个组可能被任何其他应用程序通过DBUS存储密钥。
|
||||
|
||||
---
|
||||
|
||||
## 配置
|
||||
|
||||
termscp支持一些用户定义参数,这些参数可以通过配置来修改。
|
||||
termscp有一个TOML文件和一些其他的目录,所有的参数都会被保存在这些目录中,但是不用担心,你不必手动编辑这些文件,因为我为termscp制作了可交互的用户界面。
|
||||
|
||||
termscp和书签一样,只需要保证这些路径是可访问的:
|
||||
|
||||
- `$HOME/.config/termscp/` -- Linux/BSD
|
||||
- `$HOME/Library/Application Support/termscp` -- MacOs
|
||||
- `FOLDERID_RoamingAppData\termscp\` -- Windows
|
||||
|
||||
要访问配置,你只需在termscp的主界面上按`<CTRL+C>`。
|
||||
|
||||
这些参数可以自定义:
|
||||
|
||||
- **Text Editor**:使用的文本编辑器。默认情况下,termscp将为你找到默认的编辑器;通过这个选项,你可以强制使用一个编辑器(如`vim`)。**也支持GUI编辑器**,除非它们从父进程中`nohup`。所以,如果这是你的问题:是的,你可以使用`notepad.exe`,然而,**Visual Studio Code不工作**。
|
||||
- **Default Protocol**:默认协议是termscp中默认使用的文件传输协议。这适用于登录页和地址中的CLI参数。
|
||||
- **Show Hidden Files**:选择是否应默认显示隐藏文件。你可以在运行时按 `A` 来切换是否显示隐藏的文件。
|
||||
- **Check for updates**:如果设置为 `yes`,termscp将通过Github API检查是否有新版本的termscp。
|
||||
- **Prompt when replacing existing files?**: 如果设置为 `yes`,则在文件传输会导致目标主机上的现有文件被替换时,termscp 将提示您确认。
|
||||
- **Group Dirs**:选择在文件浏览器中是否对文件夹进行分组。如果选择 `Display first`,目录将根据设置的方法排序,但仍显示在文件之前;如果选择 `Display last`,则正好相反。
|
||||
- **Remote File formatter syntax**:在远程资源管理器中为每个文件显示文件信息的语法。参见[资源管理器格式](#资源管理器格式)
|
||||
- **Local File formatter syntax**:在本地资源管理器中显示每个文件的文件信息的语法。参见[资源管理器格式](#资源管理器格式)
|
||||
- **Enable notifications?**: 如果设置为 `Yes`,则会显示通知。
|
||||
- **Notifications: minimum transfer size**: 如果传输大小大于或等于指定值,将显示传输通知。 接受的值格式为 `{UNSIGNED} B/KB/MB/GB/TB/PB`
|
||||
- **SSH Configuration path**:设置连接到 SCP/SFTP 服务器时使用的 SSH 配置文件。 如果未设置(空),则不会使用任何文件。 你可以指定一个以 `~` 开头的路径来表示主路径(例如 `~/.ssh/config`). 指定了 termscp 支持的参数 [HERE](https://github.com/veeso/ssh2-config#exposed-attributes).
|
||||
|
||||
### SSH Key Storage
|
||||
|
||||
配置选项还包括termscp为**SFTP/SCP客户端**提供的一个**必要**功能:SSH密钥存储。
|
||||
|
||||
你可以从配置中切换到到 `SSH Keys` tab页来访问SSH密钥存储,在那里你可以:
|
||||
|
||||
- **添加新密钥**:只需按下`<CTRL+N>`,你将被提示创建一个新的密钥。提供主机名/ip地址和与该钥匙关联的用户名,最后会打开一个文本编辑器:将**PRIVATE** SSH key粘贴到文本编辑器中,保存并退出。
|
||||
- **删除现有密钥**:只要在你想删除的密钥上按下`<DEL>`或`<CTRL+E>`,就可以从 termscp 中永久删除该密钥。
|
||||
- **编辑现有密钥**:只需在你想编辑的密钥上按下`<ENTER>`,就可以修改私钥。
|
||||
|
||||
> 问:等等,我的私钥受密码保护,也是可以用的吗?
|
||||
> 答:当然可以。termscp中提供的认证密码,对用户名/密码认证和RSA密钥认证都有效。
|
||||
|
||||
### 资源管理器格式
|
||||
|
||||
可以为文件浏览器配置自定义的格式,本地和远程主机允许进行单独设定,所以你可以使用两种不同的语法。这些字段的名称为 `File formatter syntax (local)` 和 `File formatter syntax (remote)`,将定义文件条目如何在文件资源管理器中显示。
|
||||
格式化的语法如下 `{KEY1}... {KEY2:LENGTH}... {KEY3:LENGTH:EXTRA} {KEYn}...`。
|
||||
花括号内的每个键将被替换成相关的属性,而括号外的所有内容将保持不变。
|
||||
|
||||
- 键名是固定的,必须是下面的关键字之一
|
||||
- 长度指定了为显示该字段而保留的长度。静态属性不支持这个参数(GROUP、PEX、SIZE、USER)。
|
||||
- Extra只被一些特定字段支持,也是可选的。请看各字段详细描述来判断是否支持Extra参数。
|
||||
|
||||
以下是自定义格式支持的键名:
|
||||
|
||||
- `ATIME`: 最后访问时间(默认语法为`%b %d %Y %H:%M`);Extra参数可以指定时间显示语法(例如:`{ATIME:8:%H:%M}`)
|
||||
- `CTIME`: 创建时间(语法为`%b %d %Y %H:%M`);Extra参数可以指定时间显示语法(例如:`{CTIME:8:%H:%M}`)
|
||||
- `GROUP`: 所属组
|
||||
- `MTIME`: 最后修改时间(语法为`%b %d %Y %H:%M`);Extra参数可以指定时间显示语法(例如:`{MTIME:8:%H:%M}`)
|
||||
- `NAME`: 文件名(超过 LENGTH 个字符的部分会被省略)
|
||||
- `PATH`:文件绝对路径(如果长于 LENGTH,则根目录和第一个祖先之间的文件夹将被排除)
|
||||
- `PEX`: 文件权限(UNIX格式)
|
||||
- `SIZE`: 文件大小(目录不显示)
|
||||
- `SYMLINK`: 超链接(如果存在的话`-> {FILE_PATH}`)。
|
||||
- `USER`: 所属用户
|
||||
|
||||
如果留空,将使用默认的格式化语法。`{NAME:24} {PEX} {USER} {SIZE} {MTIME:17:%b %d %Y %H:%M}`。
|
||||
|
||||
---
|
||||
|
||||
## 主题
|
||||
|
||||
Termscp为你提供了一个很棒的功能:可以为应用程序中的几个组件配置颜色。
|
||||
如果你想自定义termscp,有两种可用的途径:
|
||||
|
||||
- 从**配置菜单**
|
||||
- 导入一个**配置文件**
|
||||
|
||||
为了从termscp创建你的私人定制,你所要做的就是从auth活动页进入配置,按`<CTRL+C>`,然后`<TAB>`两次。你现在应该已经移到了 `themes` 面板。
|
||||
|
||||
在这里你可以用`<UP>`和`<DOWN>`移动来选择你想改变的样式,如下图所示:
|
||||
|
||||

|
||||
|
||||
termscp支持传统的十六进制(`#rrggbb`)和RGB`rgb(r, g, b)`语法来表示颜色,但也接受 **[css颜色](https://www.w3schools.com/cssref/css_colors.asp)**(如`crimson`)😉。还有一个特殊的关键词是`Default`,意味着使用的颜色将是基于情景的默认前景或背景颜色(文本和线条的前景色,以及容器的背景色,你猜是什么)。
|
||||
|
||||
如前所述,你也可以导入主题文件。你可以从themscp提供的主题中获取灵感或直接使用其中的一个,位于这个代码仓库的`themes/`目录下,运行themscp以导入它们 `termscp -t <theme_file>`。最后,如果一切正常,它应该提示你主题已经成功导入。
|
||||
|
||||
### 样式
|
||||
|
||||
你可以在下面的表格中找到每个样式字段的描述。
|
||||
请注意,**样式在配置页面不起作用**,以保证它总是可以访问,以防你把一切都弄乱了。
|
||||
|
||||
### 我的主题无法加载
|
||||
|
||||
这可能是由于最近的更新破坏了主题。 每当我向主题添加新密钥时,保存的主题都不会加载。 要解决此问题,有两个真正的快速修复解决方案:
|
||||
|
||||
1. 重新加载主题:每当我发布更新时,我也会修补“官方”主题,因此您只需再次从存储库下载它并通过 `-t` 选项重新导入主题
|
||||
|
||||
```sh
|
||||
termscp -t <theme.toml>
|
||||
```
|
||||
|
||||
2. 修复您的主题:如果您使用自定义主题,那么您可以通过 `vim` 进行编辑并添加缺少的键。 主题位于 `$CONFIG_DIR/termscp/theme.toml`,其中 `$CONFIG_DIR` 是:
|
||||
|
||||
- FreeBSD/GNU-Linux: `$HOME/.config/`
|
||||
- MacOs: `$HOME/Library/Application Support`
|
||||
- Windows: `%appdata%`
|
||||
|
||||
❗ 对于您刚刚安装的版本,在 `BREAKING CHANGES` 下的 `CHANGELOG` 中报告了丢失的键。
|
||||
|
||||
#### 登录页
|
||||
|
||||
| 字段 | 描述 |
|
||||
|----------------|------------------------------------------|
|
||||
| auth_address | IP地址输入框的颜色 |
|
||||
| auth_bookmarks | 书签面板的颜色 |
|
||||
| auth_password | 密码输入框的颜色 |
|
||||
| auth_port | 端口输入框的颜色 |
|
||||
| auth_protocol | 协议选项组的颜色 |
|
||||
| auth_recents | 历史记录面板的颜色 |
|
||||
| auth_username | 用户名输入框的颜色 |
|
||||
|
||||
#### 文件传输页
|
||||
|
||||
| 字段 | 描述 |
|
||||
|--------------------------------------|---------------------------------------------------------------------------|
|
||||
| transfer_local_explorer_background | 本地资源浏览器的背景色 |
|
||||
| transfer_local_explorer_foreground | 本地资源浏览器的前景色 |
|
||||
| transfer_local_explorer_highlighted | 本地资源浏览器的边框和高亮色 |
|
||||
| transfer_remote_explorer_background | 远程资源浏览器的背景色 |
|
||||
| transfer_remote_explorer_foreground | 远程资源浏览器的前景色 |
|
||||
| transfer_remote_explorer_highlighted | 远程资源浏览器的边框和高亮色 |
|
||||
| transfer_log_background | 日志面板的背景色 |
|
||||
| transfer_log_window | 日志面板的窗口颜色 |
|
||||
| transfer_progress_bar_partial | 进度条完成部分颜色 |
|
||||
| transfer_progress_bar_total | 进度条背景色颜色 |
|
||||
| transfer_status_hidden | 状态栏 "hidden" 标签的颜色 |
|
||||
| transfer_status_sorting | 状态栏 "sorting" 标签的颜色;同时适用于文件排序对话框 |
|
||||
| transfer_status_sync_browsing | 状态栏 "sync browsing" 标签的颜色 |
|
||||
|
||||
#### Misc
|
||||
|
||||
以下这些样式会在程序不同的位置起作用:
|
||||
|
||||
| 字段 | 描述 |
|
||||
|-------------------|---------------------------------------------|
|
||||
| misc_error_dialog | 报错信息的颜色 |
|
||||
| misc_info_dialog | 信息对话框的颜色 |
|
||||
| misc_input_dialog | 输入对话框的颜色(比如拷贝文件时) |
|
||||
| misc_keys | 键盘输入文字的颜色 |
|
||||
| misc_quit_dialog | 退出窗口的颜色 |
|
||||
| misc_save_dialog | 保存窗口的颜色 |
|
||||
| misc_warn_dialog | 警告窗口的颜色 |
|
||||
|
||||
---
|
||||
|
||||
## 文本编辑器
|
||||
|
||||
Termscp有很多功能,你可能已经注意到了,其中之一就是可以查看和编辑文本文件。不管文件是在本地主机还是在远程主机上,termscp都提供了在你喜欢的文本编辑器中打开文件的功能。
|
||||
如果文件位于远程主机上,该文件将首先被下载到你的临时文件目录中,然后,**只有**在对该文件进行了修改的情况下,才会重新上传至远程主机上。
|
||||
|
||||
> ❗ 多说一句,**你只能编辑文本文件**;二进制文件是不可以的。
|
||||
|
||||
---
|
||||
|
||||
## 日志
|
||||
|
||||
termscp会为每个会话创建一个日志文件,该文件在
|
||||
|
||||
- `$HOME/.cache/termscp/termscp.log` -- Linux/BSD
|
||||
- `$HOME/Library/Caches/termscp/termscp.log` -- MacOs
|
||||
- `FOLDERID_LocalAppData\termscp\termscp.log` -- Windows
|
||||
|
||||
日志不会被轮换,但只会在每次启动 termcp 后被截断,因此如果您想报告问题并希望附加您的日志文件,请记住在使用前将日志文件保存在安全的地方 再次termscp。
|
||||
默认情况下,日志记录在 *INFO* 级别报告,因此它不是很详细。
|
||||
|
||||
如果你想提交一个问题,如果可以的话,请在级别设置为`TRACE`的情况下重现问题,为此,启动termscp
|
||||
`-D` CLI 选项。
|
||||
|
||||
我知道您可能对日志文件有一些疑问,所以我做了一个问答:
|
||||
|
||||
> 我不希望有日志记录,我可以把它关掉吗?
|
||||
|
||||
可以的。只要用`-q or --quiet`选项启动termscp。你可以用别名来启动termscp从而使这个选项一直生效。记住,日志是用来诊断故障的,所以在每个开源项目的背后,都应该有这样的互动反馈,保留日志文件可能是你支持项目的途径😉。我不想让你感到内疚,只是想提一句。
|
||||
|
||||
> 日志是安全的吗?
|
||||
|
||||
如果你担心安全问题,日志文件不包含任何普通的密码,所以不用担心,它暴露的信息与同级文件 `书签` 报告的信息相同。
|
||||
|
||||
## 通知
|
||||
|
||||
termscp 将针对这些类型的事件发送桌面通知:
|
||||
|
||||
- **传输完成**: 传输成功完成后将发送通知。
|
||||
- ❗ 仅当传输总大小至少为配置中指定的 `Notifications: minimum transfer size` 时才会显示通知。
|
||||
- **传输失败**:一旦传输因错误而失败,将发送通知。
|
||||
- ❗ 仅当传输总大小至少为配置中指定的 `Notifications: minimum transfer size` 时才会显示通知。
|
||||
- **更新可用**:每当有新版本的termscp 可用时,都会显示通知。
|
||||
- **更新已安装**:每当安装了新版本的termscp 时,都会显示通知。
|
||||
- **更新失败**:每当更新安装失败时,都会显示通知。
|
||||
|
||||
❗ 如果您希望保持关闭通知,您只需进入设置并将 `Enable notifications?` 设置为 `No`😉。
|
||||
❗ 如果您想更改最小传输大小以显示通知,您可以使用键 `Notifications: minimum transfer size` 更改配置中的值,并将其设置为更适合您的任何值🙂。
|
||||
|
||||
## 文件观察者🔭
|
||||
|
||||
文件观察器允许您设置与远程主机同步的路径列表。
|
||||
这意味着每当在同步路径上检测到本地文件系统的更改时,该更改将在 5 秒内自动报告给配置的远程主机路径。
|
||||
|
||||
您可以根据需要设置尽可能多的同步路径:
|
||||
|
||||
1.将光标放在本地资源管理器上要保持同步的目录/文件上
|
||||
2. 转到远程主机上要向其报告更改的目录
|
||||
3. 按`<T>`
|
||||
4. 对无线电弹出窗口回答 `<YES>`
|
||||
|
||||
要取消观看,只需在本地同步路径(或其任何子文件夹)上按 `<T>`
|
||||
或者,您可以按 `<CTRL + T>` 并按 `<ENTER>` 进入要取消观看的同步路径。
|
||||
|
||||
这些更改将报告给远程主机:
|
||||
|
||||
- 新文件,文件更改
|
||||
- 文件移动/重命名
|
||||
- 文件删除/取消链接
|
||||
|
||||
> ❗ 观察者只在一个方向工作(本地>远程)。不可能自动同步远程到本地的更改。
|
||||
461
install.sh
Executable file
@@ -0,0 +1,461 @@
|
||||
#!/usr/bin/env sh
|
||||
|
||||
# Options
|
||||
#
|
||||
# -V, --verbose
|
||||
# Enable verbose output for the installer
|
||||
#
|
||||
# -f, -y, --force, --yes
|
||||
# Skip the confirmation prompt during installation
|
||||
|
||||
TERMSCP_VERSION="0.17.0"
|
||||
GITHUB_URL="https://github.com/veeso/termscp/releases/download/v${TERMSCP_VERSION}"
|
||||
DEB_URL_AMD64="${GITHUB_URL}/termscp_${TERMSCP_VERSION}_amd64.deb"
|
||||
DEB_URL_AARCH64="${GITHUB_URL}/termscp_${TERMSCP_VERSION}_arm64.deb"
|
||||
|
||||
PATH="$PATH:/usr/sbin"
|
||||
|
||||
set -eu
|
||||
printf "\n"
|
||||
|
||||
BOLD="$(tput bold 2>/dev/null || printf '')"
|
||||
GREY="$(tput setaf 0 2>/dev/null || printf '')"
|
||||
UNDERLINE="$(tput smul 2>/dev/null || printf '')"
|
||||
RED="$(tput setaf 1 2>/dev/null || printf '')"
|
||||
GREEN="$(tput setaf 2 2>/dev/null || printf '')"
|
||||
YELLOW="$(tput setaf 3 2>/dev/null || printf '')"
|
||||
BLUE="$(tput setaf 4 2>/dev/null || printf '')"
|
||||
MAGENTA="$(tput setaf 5 2>/dev/null || printf '')"
|
||||
NO_COLOR="$(tput sgr0 2>/dev/null || printf '')"
|
||||
|
||||
# Functions
|
||||
|
||||
set_termscp_version() {
|
||||
TERMSCP_VERSION="$1"
|
||||
GITHUB_URL="https://github.com/veeso/termscp/releases/download/v${TERMSCP_VERSION}"
|
||||
DEB_URL_AMD64="${GITHUB_URL}/termscp_${TERMSCP_VERSION}_amd64.deb"
|
||||
DEB_URL_AARCH64="${GITHUB_URL}/termscp_${TERMSCP_VERSION}_arm64.deb"
|
||||
}
|
||||
|
||||
info() {
|
||||
printf '%s\n' "${BOLD}${GREY}>${NO_COLOR} $*"
|
||||
}
|
||||
|
||||
warn() {
|
||||
printf '%s\n' "${YELLOW}! $*${NO_COLOR}"
|
||||
}
|
||||
|
||||
error() {
|
||||
printf '%s\n' "${RED}x $*${NO_COLOR}" >&2
|
||||
}
|
||||
|
||||
completed() {
|
||||
printf '%s\n' "${GREEN}✓${NO_COLOR} $*"
|
||||
}
|
||||
|
||||
has() {
|
||||
command -v "$1" 1>/dev/null 2>&1
|
||||
}
|
||||
|
||||
get_tmpfile() {
|
||||
local suffix
|
||||
suffix="$1"
|
||||
if has mktemp; then
|
||||
printf "%s.%s" "$(mktemp)" "${suffix}"
|
||||
else
|
||||
# No really good options here--let's pick a default + hope
|
||||
printf "/tmp/termscp.%s" "${suffix}"
|
||||
fi
|
||||
}
|
||||
|
||||
download() {
|
||||
output="$1"
|
||||
url="$2"
|
||||
|
||||
if has curl; then
|
||||
cmd="curl --fail --silent --location --output $output $url"
|
||||
elif has wget; then
|
||||
cmd="wget --quiet --output-document=$output $url"
|
||||
elif has fetch; then
|
||||
cmd="fetch --quiet --output=$output $url"
|
||||
else
|
||||
error "No HTTP download program (curl, wget, fetch) found, exiting…"
|
||||
return 1
|
||||
fi
|
||||
$cmd && return 0 || rc=$?
|
||||
|
||||
error "Command failed (exit code $rc): ${BLUE}${cmd}${NO_COLOR}"
|
||||
warn "If you believe this is a bug, please report immediately an issue to <https://github.com/veeso/termscp/issues/new>"
|
||||
return $rc
|
||||
}
|
||||
|
||||
test_writeable() {
|
||||
local path
|
||||
path="${1:-}/test.txt"
|
||||
if touch "${path}" 2>/dev/null; then
|
||||
rm "${path}"
|
||||
return 0
|
||||
else
|
||||
return 1
|
||||
fi
|
||||
}
|
||||
|
||||
elevate_priv() {
|
||||
if has sudo; then
|
||||
if ! sudo -v; then
|
||||
error "Superuser not granted, aborting installation"
|
||||
exit 1
|
||||
fi
|
||||
sudo="sudo"
|
||||
elif has doas; then
|
||||
sudo="doas"
|
||||
else
|
||||
error 'Could not find the commands "sudo" or "doas", needed to install termscp on your system.'
|
||||
info "If you are on Windows, please run your shell as an administrator, then"
|
||||
info "rerun this script. Otherwise, please run this script as root, or install"
|
||||
info "sudo or doas."
|
||||
exit 1
|
||||
fi
|
||||
}
|
||||
|
||||
elevate_priv_ex() {
|
||||
check_dir="$1"
|
||||
if test_writeable "$check_dir"; then
|
||||
sudo=""
|
||||
else
|
||||
elevate_priv
|
||||
fi
|
||||
echo $sudo
|
||||
}
|
||||
|
||||
# Currently supporting:
|
||||
# - macos
|
||||
# - linux
|
||||
# - freebsd
|
||||
detect_platform() {
|
||||
local platform
|
||||
platform="$(uname -s | tr '[:upper:]' '[:lower:]')"
|
||||
|
||||
case "${platform}" in
|
||||
linux) platform="linux" ;;
|
||||
darwin) platform="macos" ;;
|
||||
freebsd) platform="freebsd" ;;
|
||||
esac
|
||||
|
||||
printf '%s' "${platform}"
|
||||
}
|
||||
|
||||
# Currently supporting:
|
||||
# - x86_64
|
||||
detect_arch() {
|
||||
local arch
|
||||
arch="$(uname -m | tr '[:upper:]' '[:lower:]')"
|
||||
|
||||
case "${arch}" in
|
||||
amd64) arch="x86_64" ;;
|
||||
armv*) arch="arm" ;;
|
||||
arm64) arch="aarch64" ;;
|
||||
esac
|
||||
|
||||
# `uname -m` in some cases mis-reports 32-bit OS as 64-bit, so double check
|
||||
if [ "${arch}" = "x86_64" ] && [ "$(getconf LONG_BIT)" -eq 32 ]; then
|
||||
arch="i686"
|
||||
elif [ "${arch}" = "aarch64" ] && [ "$(getconf LONG_BIT)" -eq 32 ]; then
|
||||
arch="arm"
|
||||
fi
|
||||
|
||||
printf '%s' "${arch}"
|
||||
}
|
||||
|
||||
confirm() {
|
||||
if [ -z "${FORCE-}" ]; then
|
||||
printf "%s " "${MAGENTA}?${NO_COLOR} $* ${BOLD}[y/N]${NO_COLOR}"
|
||||
set +e
|
||||
read -r yn </dev/tty
|
||||
rc=$?
|
||||
set -e
|
||||
if [ $rc -ne 0 ]; then
|
||||
error "Error reading from prompt (please re-run with the '--yes' option)"
|
||||
exit 1
|
||||
fi
|
||||
if [ "$yn" != "y" ] && [ "$yn" != "yes" ]; then
|
||||
error 'Aborting (please answer "yes" to continue)'
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
||||
# Installers
|
||||
|
||||
install_on_bsd() {
|
||||
try_with_cargo "packages for freeBSD are distribuited no more. Only cargo installations are supported." "freebsd"
|
||||
}
|
||||
|
||||
install_on_arch_linux() {
|
||||
pkg="$1"
|
||||
info "Detected ${YELLOW}${pkg}${NO_COLOR} on your system"
|
||||
# check if rust is already installed
|
||||
has cargo
|
||||
CARGO=$?
|
||||
if [ $CARGO -ne 0 ]; then
|
||||
confirm "${YELLOW}rust${NO_COLOR} is required to install ${GREEN}termscp${NO_COLOR}; would you like to proceed?"
|
||||
$pkg -S rust
|
||||
fi
|
||||
info "Installing ${GREEN}termscp${NO_COLOR} AUR package…"
|
||||
$pkg -S termscp
|
||||
}
|
||||
|
||||
install_with_brew() {
|
||||
info "Installing termscp with brew"
|
||||
if has termscp; then
|
||||
info "Upgrading ${GREEN}termscp${NO_COLOR}…"
|
||||
# The OR is used since someone could have installed via cargo previously
|
||||
brew update && brew upgrade termscp || brew install veeso/termscp/termscp
|
||||
else
|
||||
info "Installing ${GREEN}termscp${NO_COLOR}…"
|
||||
brew install veeso/termscp/termscp
|
||||
fi
|
||||
}
|
||||
|
||||
install_on_linux() {
|
||||
local msg
|
||||
local sudo
|
||||
local archive
|
||||
if has pacman; then
|
||||
install_on_arch_linux pacman
|
||||
elif has yay; then
|
||||
install_on_arch_linux yay
|
||||
elif has pakku; then
|
||||
install_on_arch_linux pakku
|
||||
elif has paru; then
|
||||
install_on_arch_linux paru
|
||||
elif has aurutils; then
|
||||
install_on_arch_linux aurutils
|
||||
elif has pamac; then
|
||||
install_on_arch_linux pamac
|
||||
elif has pikaur; then
|
||||
install_on_arch_linux pikaur
|
||||
elif has dpkg; then
|
||||
case "${ARCH}" in
|
||||
x86_64) DEB_URL="$DEB_URL_AMD64" ;;
|
||||
aarch64) DEB_URL="$DEB_URL_AARCH64" ;;
|
||||
*) try_with_cargo "we don't distribute packages for ${ARCH} at the moment" && return $? ;;
|
||||
esac
|
||||
info "Detected dpkg on your system"
|
||||
info "Installing ${GREEN}termscp${NO_COLOR} via Debian package"
|
||||
archive=$(get_tmpfile "deb")
|
||||
download "${archive}" "${DEB_URL}"
|
||||
info "Downloaded debian package to ${archive}"
|
||||
if test_writeable "/usr/bin"; then
|
||||
sudo=""
|
||||
msg="Installing ${GREEN}termscp${NO_COLOR}, please wait…"
|
||||
else
|
||||
warn "Root permissions are required to install ${GREEN}termscp${NO_COLOR}…"
|
||||
elevate_priv
|
||||
sudo="sudo"
|
||||
msg="Installing ${GREEN}termscp${NO_COLOR} as root, please wait…"
|
||||
fi
|
||||
info "$msg"
|
||||
$sudo dpkg -i "${archive}"
|
||||
rm -f ${archive}
|
||||
elif has brew; then
|
||||
install_with_brew
|
||||
else
|
||||
try_with_cargo "No suitable installation method found for your Linux distribution; if you're running on Arch linux, please install an AUR package manager (such as yay). Currently only Arch, Debian based and Red Hat based distros are supported" "linux"
|
||||
fi
|
||||
}
|
||||
|
||||
install_on_macos() {
|
||||
if has brew; then
|
||||
install_with_brew
|
||||
else
|
||||
try_with_cargo "brew is missing on your system; please install it from <https://brew.sh/>" "macos"
|
||||
fi
|
||||
}
|
||||
|
||||
# -- cargo installation
|
||||
|
||||
install_bsd_cargo_deps() {
|
||||
set -e
|
||||
confirm "${YELLOW}libssh, gcc${NO_COLOR} are required to install ${GREEN}termscp${NO_COLOR}; would you like to proceed?"
|
||||
sudo="$(elevate_priv_ex /usr/local/bin)"
|
||||
$sudo pkg install -y curl wget libssh gcc dbus pkgconf libsmbclient
|
||||
info "Dependencies installed successfully"
|
||||
}
|
||||
|
||||
install_linux_cargo_deps() {
|
||||
local debian_deps="gcc pkg-config libdbus-1-dev libsmbclient-dev"
|
||||
local rpm_deps="gcc openssl pkgconfig dbus-devel openssl-devel libsmbclient-devel"
|
||||
local arch_deps="gcc openssl pkg-config dbus smbclient"
|
||||
local deps_cmd=""
|
||||
# Get pkg manager
|
||||
if has apt; then
|
||||
deps_cmd="apt install -y $debian_deps"
|
||||
elif has apt-get; then
|
||||
deps_cmd="apt-get install -y $debian_deps"
|
||||
elif has yum; then
|
||||
deps_cmd="yum -y install $rpm_deps"
|
||||
elif has dnf; then
|
||||
deps_cmd="dnf -y install $rpm_deps"
|
||||
elif has pacman; then
|
||||
deps_cmd="pacman -S --noconfirm $arch_deps"
|
||||
else
|
||||
error "Could not find any suitable package manager for your linux distro 🙄"
|
||||
error "Supported package manager are: 'apt', 'apt-get', 'yum', 'dnf', 'pacman'"
|
||||
exit 1
|
||||
fi
|
||||
set -e
|
||||
confirm "${YELLOW}libssh, gcc, openssl, pkg-config, libdbus${NO_COLOR} are required to install ${GREEN}termscp${NO_COLOR}. The following command will be used to install the dependencies: '${BOLD}${YELLOW}${deps_cmd}${NO_COLOR}'. Would you like to proceed?"
|
||||
sudo="$(elevate_priv_ex /usr/local/bin)"
|
||||
$sudo $deps_cmd
|
||||
info "Dependencies installed successfully"
|
||||
}
|
||||
|
||||
install_cargo() {
|
||||
if has cargo; then
|
||||
return 0
|
||||
fi
|
||||
cargo_env="$HOME/.cargo/env"
|
||||
# Check if cargo is already installed (actually), but not loaded
|
||||
if [ -f $cargo_env ]; then
|
||||
. $cargo_env
|
||||
fi
|
||||
# Check again cargo
|
||||
if has cargo; then
|
||||
return 0
|
||||
else
|
||||
confirm "${YELLOW}rust${NO_COLOR} is required to build termscp with cargo; would you like to install it now?"
|
||||
set -e
|
||||
rustup=$(get_tmpfile "sh")
|
||||
info "Downloading rustup.sh…"
|
||||
download "${rustup}" "https://sh.rustup.rs"
|
||||
chmod +x $rustup
|
||||
$rustup -y
|
||||
rm -f ${archive}
|
||||
info "Rust installed with success"
|
||||
. $cargo_env
|
||||
fi
|
||||
|
||||
}
|
||||
|
||||
try_with_cargo() {
|
||||
err="$1"
|
||||
platform="$2"
|
||||
# Install cargo
|
||||
install_cargo
|
||||
if has cargo; then
|
||||
info "Installing ${GREEN}termscp${NO_COLOR} via Cargo…"
|
||||
case $platform in
|
||||
"freebsd")
|
||||
install_bsd_cargo_deps
|
||||
cargo install --locked --no-default-features termscp
|
||||
;;
|
||||
|
||||
"linux")
|
||||
install_linux_cargo_deps
|
||||
cargo install --locked termscp
|
||||
;;
|
||||
|
||||
*)
|
||||
cargo install --locked termscp
|
||||
;;
|
||||
|
||||
esac
|
||||
else
|
||||
error "$err"
|
||||
error "Alternatively you can opt for installing Cargo <https://www.rust-lang.org/tools/install>"
|
||||
return 1
|
||||
fi
|
||||
}
|
||||
|
||||
# defaults
|
||||
if [ -z "${PLATFORM-}" ]; then
|
||||
PLATFORM="$(detect_platform)"
|
||||
fi
|
||||
|
||||
if [ -z "${BIN_DIR-}" ]; then
|
||||
BIN_DIR=/usr/local/bin
|
||||
fi
|
||||
|
||||
if [ -z "${ARCH-}" ]; then
|
||||
ARCH="$(detect_arch)"
|
||||
fi
|
||||
|
||||
if [ -z "${BASE_URL-}" ]; then
|
||||
BASE_URL="https://github.com/starship/starship/releases"
|
||||
fi
|
||||
|
||||
# parse argv variables
|
||||
while [ "$#" -gt 0 ]; do
|
||||
echo $1
|
||||
case "$1" in
|
||||
|
||||
-V | --verbose)
|
||||
VERBOSE=1
|
||||
shift 1
|
||||
;;
|
||||
-f | -y | --force | --yes)
|
||||
FORCE=1
|
||||
shift 1
|
||||
;;
|
||||
-V=* | --verbose=*)
|
||||
VERBOSE="${1#*=}"
|
||||
shift 1
|
||||
;;
|
||||
-f=* | -y=* | --force=* | --yes=*)
|
||||
FORCE="${1#*=}"
|
||||
shift 1
|
||||
;;
|
||||
-v=* | --version=*)
|
||||
set_termscp_version "${1#*=}"
|
||||
shift 1
|
||||
;;
|
||||
*)
|
||||
error "Unknown option: $1"
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
printf " %s\n" "${UNDERLINE}Termscp configuration${NO_COLOR}"
|
||||
info "${BOLD}Platform${NO_COLOR}: ${GREEN}${PLATFORM}${NO_COLOR}"
|
||||
info "${BOLD}Arch${NO_COLOR}: ${GREEN}${ARCH}${NO_COLOR}"
|
||||
|
||||
# non-empty VERBOSE enables verbose untarring
|
||||
if [ -n "${VERBOSE-}" ]; then
|
||||
VERBOSE=v
|
||||
info "${BOLD}Verbose${NO_COLOR}: yes"
|
||||
else
|
||||
VERBOSE=
|
||||
fi
|
||||
|
||||
printf "\n"
|
||||
|
||||
confirm "Install ${GREEN}termscp ${TERMSCP_VERSION}${NO_COLOR}?"
|
||||
|
||||
# Installation based on arch
|
||||
case $PLATFORM in
|
||||
"freebsd")
|
||||
install_on_bsd
|
||||
;;
|
||||
"linux")
|
||||
install_on_linux
|
||||
;;
|
||||
"macos")
|
||||
install_on_macos
|
||||
;;
|
||||
*)
|
||||
error "${PLATFORM} is not supported by this installer"
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
|
||||
completed "Congratulations! Termscp has successfully been installed on your system!"
|
||||
info "If you're a new user, you might be interested in reading the user manual <https://termscp.veeso.dev/#user-manual>"
|
||||
info "While if you've just updated your termscp version, you can find the changelog at this link <https://termscp.veeso.dev/#changelog>"
|
||||
info "Remember that if you encounter any issue, you can report them on Github <https://github.com/veeso/termscp/issues/new>"
|
||||
info "Feel free to open an issue also if you have an idea which could improve the project"
|
||||
info "If you want to support the project, please, consider a little donation <https://ko-fi.com/veeso>"
|
||||
info "I hope you'll enjoy using termscp :D"
|
||||
|
||||
exit 0
|
||||
2
rustfmt.toml
Normal file
@@ -0,0 +1,2 @@
|
||||
group_imports = "StdExternalCrate"
|
||||
imports_granularity = "Module"
|
||||
BIN
site/assets/images/explorer.gif
Normal file
|
After Width: | Height: | Size: 2.1 MiB |
BIN
site/assets/images/favicon-16x16.png
Normal file
|
After Width: | Height: | Size: 879 B |
BIN
site/assets/images/favicon-32x32.png
Normal file
|
After Width: | Height: | Size: 1.6 KiB |
BIN
site/assets/images/favicon-96x96.png
Normal file
|
After Width: | Height: | Size: 2.8 KiB |
BIN
site/assets/images/og_preview.jpg
Normal file
|
After Width: | Height: | Size: 77 KiB |
BIN
site/assets/images/termscp.webp
Normal file
|
After Width: | Height: | Size: 8.0 KiB |
BIN
site/assets/videos/explorer.mp4
Normal file
74
site/changelog.html
Normal file
@@ -0,0 +1,74 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en_US" class="dark">
|
||||
|
||||
<head>
|
||||
<title>
|
||||
termscp is a terminal file transfer and explorer for SCP/SFTP/FTP/Kube/S3/WebDAV/SMB/WebDAV | termscp
|
||||
</title>
|
||||
<meta property="og:description"
|
||||
content="termscp is a feature rich terminal file transfer and explorer, with support for SCP/SFTP/FTP/Kube/S3/WebDAV. It is Linux, MacOS, FreeBSD, NetBSD and Windows compatible" />
|
||||
<meta name="description"
|
||||
content="termscp is a feature rich terminal file transfer and explorer, with support for SCP/SFTP/FTP/Kube/S3/WebDAV. It is Linux, MacOS, FreeBSD, NetBSD and Windows compatible" />
|
||||
<meta property="og:title" content="termscp is a terminal file transfer and explorer for SCP/SFTP/FTP/Kube/S3/WebDAV | termscp" />
|
||||
<meta charset="utf-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||
<meta name="robots" content="index, follow" />
|
||||
<meta property="og:image" content="https://termscp.veeso.dev/assets/images/og_preview.jpg" />
|
||||
<meta property="og:image:type" content="image/jpg" />
|
||||
<meta property="og:image:width" content="1280" />
|
||||
<meta property="og:image:height" content="640" />
|
||||
<meta property="og:type" content="website" />
|
||||
<meta property="og:site_name" content="termscp" />
|
||||
<meta property="og:locale" content="en_US" />
|
||||
<meta property="og:url" content="https://termscp.veeso.dev" />
|
||||
<!-- Icons -->
|
||||
<link rel="stylesheet" href="https://cdn.jsdelivr.net/gh/devicons/devicon@v2.11.0/devicon.min.css" />
|
||||
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/animate.css/4.1.1/animate.min.css" />
|
||||
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.3/css/all.min.css"
|
||||
integrity="sha512-iBBXm8fW90+nuLcSKlbmrPcLa0OT92xO1BIsZ+ywDWZCvqsWgccV3gFoRBv0z+8dLJgyAHIhR35VZc2oM/gI1w=="
|
||||
crossorigin="anonymous" />
|
||||
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.3/css/fontawesome.min.css"
|
||||
integrity="sha512-OdEXQYCOldjqUEsuMKsZRj93Ht23QRlhIb8E/X0sbwZhme8eUw6g8q7AdxGJKakcBbv7+/PX0Gc2btf7Ru8cZA=="
|
||||
crossorigin="anonymous" />
|
||||
<!-- tailwind -->
|
||||
<link href="output.css" rel="stylesheet" />
|
||||
<!-- Favicons -->
|
||||
<link rel="icon" type="image/png" sizes="96x96" href="assets/images/favicon-96x96.png" />
|
||||
<link rel="icon" type="image/png" sizes="32x32" href="assets/images/favicon-32x32.png" />
|
||||
<link rel="icon" type="image/png" sizes="16x16" href="assets/images/favicon-16x16.png" />
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<div id="layout" class="dark:bg-brand dark:text-gray-100">
|
||||
<!-- Menu -->
|
||||
<header id="menu"></header>
|
||||
<main>
|
||||
<div id="main" class="w-8/12 sm:w-full mx-auto pt-4 pb-8"></div>
|
||||
</main>
|
||||
<footer id="footer"></footer>
|
||||
</div>
|
||||
<!-- Scripts -->
|
||||
<!-- jQuery -->
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
|
||||
<!-- Showdown JS-->
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/showdown/1.9.1/showdown.min.js"
|
||||
integrity="sha512-L03kznCrNOfVxOUovR6ESfCz9Gfny7gihUX/huVbQB9zjODtYpxaVtIaAkpetoiyV2eqWbvxMH9fiSv5enX7bw=="
|
||||
crossorigin="anonymous" referrerpolicy="no-referrer"></script>
|
||||
<!-- Local -->
|
||||
<script src="js/lang.min.js"></script>
|
||||
<script src="js/core.js"></script>
|
||||
<script src="js/events.js"></script>
|
||||
<script src="js/resolvers.js"></script>
|
||||
<!-- ko-fi -->
|
||||
<script src="https://storage.ko-fi.com/cdn/scripts/overlay-widget.js"></script>
|
||||
<script>
|
||||
kofiWidgetOverlay.draw("veeso", {
|
||||
type: "floating-chat",
|
||||
"floating-chat.donateButton.text": "Support me",
|
||||
"floating-chat.donateButton.background-color": "#31363b",
|
||||
"floating-chat.donateButton.text-color": "#fff",
|
||||
});
|
||||
</script>
|
||||
</body>
|
||||
|
||||
</html>
|
||||
87
site/css/markdown.css
Normal file
@@ -0,0 +1,87 @@
|
||||
.markdown {
|
||||
font-family: Arial, Helvetica, sans-serif;
|
||||
}
|
||||
|
||||
.markdown a {
|
||||
color: dodgerblue;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
.markdown a:hover {
|
||||
text-decoration: underline;
|
||||
}
|
||||
|
||||
.markdown p {
|
||||
font-size: 1.1em;
|
||||
}
|
||||
|
||||
.markdown h1 {
|
||||
font-size: 2em;
|
||||
}
|
||||
|
||||
.markdown h2 {
|
||||
font-size: 1.6em;
|
||||
}
|
||||
|
||||
.markdown h3 {
|
||||
font-size: 1.4em;
|
||||
}
|
||||
|
||||
.markdown h4 {
|
||||
font-size: 1.2em;
|
||||
}
|
||||
|
||||
.markdown img {
|
||||
display: none;
|
||||
}
|
||||
|
||||
@media (min-width: 600px) {
|
||||
.markdown img {
|
||||
display: block;
|
||||
width: 60%;
|
||||
margin-left: 20%;
|
||||
}
|
||||
}
|
||||
|
||||
.markdown blockquote {
|
||||
border-left: 0.25em solid #ccc;
|
||||
font-size: 90%;
|
||||
padding: 0.1em;
|
||||
padding-left: 0.5em;
|
||||
}
|
||||
|
||||
.markdown pre code {
|
||||
background-color: inherit;
|
||||
font-size: 100%;
|
||||
}
|
||||
|
||||
.markdown code {
|
||||
background-color: #eee;
|
||||
border-radius: 6px;
|
||||
font-size: 85%;
|
||||
padding: 0.2em 0.4em;
|
||||
}
|
||||
|
||||
:is(.dark) .markdown code {
|
||||
background-color: #404040;
|
||||
}
|
||||
|
||||
.markdown table {
|
||||
border-collapse: collapse;
|
||||
border-spacing: 0;
|
||||
display: block;
|
||||
height: fit-content;
|
||||
max-width: 100%;
|
||||
overflow: auto;
|
||||
width: max-content;
|
||||
}
|
||||
|
||||
.markdown table tr {
|
||||
border-top: 1px solid #c6cbd1;
|
||||
}
|
||||
|
||||
.markdown table td,
|
||||
.markdown table th {
|
||||
border: 1px solid #c6cbd1;
|
||||
padding: 6px 13px;
|
||||
}
|
||||
75
site/get-started.html
Normal file
@@ -0,0 +1,75 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en_US" class="dark">
|
||||
|
||||
<head>
|
||||
<title>
|
||||
get started with termscp | termscp
|
||||
</title>
|
||||
<meta property="og:description"
|
||||
content="Install termscp within a couple of minutes with the shell script" />
|
||||
<meta name="description"
|
||||
content="Install termscp within a couple of minutes with the shell script" />
|
||||
<meta property="og:title" content="get started with termscp | termscp" />
|
||||
<meta charset="utf-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||
<meta name="robots" content="index, follow" />
|
||||
<meta property="og:image" content="https://termscp.veeso.dev/assets/images/og_preview.jpg" />
|
||||
<meta property="og:image:type" content="image/jpg" />
|
||||
<meta property="og:image:width" content="1280" />
|
||||
<meta property="og:image:height" content="640" />
|
||||
<meta property="og:type" content="website" />
|
||||
<meta property="og:site_name" content="termscp" />
|
||||
<meta property="og:locale" content="en_US" />
|
||||
<meta property="og:url" content="https://termscp.veeso.dev" />
|
||||
<!-- Icons -->
|
||||
<link rel="stylesheet" href="https://cdn.jsdelivr.net/gh/devicons/devicon@v2.11.0/devicon.min.css" />
|
||||
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/animate.css/4.1.1/animate.min.css" />
|
||||
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.3/css/all.min.css"
|
||||
integrity="sha512-iBBXm8fW90+nuLcSKlbmrPcLa0OT92xO1BIsZ+ywDWZCvqsWgccV3gFoRBv0z+8dLJgyAHIhR35VZc2oM/gI1w=="
|
||||
crossorigin="anonymous" />
|
||||
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.3/css/fontawesome.min.css"
|
||||
integrity="sha512-OdEXQYCOldjqUEsuMKsZRj93Ht23QRlhIb8E/X0sbwZhme8eUw6g8q7AdxGJKakcBbv7+/PX0Gc2btf7Ru8cZA=="
|
||||
crossorigin="anonymous" />
|
||||
<!-- tailwind -->
|
||||
<link href="output.css" rel="stylesheet" />
|
||||
<!-- Favicons -->
|
||||
<link rel="icon" type="image/png" sizes="96x96" href="assets/images/favicon-96x96.png" />
|
||||
<link rel="icon" type="image/png" sizes="32x32" href="assets/images/favicon-32x32.png" />
|
||||
<link rel="icon" type="image/png" sizes="16x16" href="assets/images/favicon-16x16.png" />
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<div id="layout" class="dark:bg-brand dark:text-gray-100">
|
||||
|
||||
<!-- Menu -->
|
||||
<header id="menu"></header>
|
||||
<main>
|
||||
<div id="main" class="w-8/12 sm:w-full mx-auto pt-4 pb-8"></div>
|
||||
</main>
|
||||
<footer id="footer"></footer>
|
||||
</div>
|
||||
<!-- Scripts -->
|
||||
<!-- jQuery -->
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
|
||||
<!-- Showdown JS-->
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/showdown/1.9.1/showdown.min.js"
|
||||
integrity="sha512-L03kznCrNOfVxOUovR6ESfCz9Gfny7gihUX/huVbQB9zjODtYpxaVtIaAkpetoiyV2eqWbvxMH9fiSv5enX7bw=="
|
||||
crossorigin="anonymous" referrerpolicy="no-referrer"></script>
|
||||
<!-- Local -->
|
||||
<script src="js/lang.min.js"></script>
|
||||
<script src="js/core.js"></script>
|
||||
<script src="js/events.js"></script>
|
||||
<script src="js/resolvers.js"></script>
|
||||
<!-- ko-fi -->
|
||||
<script src="https://storage.ko-fi.com/cdn/scripts/overlay-widget.js"></script>
|
||||
<script>
|
||||
kofiWidgetOverlay.draw("veeso", {
|
||||
type: "floating-chat",
|
||||
"floating-chat.donateButton.text": "Support me",
|
||||
"floating-chat.donateButton.background-color": "#31363b",
|
||||
"floating-chat.donateButton.text-color": "#fff",
|
||||
});
|
||||
</script>
|
||||
</body>
|
||||
|
||||
</html>
|
||||
38
site/html/components/footer.html
Normal file
@@ -0,0 +1,38 @@
|
||||
<!DOCTYPE html>
|
||||
<div class="flex flex-col bg-brand text-gray-200 justify-around items-center gap-12 p-8 sm:pb-24">
|
||||
<div class="flex flex-row justify-around items-center gap-16 w-3/6 sm:w-full">
|
||||
<div>
|
||||
<a href="https://github.com/veeso/termscp" class="text-3xl sm:text-xl no-underline" target="_blank"><i
|
||||
class="devicon-github-original"></i></a>
|
||||
</div>
|
||||
<div>
|
||||
<a href="https://crates.io/crates/termscp" class="text-3xl sm:text-xl no-underline" target="_blank"><i
|
||||
class="devicon-rust-plain"></i></a>
|
||||
</div>
|
||||
<div>
|
||||
<a href="https://community.chocolatey.org/packages/termscp" class="text-3xl sm:text-xl no-underline"
|
||||
target="_blank"><i class="devicon-windows8-plain"></i></a>
|
||||
</div>
|
||||
<div>
|
||||
<a href="https://ko-fi.com/veeso" target="_blank" class="text-3xl sm:text-xl no-underline"><i
|
||||
class="fa fa-coffee"></i></a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="flex flex-col justify-around gap-1 items-center w-full">
|
||||
<!-- vat number -->
|
||||
<p class="text-sm font-thin">
|
||||
<span>P.IVA IT03104140300 </span>
|
||||
</p>
|
||||
<p class="text-xs font-thin">
|
||||
<span>Via Antonio Marangoni 33, 33100, Udine (UD)</span>
|
||||
</p>
|
||||
<!-- Copyright -->
|
||||
<p class="text-xs font-thin">
|
||||
<span>Christian Visintin © </span><span resolve-copyright></span>
|
||||
<span> | </span>
|
||||
<a class="text-xs font-thin" href="https://veeso.me/en/privacy" target="_blank">Privacy policy</a>
|
||||
<span> | </span>
|
||||
<a class="text-xs font-thin" href="https://veeso.me/en/cookie-policy" target="_blank">Cookie policy</a>
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
97
site/html/components/menu.html
Normal file
@@ -0,0 +1,97 @@
|
||||
<!DOCTYPE html>
|
||||
<div
|
||||
class="flex flex-row fixed bg-gray-100 dark:bg-brand text-brand dark:text-gray-100 border-b border-gray-400 dark:border-gray-800 items-center justify-between w-screen h-auto py-4 px-8">
|
||||
<!-- Desktop menu-->
|
||||
<div class="sm:hidden flex flex-row justify-start items-center gap-12 w-full">
|
||||
<h2 class="lg:text-xl md:text-lg dark:text-gray-100">
|
||||
<a href="/">
|
||||
<img class="w-[32px] h-auto m-auto inline-block mr-2 hover:underline" alt="logo"
|
||||
src="assets/images/termscp.webp" /> termscp
|
||||
</a>
|
||||
</h2>
|
||||
<h2 class="lg:text-xl md:text-lg dark:text-gray-100 hover:underline">
|
||||
<a translate="menu.getStarted" href="/get-started.html"></a>
|
||||
</h2>
|
||||
<h2 class="lg:text-xl md:text-lg dark:text-gray-100 hover:underline">
|
||||
<a translate="menu.updates" href="/updates.html"></a>
|
||||
</h2>
|
||||
<h2 class="lg:text-xl md:text-lg dark:text-gray-100 hover:underline">
|
||||
<a translate="menu.manual" href="/user-manual.html"></a>
|
||||
</h2>
|
||||
<h2 class="lg:text-xl md:text-lg dark:text-gray-100 hover:underline">
|
||||
<a translate="menu.changelog" href="/changelog.html"></a>
|
||||
</h2>
|
||||
<!-- End region -->
|
||||
<div class="flex flex-row self-end justify-end items-center gap-8 flex-1">
|
||||
<!-- Dark/light theme toggle -->
|
||||
<button id="theme-toggle" type="button" onclick="toggleTheme()"
|
||||
class="text-brand dark:text-gray-100 hover:bg-gray-100 dark:hover:bg-gray-700 focus:outline-none focus:ring-4 focus:ring-gray-200 dark:focus:ring-gray-700 rounded-lg lg:text-2xl md:text-lg p-2.5">
|
||||
<svg id="theme-toggle-dark-icon" class="w-5 h-5 hidden" fill="currentColor" viewBox="0 0 20 20"
|
||||
xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M17.293 13.293A8 8 0 016.707 2.707a8.001 8.001 0 1010.586 10.586z"></path>
|
||||
</svg>
|
||||
<svg id="theme-toggle-light-icon" class="w-5 h-5 hidden" fill="currentColor" viewBox="0 0 20 20"
|
||||
xmlns="http://www.w3.org/2000/svg">
|
||||
<path
|
||||
d="M10 2a1 1 0 011 1v1a1 1 0 11-2 0V3a1 1 0 011-1zm4 8a4 4 0 11-8 0 4 4 0 018 0zm-.464 4.95l.707.707a1 1 0 001.414-1.414l-.707-.707a1 1 0 00-1.414 1.414zm2.12-10.607a1 1 0 010 1.414l-.706.707a1 1 0 11-1.414-1.414l.707-.707a1 1 0 011.414 0zM17 11a1 1 0 100-2h-1a1 1 0 100 2h1zm-7 4a1 1 0 011 1v1a1 1 0 11-2 0v-1a1 1 0 011-1zM5.05 6.464A1 1 0 106.465 5.05l-.708-.707a1 1 0 00-1.414 1.414l.707.707zm1.414 8.486l-.707.707a1 1 0 01-1.414-1.414l.707-.707a1 1 0 011.414 1.414zM4 11a1 1 0 100-2H3a1 1 0 000 2h1z"
|
||||
fill-rule="evenodd" clip-rule="evenodd"></path>
|
||||
</svg>
|
||||
</button>
|
||||
<!-- Socials -->
|
||||
<div>
|
||||
<a href="https://github.com/veeso/termscp" class="lg:text-2xl md:text-lg dark:text-gray-100" target="_blank"><i
|
||||
class="devicon-github-original"></i></a>
|
||||
</div>
|
||||
<div>
|
||||
<a href="https://crates.io/crates/termscp" class="lg:text-2xl md:text-lg dark:text-gray-100" target="_blank"><i
|
||||
class="devicon-rust-plain"></i></a>
|
||||
</div>
|
||||
<div>
|
||||
<a href="https://www.linkedin.com/in/christian-visintin/" class="lg:text-2xl md:text-lg dark:text-gray-100"
|
||||
target="_blank"><i class="devicon-linkedin-plain"></i></a>
|
||||
</div>
|
||||
<div>
|
||||
<a href="https://twitter.com/veeso_dev" target="_blank" class="lg:text-2xl md:text-lg dark:text-gray-100"><i
|
||||
class="devicon-twitter-plain"></i></a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- Mobile topbar -->
|
||||
<div class="sm:flex hidden flex-row justify-start items-center gap-8 w-full">
|
||||
<h2 class="text-2xl dark:text-gray-100">
|
||||
<a href="/">
|
||||
<img class="w-[32px] h-auto m-auto inline-block mr-2" alt="logo"
|
||||
src="assets/images/termscp.webp" /> termscp
|
||||
</a>
|
||||
</h2>
|
||||
<div id="menu-icon" class="justify-self-end flex-1 flex justify-end">
|
||||
<i onclick="onToggleMenu()" class="fa fa-bars text-2xl cursor-pointer"></i>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- Mobile menu -->
|
||||
<div id="mobile-menu"
|
||||
class="hidden transition-all fixed top-0 left-0 h-screen bg-brand text-white w-screen flex-col justify-start items-center p-8">
|
||||
<div class="flex flex-row justify-end items-end w-full">
|
||||
<div id="menu-icon" class="justify-self-end flex-1 flex justify-end">
|
||||
<i onclick="onToggleMenu()" class="fa fa-bars text-2xl cursor-pointer"></i>
|
||||
</div>
|
||||
</div>
|
||||
<div class="flex flex-col justify-start items-center w-full gap-4 hover:underline">
|
||||
<h2 class="text-2xl text-white">
|
||||
<a translate="menu.intro" href="/"></a>
|
||||
</h2>
|
||||
<h2 class="text-2xl text-white hover:underline">
|
||||
<a translate="menu.getStarted" href="/get-started.html"></a>
|
||||
</h2>
|
||||
<h2 class="text-2xl text-white hover:underline">
|
||||
<a translate="menu.updates" href="/updates.html"></a>
|
||||
</h2>
|
||||
<h2 class="text-2xl text-white hover:underline">
|
||||
<a translate="menu.manual" href="/user-manual.html"></a>
|
||||
</h2>
|
||||
<h2 class="text-2xl text-white hover:underline">
|
||||
<a translate="menu.changelog" href="/changelog.html"></a>
|
||||
</h2>
|
||||
</div>
|
||||
</div>
|
||||
164
site/html/get-started.html
Normal file
@@ -0,0 +1,164 @@
|
||||
<!DOCTYPE html>
|
||||
|
||||
<body>
|
||||
<section id="start" class="flex flex-col mx-auto items-center justify-center w-full px-12 gap-8 dark:text-gray-100">
|
||||
<h1 translate="getStarted.title" class="text-3xl font-thin">Get started</h1>
|
||||
<section class="w-full">
|
||||
<h2 class="text-2xl font-thin">
|
||||
<i class="fa fa-rocket"></i> <span translate="getStarted.quickSetup">Quick setup</span>
|
||||
</h2>
|
||||
<div class="installation">
|
||||
<div class="p-4 my-4 text-sm text-blue-800 rounded-lg bg-blue-50">
|
||||
<p class="text-lg">
|
||||
<i class="fas fa-info-circle"></i>
|
||||
<span translate="getStarted.suggested">We strongly suggest this method to install termscp</span>
|
||||
</p>
|
||||
</div>
|
||||
<p translate="getStarted.posixUsers">
|
||||
If you are a Linux, a FreeBSD or a MacOS user, you can install termscp
|
||||
via this simple command , which will use a shell script installer:
|
||||
</p>
|
||||
<pre><span class="function">curl</span> --proto <span class="string">'=https'</span> --tlsv1.2 -sSLf <span class="string">"https://git.io/JBhDb"</span> | sh</pre>
|
||||
</div>
|
||||
</section>
|
||||
<section class="w-full">
|
||||
<h2 class="text-2xl font-thin">
|
||||
<i class="devicon-windows8-plain"></i> <span translate="getStarted.windows.title">Windows users</span>
|
||||
</h2>
|
||||
<div class="installation">
|
||||
<p>
|
||||
<span translate="getStarted.windows.intro">You can install termscp on Windows via</span>
|
||||
<a href="https://community.chocolatey.org/packages/termscp" target="_blank">Chocolatey</a>
|
||||
</p>
|
||||
<pre><span class="function">choco</span> install <span class="string">termscp</span></pre>
|
||||
<p>
|
||||
<span translate="getStarted.windows.moderation">Consider that Chocolatey moderation can take up to a few weeks
|
||||
since last release, so if the latest version is not available yet,
|
||||
you can install it downloading the ZIP file from</span>
|
||||
<a href="https://github.com/veeso/termscp/releases/latest/download/termscp.0.17.0.nupkg"
|
||||
target="_blank">Github</a>
|
||||
<span translate="getStarted.windows.then">and then, from the ZIP directory, install it via</span>
|
||||
</p>
|
||||
<pre><span class="function">choco</span> install <span class="string">termscp</span> -s .</pre>
|
||||
</div>
|
||||
</section>
|
||||
<section class="w-full">
|
||||
<h2 class="text-2xl font-thin">
|
||||
<i class="devicon-linux-plain"></i> <span translate="getStarted.linuxUsers">Linux users</span>
|
||||
</h2>
|
||||
<div class="sub-system">
|
||||
<div class="p-4 my-4 text-sm text-yellow-800 rounded-lg bg-yellow-50">
|
||||
<p class="text-lg">
|
||||
<i class="fas fa-exclamation-triangle"></i>
|
||||
<span translate="getStarted.notConfident">Opt for these methods instead if you don't feel confident using
|
||||
the shell script</span>
|
||||
</p>
|
||||
</div>
|
||||
<h3>
|
||||
<i class="devicon-linux-plain"></i> <span translate="getStarted.arch.title">Arch derived users</span>
|
||||
</h3>
|
||||
<div class="installation">
|
||||
<p>
|
||||
<span translate="getStarted.arch.intro">On Arch Linux based distros, you can install termscp using</span>
|
||||
<a href="https://wiki.archlinux.org/title/pacman" target="_blank">pacman</a>
|
||||
<span translate="getStarted.arch.then">then run:</span>
|
||||
</p>
|
||||
<pre><span class="function">pacman</span> -S <span class="string">termscp</span></pre>
|
||||
</div>
|
||||
<h3>
|
||||
<i class="devicon-debian-plain"></i> <span translate="getStarted.debian.title">Debian derived
|
||||
users</span>
|
||||
</h3>
|
||||
<div class="installation">
|
||||
<p translate="getStarted.debian.body">
|
||||
On Debian based distros, you can install termscp using the Deb
|
||||
package via:
|
||||
</p>
|
||||
<pre><span class="function">wget</span> -O termscp.deb <span class="string">https://github.com/veeso/termscp/releases/latest/download/termscp_0.17.0_amd64.deb</span>
|
||||
sudo <span class="function">dpkg</span> -i <span class="string">termscp.deb</span></pre>
|
||||
</div>
|
||||
<h3>
|
||||
<i class="devicon-redhat-plain"></i> <span translate="getStarted.redhat.title">Redhat derived
|
||||
users</span>
|
||||
</h3>
|
||||
<h3>
|
||||
<span>Brew</span>
|
||||
</h3>
|
||||
<div class="installation">
|
||||
<p>
|
||||
<span translate="getStarted.macos.install">Install termscp via</span>
|
||||
<a href="https://brew.sh/" target="_blank">Brew</a>
|
||||
</p>
|
||||
<pre><span class="function">brew</span> install <span class="string">veeso/termscp/termscp</span></pre>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
<section class="w-full">
|
||||
<h2 class="text-2xl font-thin">
|
||||
<i class="devicon-apple-plain"></i> <span translate="getStarted.macos.title">MacOS users</span>
|
||||
</h2>
|
||||
<div class="installation">
|
||||
<div class="p-4 my-4 text-sm text-yellow-800 rounded-lg bg-yellow-50">
|
||||
<p class="text-lg">
|
||||
<i class="fas fa-exclamation-triangle"></i>
|
||||
<span translate="getStarted.notConfident">Opt for these methods instead if you don't feel confident using
|
||||
the shell script</span>
|
||||
</p>
|
||||
</div>
|
||||
<p>
|
||||
<span translate="getStarted.macos.install">Install termscp via</span>
|
||||
<a href="https://brew.sh/" target="_blank">Brew</a>
|
||||
</p>
|
||||
<pre><span class="function">brew</span> install <span class="string">veeso/termscp/termscp</span></pre>
|
||||
</div>
|
||||
</section>
|
||||
<section class="w-full">
|
||||
<h2 class="text-2xl font-thin">
|
||||
<i class="devicon-rust-plain"></i> <span translate="getStarted.cargo.title">Install with Cargo</span>
|
||||
</h2>
|
||||
<div class="installation">
|
||||
<div class="p-4 my-4 text-sm text-yellow-800 rounded-lg bg-yellow-50">
|
||||
<p class="text-lg">
|
||||
<i class="fas fa-exclamation-triangle"></i>
|
||||
<span translate="getStarted.noBinary">Opt for this method instead if binaries for your platform are not
|
||||
available</span>
|
||||
</p>
|
||||
</div>
|
||||
<p>
|
||||
<span translate="getStarted.cargo.body">If a package is not available for your system, you can opt to
|
||||
install termscp via</span>
|
||||
<a href="https://www.rust-lang.org/tools/install" target="_blank">Cargo</a>.
|
||||
<span translate="getStarted.cargo.requirements">To install termscp via Cargo, these requirements must be
|
||||
satisfied:</span>
|
||||
</p>
|
||||
<ul class="list-disc px-8">
|
||||
<li>
|
||||
Linux:
|
||||
<ul class="list-disc px-12">
|
||||
<li>pkg-config</li>
|
||||
<li>libdbus-1</li>
|
||||
<li>libsmbclient</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>
|
||||
FreeBSD:
|
||||
<ul class="list-disc px-12">
|
||||
<li>dbus</li>
|
||||
<li>pkg-conf</li>
|
||||
<li>gcc</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
<p translate="getStarted.cargo.install">Then you can install it via</p>
|
||||
<pre><span class="function">cargo</span> install --locked <span class="string">termscp</span></pre>
|
||||
<p translate="getStarted.cargo.noKeyring" class="pt-4 pb-2">
|
||||
Or if you don't want to have support for keyring or you're building on
|
||||
*BSD:
|
||||
</p>
|
||||
<pre><span class="function">cargo</span> install --locked --no-default-features --features smb <span class="string">termscp</span></pre>
|
||||
<p translate="getStarted.cargo.noSMB" class="pt-4 pb-2"></p>
|
||||
<pre><span class="function">cargo</span> install --locked --no-default-features --features keyring <span class="string">termscp</span></pre>
|
||||
</div>
|
||||
</section>
|
||||
</section>
|
||||
</body>
|
||||
86
site/html/home.html
Normal file
@@ -0,0 +1,86 @@
|
||||
<!DOCTYPE html>
|
||||
<section id="intro"
|
||||
class="flex flex-col mx-auto items-center justify-center w-full px-4 dark:bg-brand dark:text-gray-100">
|
||||
<h1 class="text-3xl text-center font-thin">termscp</h1>
|
||||
<img class="w-[256px] h-auto m-auto" alt="logo" src="assets/images/termscp.webp" />
|
||||
<h2 class="text-xl font-thin text-center py-6" translate="intro.caption">
|
||||
A feature rich terminal UI file transfer and explorer with support for
|
||||
SCP/SFTP/FTP/Kube/S3/WebDAV/SMB/WebDAV
|
||||
</h2>
|
||||
<button class="bg-brand hover:bg-gray-800 text-white font-thin text-xl py-2 px-4 rounded-xl max-w-fit">
|
||||
<a href="/get-started.html" class="no-underline" translate="intro.getStarted">Get started →</a>
|
||||
</button>
|
||||
<div class="p-4 my-4 text-sm text-green-800 rounded-lg bg-green-50">
|
||||
<p class="text-lg">
|
||||
<span translate="intro.versionAlert">termscp 0.17.0 is NOW out! Download it from</span>
|
||||
<a href="/get-started.html" translate="intro.here">here!</a>
|
||||
</p>
|
||||
</div>
|
||||
<div class="grid grid-cols-3 sm:grid-cols-1 gap-8 py-8 w-4/6 sm:w-full">
|
||||
<div class="feature">
|
||||
<h3 translate="intro.features.handy.title" class="text-center text-lg">Handy UI</h3>
|
||||
<p translate="intro.features.handy.body" class="text-center">
|
||||
Explore and operate on the remote and on the local machine file system
|
||||
with a handy UI.
|
||||
</p>
|
||||
</div>
|
||||
<div class="feature">
|
||||
<h3 translate="intro.features.crossPlatform.title" class="text-center text-lg">Cross platform</h3>
|
||||
<p translate="intro.features.crossPlatform.body" class="text-center">
|
||||
Runs on Windows, MacOS, Linux and BSD
|
||||
</p>
|
||||
</div>
|
||||
<div class="feature">
|
||||
<h3 translate="intro.features.customizable.title" class="text-center text-lg">Customizable</h3>
|
||||
<p translate="intro.features.customizable.body" class="text-center">
|
||||
Customize the file explorer, the text editor to use and default
|
||||
options
|
||||
</p>
|
||||
</div>
|
||||
<div class="feature">
|
||||
<h3 translate="intro.features.bookmarks.title" class="text-center text-lg">Bookmarks</h3>
|
||||
<p translate="intro.features.bookmarks.body" class="text-center">
|
||||
Connect to your favourite hosts through built-in bookmarks and recent
|
||||
connections support
|
||||
</p>
|
||||
</div>
|
||||
<div class="feature">
|
||||
<h3 translate="intro.features.security.title" class="text-center text-lg">Security first</h3>
|
||||
<p translate="intro.features.security.body" class="text-center">
|
||||
Save your password into your operating system key vault
|
||||
</p>
|
||||
</div>
|
||||
<div class="feature">
|
||||
<h3 translate="intro.features.performance.title" class="text-center text-lg">Eye on performance</h3>
|
||||
<p translate="intro.features.performance.body" class="text-center">
|
||||
termscp has been developed keeping an eye on performance to prevent
|
||||
cpu usage
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="w-4/6 sm:w-5/6">
|
||||
<video autoplay muted loop>
|
||||
<source src="assets/videos/explorer.mp4" type="video/mp4" resolve-video-fallback="assets/images/explorer.gif" />
|
||||
</video>
|
||||
</div>
|
||||
<hr class="h-px my-8 bg-gray-800 border-0" />
|
||||
<div class="flex flex-row sm:flex-col justify-around gap-12">
|
||||
<div class="hook">
|
||||
<h3 class="text-center text-gray-500 dark:text-gray-100 font-light text-xl">
|
||||
<a href="/get-started.html" class="no-underline hover:underline" translate="intro.footer.getStarted">Get
|
||||
started</a>
|
||||
</h3>
|
||||
</div>
|
||||
<div class="hook">
|
||||
<h3 class="text-center text-gray-500 dark:text-gray-100 font-light text-xl">
|
||||
<a href="/user-manual.html" class="no-underline hover:underline" translate="intro.footer.manual">User manual</a>
|
||||
</h3>
|
||||
</div>
|
||||
<div class="hook">
|
||||
<h3 class="text-center text-gray-500 dark:text-gray-100 font-light text-xl">
|
||||
<a href="/updates.html" class="no-underline hover:underline" translate="intro.footer.updates">Install
|
||||
updates</a>
|
||||
</h3>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
100
site/html/updates.html
Normal file
@@ -0,0 +1,100 @@
|
||||
<head>
|
||||
<link rel="stylesheet" href="css/updates.css" />
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<section id="updates" class="flex flex-col mx-auto items-center justify-center w-full px-12 gap-8 dark:text-gray-100">
|
||||
<h1 translate="updates.title" class="text-3xl font-thin">Keeping termscp up to date</h1>
|
||||
<!-- Reasons -->
|
||||
<section>
|
||||
<h2 class="text-2xl font-thin">
|
||||
<i class="fa fa-question-circle"></i> <span translate="updates.reasons.title">Why should you install
|
||||
updates</span>
|
||||
</h2>
|
||||
<div class="wall-of-text">
|
||||
<p translate="updates.reasons.wallOfText" class="text-gray-700 dark:text-gray-300">
|
||||
Termscp is an application that is still in its early stage of
|
||||
development, the first version has been released in december in 2020
|
||||
and practically there's only one
|
||||
<a href="https://termscp.veeso.dev/" target="_blank">guy</a> working on
|
||||
it and there's still a lot of work to do in order to improve it and
|
||||
make it fast and reliable. Along to this, you should also consider
|
||||
that since it's an application which works with network protocols and
|
||||
is intended to manipulate secrets and credentials there may always be
|
||||
a security issue. I can't guarantee there's no security issues in the
|
||||
versions I've released in these months, and if there are they might
|
||||
not be even my fault, but they might be contained in the libraries
|
||||
termscp relies on. Because of this, it's always VERY important to keep
|
||||
termscp up to date. To prove how much I care about it, just consider
|
||||
that I've implemented something that many other open source
|
||||
applications won't do: the update check. Whenever you start termscp
|
||||
(unless if deactivated in configuration) termscp will always check if
|
||||
there's a new version available and will notify you immediately. In
|
||||
addition to security concerns, each major update will bring many
|
||||
awesome features 🦄 you can't miss and the application is getting more
|
||||
reliable and stable after each update 😄
|
||||
</p>
|
||||
<p class="italic text-xl text-gray-700 dark:text-gray-300">
|
||||
<span>TL;DR</span>
|
||||
<span translate="updates.reasons.tldr"></span>
|
||||
</p>
|
||||
</div>
|
||||
</section>
|
||||
<!-- Gui method -->
|
||||
<section>
|
||||
<h2 class="text-2xl font-thin"><i class="fa fa-desktop"></i> <span translate="updates.gui.title">GUI
|
||||
method</span></h2>
|
||||
<div class="installation">
|
||||
<p translate="updates.gui.body" class="text-gray-700 dark:text-gray-300">
|
||||
The GUI method just consists in starting termscp with no options, you
|
||||
then should be in front of the authentication form. If there's an
|
||||
update available a message like "termscp x.y.z is OUT! Update and read
|
||||
release notes with CTRL+R". All you have to do at this point to update
|
||||
termscp, is:
|
||||
</p>
|
||||
<ol class="list-decimal px-8 text-gray-700 dark:text-gray-300">
|
||||
<li translate="updates.gui.steps.st">press CTRL+R. The release notes should now be displayed.</li>
|
||||
<li translate="updates.gui.steps.nd">Select "YES" in the "Install update?" radio input</li>
|
||||
<li translate="updates.gui.steps.rd">Press "ENTER"</li>
|
||||
</ol>
|
||||
<p translate="updates.gui.then" class="text-gray-700 dark:text-gray-300">
|
||||
If everything worked correctly a green message "termscp x.y.z has been
|
||||
installed!" will be displayed. Just restart termscp and enjoy the
|
||||
update 😄
|
||||
</p>
|
||||
<div class="p-4 my-4 text-sm text-yellow-800 rounded-lg bg-yellow-50">
|
||||
<p>
|
||||
<i class="fas fa-exclamation-triangle"></i>
|
||||
<span translate="updates.gui.pex">
|
||||
If you have previously installed termscp via Deb package, you
|
||||
may need to use the CLI method running termscp with sudo
|
||||
</span>
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
<!-- CLI method -->
|
||||
<section>
|
||||
<h2 class="text-2xl font-thin"><i class="fa fa-glasses"></i> <span translate="updates.cli.title">CLI
|
||||
method</span></h2>
|
||||
<div class="installation">
|
||||
<p translate="updates.cli.body" class="text-gray-700 dark:text-gray-300">
|
||||
If you prefer, you can install a new update just using the dedicated
|
||||
CLI option:
|
||||
</p>
|
||||
<pre><span class="function">termscp</span> --update</pre>
|
||||
<div class="p-4 my-4 text-sm text-yellow-800 rounded-lg bg-yellow-50">
|
||||
<p>
|
||||
<i class="fas fa-exclamation-triangle"></i>
|
||||
<span translate="updates.cli.pex">Run with sudo if necessary (Debian/FreeBSD/RedHat users)</span>
|
||||
</p>
|
||||
</div>
|
||||
<p translate="updates.cli.then" class="text-gray-700 dark:text-gray-300">
|
||||
Once started, you will be prompted whether to install or not the
|
||||
update. Confirm the installation and ta-dah, the new version of
|
||||
termscp should now be available on your machine
|
||||
</p>
|
||||
</div>
|
||||
</section>
|
||||
</section>
|
||||
</body>
|
||||
76
site/index.html
Normal file
@@ -0,0 +1,76 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en_US" class="dark">
|
||||
|
||||
<head>
|
||||
<title>
|
||||
termscp is a terminal file transfer and explorer for SCP/SFTP/FTP/Kube/S3/WebDAV/SMB/WebDAV | termscp
|
||||
</title>
|
||||
<meta property="og:description"
|
||||
content="a WinSCP alternative for Linux and MacOS with support for SCP/SFTP/FTP/Kube/S3/WebDAV/SMB/WebDAV. Command line file transfer with user interface compatible with all the operating systems." />
|
||||
<meta name="description"
|
||||
content="a WinSCP alternative for Linux and MacOS with support for SCP/SFTP/FTP/Kube/S3/WebDAV/SMB/WebDAV. Command line file transfer with user interface compatible with all the operating systems." />
|
||||
<meta property="og:title"
|
||||
content="termscp is a terminal file transfer and explorer for SCP/SFTP/FTP/Kube/S3/WebDAV/SMB/WebDAV | termscp" />
|
||||
<meta charset="utf-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||
<meta name="robots" content="index, follow" />
|
||||
<meta property="og:image" content="https://termscp.veeso.dev/assets/images/og_preview.jpg" />
|
||||
<meta property="og:image:type" content="image/jpg" />
|
||||
<meta property="og:image:width" content="1280" />
|
||||
<meta property="og:image:height" content="640" />
|
||||
<meta property="og:type" content="website" />
|
||||
<meta property="og:site_name" content="termscp" />
|
||||
<meta property="og:locale" content="en_US" />
|
||||
<meta property="og:url" content="https://termscp.veeso.dev" />
|
||||
<!-- Icons -->
|
||||
<link rel="stylesheet" href="https://cdn.jsdelivr.net/gh/devicons/devicon@v2.11.0/devicon.min.css" />
|
||||
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/animate.css/4.1.1/animate.min.css" />
|
||||
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.3/css/all.min.css"
|
||||
integrity="sha512-iBBXm8fW90+nuLcSKlbmrPcLa0OT92xO1BIsZ+ywDWZCvqsWgccV3gFoRBv0z+8dLJgyAHIhR35VZc2oM/gI1w=="
|
||||
crossorigin="anonymous" />
|
||||
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.3/css/fontawesome.min.css"
|
||||
integrity="sha512-OdEXQYCOldjqUEsuMKsZRj93Ht23QRlhIb8E/X0sbwZhme8eUw6g8q7AdxGJKakcBbv7+/PX0Gc2btf7Ru8cZA=="
|
||||
crossorigin="anonymous" />
|
||||
<!-- tailwind -->
|
||||
<link href="output.css" rel="stylesheet" />
|
||||
<!-- Favicons -->
|
||||
<link rel="icon" type="image/png" sizes="96x96" href="assets/images/favicon-96x96.png" />
|
||||
<link rel="icon" type="image/png" sizes="32x32" href="assets/images/favicon-32x32.png" />
|
||||
<link rel="icon" type="image/png" sizes="16x16" href="assets/images/favicon-16x16.png" />
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<div id="layout" class="dark:bg-brand dark:text-gray-100">
|
||||
|
||||
<!-- Menu -->
|
||||
<header id="menu"></header>
|
||||
<main>
|
||||
<div id="main" class="w-8/12 sm:w-full mx-auto pt-4 pb-8"></div>
|
||||
</main>
|
||||
<footer id="footer"></footer>
|
||||
</div>
|
||||
<!-- Scripts -->
|
||||
<!-- jQuery -->
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
|
||||
<!-- Showdown JS-->
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/showdown/1.9.1/showdown.min.js"
|
||||
integrity="sha512-L03kznCrNOfVxOUovR6ESfCz9Gfny7gihUX/huVbQB9zjODtYpxaVtIaAkpetoiyV2eqWbvxMH9fiSv5enX7bw=="
|
||||
crossorigin="anonymous" referrerpolicy="no-referrer"></script>
|
||||
<!-- Local -->
|
||||
<script src="js/lang.min.js"></script>
|
||||
<script src="js/core.js"></script>
|
||||
<script src="js/events.js"></script>
|
||||
<script src="js/resolvers.js"></script>
|
||||
<!-- ko-fi -->
|
||||
<script src="https://storage.ko-fi.com/cdn/scripts/overlay-widget.js"></script>
|
||||
<script>
|
||||
kofiWidgetOverlay.draw("veeso", {
|
||||
type: "floating-chat",
|
||||
"floating-chat.donateButton.text": "Support me",
|
||||
"floating-chat.donateButton.background-color": "#31363b",
|
||||
"floating-chat.donateButton.text-color": "#fff",
|
||||
});
|
||||
</script>
|
||||
</body>
|
||||
|
||||
</html>
|
||||
132
site/input.css
Normal file
@@ -0,0 +1,132 @@
|
||||
@import "css/markdown.css";
|
||||
|
||||
@tailwind base;
|
||||
@tailwind components;
|
||||
@tailwind utilities;
|
||||
|
||||
@font-face {
|
||||
font-family: "Sora";
|
||||
font-style: normal;
|
||||
font-weight: 300;
|
||||
font-display: swap;
|
||||
src: url(https://fonts.gstatic.com/s/sora/v11/xMQ9uFFYT72X5wkB_18qmnndmSdSnx2BAfO5mnuyOo1l_iMwWa-xsaQ.woff2)
|
||||
format("woff2");
|
||||
unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB,
|
||||
U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF;
|
||||
}
|
||||
/* latin */
|
||||
@font-face {
|
||||
font-family: "Sora";
|
||||
font-style: normal;
|
||||
font-weight: 300;
|
||||
font-display: swap;
|
||||
src: url(https://fonts.gstatic.com/s/sora/v11/xMQ9uFFYT72X5wkB_18qmnndmSdSnx2BAfO5mnuyOo1l_iMwV6-x.woff2)
|
||||
format("woff2");
|
||||
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA,
|
||||
U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215,
|
||||
U+FEFF, U+FFFD;
|
||||
}
|
||||
/* latin-ext */
|
||||
@font-face {
|
||||
font-family: "Sora";
|
||||
font-style: normal;
|
||||
font-weight: 400;
|
||||
font-display: swap;
|
||||
src: url(https://fonts.gstatic.com/s/sora/v11/xMQ9uFFYT72X5wkB_18qmnndmSdSnx2BAfO5mnuyOo1l_iMwWa-xsaQ.woff2)
|
||||
format("woff2");
|
||||
unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB,
|
||||
U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF;
|
||||
}
|
||||
/* latin */
|
||||
@font-face {
|
||||
font-family: "Sora";
|
||||
font-style: normal;
|
||||
font-weight: 400;
|
||||
font-display: swap;
|
||||
src: url(https://fonts.gstatic.com/s/sora/v11/xMQ9uFFYT72X5wkB_18qmnndmSdSnx2BAfO5mnuyOo1l_iMwV6-x.woff2)
|
||||
format("woff2");
|
||||
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA,
|
||||
U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215,
|
||||
U+FEFF, U+FFFD;
|
||||
}
|
||||
|
||||
html {
|
||||
scroll-behavior: smooth;
|
||||
}
|
||||
|
||||
body {
|
||||
font-family: "Sora", sans-serif;
|
||||
margin: 0;
|
||||
min-width: 100vw;
|
||||
overflow-x: hidden;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
main {
|
||||
padding-top: 5rem;
|
||||
}
|
||||
|
||||
p {
|
||||
font-weight: 300;
|
||||
}
|
||||
|
||||
input {
|
||||
font-family: "Sora", sans-serif;
|
||||
font-size: 1em;
|
||||
}
|
||||
|
||||
textarea {
|
||||
font-family: "Sora", sans-serif;
|
||||
}
|
||||
|
||||
h1,
|
||||
h2,
|
||||
h3,
|
||||
h4,
|
||||
h5,
|
||||
h6 {
|
||||
margin-top: 0;
|
||||
margin-bottom: 0.5rem;
|
||||
}
|
||||
|
||||
button {
|
||||
box-sizing: border-box;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
button,
|
||||
input {
|
||||
margin: 0;
|
||||
font-family: inherit;
|
||||
font-size: inherit;
|
||||
line-height: inherit;
|
||||
}
|
||||
|
||||
a {
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
a:hover {
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
pre {
|
||||
font-family: Consolas, "Liberation Mono", Menlo, Courier, monospace;
|
||||
padding: 16px;
|
||||
overflow: auto;
|
||||
font-size: 85%;
|
||||
line-height: 1.45;
|
||||
color: #d0d0d0;
|
||||
background-color: #222629;
|
||||
border-radius: 3px;
|
||||
word-wrap: normal;
|
||||
border-radius: 0.5em;
|
||||
}
|
||||
|
||||
pre .function {
|
||||
color: #f08d49;
|
||||
}
|
||||
|
||||
pre .string {
|
||||
color: #7ec699;
|
||||
}
|
||||