Skip to content

Commit e613fa8

Browse files
author
liaotonglang
committed
enable copy and paste
1 parent 5b944d7 commit e613fa8

File tree

6 files changed

+162
-4
lines changed

6 files changed

+162
-4
lines changed

package.json

+1
Original file line numberDiff line numberDiff line change
@@ -119,6 +119,7 @@
119119
"@types/nodemailer": "^6.4.6",
120120
"@types/ssh2": "^1.11.5",
121121
"@types/uuid": "^8.3.4",
122+
"electron-context-menu": "^3.6.1",
122123
"electron-rebuild": "^3.2.9",
123124
"electron-squirrel-startup": "^1.0.0",
124125
"mocha": "^10.0.0",

src/main/main.ts

+6
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,12 @@ import { kvsGetCurDir, kvsGetCurGroup, kvsSetCurDir, kvsSetCurGroup } from './kv
2626
import path from 'path';
2727
import fs from 'fs';
2828
import { FileDesc, humanFileSize } from './FileDesc';
29+
import contextMenu from 'electron-context-menu';
30+
31+
contextMenu({
32+
showInspectElement: false,
33+
showSearchWithGoogle: false,
34+
});
2935

3036
/*
3137
const server = 'https://update.electronjs.org'

src/main/ssh.ts

+24
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,30 @@ export class SshFetchStats {
4444
stream.write(data.data);
4545
} else if (data.op == 'resize') {
4646
stream.setWindow(data.rows, data.cols, '', '');
47+
} else if (data.op == 'pwd') {
48+
s.conn.exec('pwd', { env: this.exeEnv() }, (err: any, stream: any) => {
49+
let content = '';
50+
if (err) {
51+
console.log('error when pwd', s.login.host, s.login.port, err);
52+
return;
53+
}
54+
stream.on('close', (code: number, signal: any) => {
55+
console.log('streawm close', content);
56+
if (content.length > 0) {
57+
win.send(chanKey, {
58+
'op': "pwd",
59+
'data': content,
60+
});
61+
}
62+
}).on('data', (data: string) => {
63+
console.log('ondata...', 'pwd');
64+
content = content + data;
65+
}).stderr.on('data', (data: string) => {
66+
console.log('stderr pwd', data, s.login.host, s.login.port);
67+
});
68+
});
69+
70+
4771
}
4872
// console.log("witten to remote");
4973
});

src/pages/MyTerminal.jsx

+23-2
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ import { parse as queryParse } from 'querystring';
66
import React from 'react';
77

88
import "./xterm.css";
9-
import { EuiFocusTrap, EuiOverlayMask, EuiPanel } from '@elastic/eui';
9+
import { EuiFocusTrap, EuiOverlayMask, EuiPanel, EuiSpacer, EuiText } from '@elastic/eui';
1010

1111

1212
export class MyTerminal extends React.Component {
@@ -15,6 +15,7 @@ export class MyTerminal extends React.Component {
1515

1616
this.state = {
1717
maskOpen: false,
18+
showModal: false,
1819
};
1920

2021
this.term = null;
@@ -75,12 +76,22 @@ export class MyTerminal extends React.Component {
7576
// console.log("this is data:", data);
7677
})
7778

78-
window.document.addEventListener('drop', (event) => {
79+
window.document.addEventListener('drop', async (event) => {
7980
event.preventDefault();
8081
event.stopPropagation();
82+
let setCurDir;
8183
for (const f of event.dataTransfer.files) {
8284
console.log('File Path of dragged files:', f.path);
85+
if (!setCurDir) {
86+
setCurDir = window.fs.getDirname(f.path);
87+
}
8388
}
89+
if (setCurDir) {
90+
window.fs.setCurDir(setCurDir);
91+
}
92+
this.setState({ showModal: true });
93+
// creat window
94+
window.fs.sftpWindow(uuid);
8495
});
8596
window.document.addEventListener('dragover', (e) => {
8697
e.preventDefault();
@@ -95,6 +106,16 @@ export class MyTerminal extends React.Component {
95106
return (
96107
<>
97108
<div id="xterm" style={{ margin: 0, height: '100%' }} ref={c => this.XtermDiv = c} />
109+
{this.state.showModal &&
110+
<EuiOverlayMask >
111+
<EuiFocusTrap onClickOutside={() => this.setState({ showModal: false })}>
112+
<EuiPanel>
113+
<EuiText><h1>已经打开sftp窗口</h1></EuiText>
114+
<EuiSpacer />
115+
</EuiPanel>
116+
</EuiFocusTrap>
117+
</EuiOverlayMask>
118+
}
98119
</>
99120
);
100121
}

src/preload.js

+3-1
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,8 @@ contextBridge.exposeInMainWorld('fs', {
4141
getCurGroup: async () => await ipcRenderer.invoke('getCurGroup'),
4242
setCurGroup: async (g) => await ipcRenderer.invoke('setCurGroup', g),
4343

44+
getDirname: (p) => path.dirname(p),
45+
4446
listDir: async (dir) => await ipcRenderer.invoke('listDir', dir),
4547
cd: (origin, dst) => {
4648
const newDir = path.join(origin, dst);
@@ -57,6 +59,6 @@ contextBridge.exposeInMainWorld('rterm', {
5759
contextBridge.exposeInMainWorld('ipc', {
5860
'send': (chan, data) => ipcRenderer.send(chan, data),
5961
'on': (chan, fn) => ipcRenderer.on(chan, fn),
60-
'clear': (chan) => ipcRenderer.removeAllListeners(chan),
62+
'clear': (chan) => ipcRenderer.removeAllListeners(chan),
6163
});
6264

yarn.lock

+105-1
Original file line numberDiff line numberDiff line change
@@ -1740,6 +1740,11 @@ asn1@^0.2.4:
17401740
dependencies:
17411741
safer-buffer "~2.1.0"
17421742

1743+
astral-regex@^2.0.0:
1744+
version "2.0.0"
1745+
resolved "https://registry.npmmirror.com/astral-regex/-/astral-regex-2.0.0.tgz#483143c567aeed4785759c0865786dc77d7d2e31"
1746+
integrity sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==
1747+
17431748
at-least-node@^1.0.0:
17441749
version "1.0.0"
17451750
resolved "https://registry.npmmirror.com/at-least-node/-/at-least-node-1.0.0.tgz#602cd4b46e844ad4effc92a8011a3c46e0238dc2"
@@ -2158,6 +2163,14 @@ cli-spinners@^2.5.0:
21582163
resolved "https://registry.npmmirror.com/cli-spinners/-/cli-spinners-2.7.0.tgz#f815fd30b5f9eaac02db604c7a231ed7cb2f797a"
21592164
integrity sha512-qu3pN8Y3qHNgE2AFweciB1IfMnmZ/fsNTEE+NOFjmGB2F/7rLhnhzppvpCnN4FovtP26k8lHyy9ptEbNwWFLzw==
21602165

2166+
cli-truncate@^2.1.0:
2167+
version "2.1.0"
2168+
resolved "https://registry.npmmirror.com/cli-truncate/-/cli-truncate-2.1.0.tgz#c39e28bf05edcde5be3b98992a22deed5a2b93c7"
2169+
integrity sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==
2170+
dependencies:
2171+
slice-ansi "^3.0.0"
2172+
string-width "^4.2.0"
2173+
21612174
cli-width@^3.0.0:
21622175
version "3.0.0"
21632176
resolved "https://registry.npmmirror.com/cli-width/-/cli-width-3.0.0.tgz#a2f48437a2caa9a22436e794bf071ec9e61cedf6"
@@ -2705,6 +2718,24 @@ ee-first@1.1.1:
27052718
resolved "https://registry.npmmirror.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d"
27062719
integrity sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==
27072720

2721+
electron-context-menu@^3.6.1:
2722+
version "3.6.1"
2723+
resolved "https://registry.npmmirror.com/electron-context-menu/-/electron-context-menu-3.6.1.tgz#42f117e15309687b22283e6f8f7a0d95a19afe84"
2724+
integrity sha512-lcpO6tzzKUROeirhzBjdBWNqayEThmdW+2I2s6H6QMrwqTVyT3EK47jW3Nxm60KTxl5/bWfEoIruoUNn57/QkQ==
2725+
dependencies:
2726+
cli-truncate "^2.1.0"
2727+
electron-dl "^3.2.1"
2728+
electron-is-dev "^2.0.0"
2729+
2730+
electron-dl@^3.2.1:
2731+
version "3.5.0"
2732+
resolved "https://registry.npmmirror.com/electron-dl/-/electron-dl-3.5.0.tgz#7a80bf13f168f7e5204774eee89dbc7c86de957b"
2733+
integrity sha512-Oj+VSuScVx8hEKM2HEvTQswTX6G3MLh7UoAz/oZuvKyNDfudNi1zY6PK/UnFoK1nCl9DF6k+3PFwElKbtZlDig==
2734+
dependencies:
2735+
ext-name "^5.0.0"
2736+
pupa "^2.0.1"
2737+
unused-filename "^2.1.0"
2738+
27082739
electron-installer-common@^0.10.2:
27092740
version "0.10.3"
27102741
resolved "https://registry.npmmirror.com/electron-installer-common/-/electron-installer-common-0.10.3.tgz#40f9db644ca60eb28673d545b67ee0113aef4444"
@@ -2754,6 +2785,11 @@ electron-is-dev@^0.3.0:
27542785
resolved "https://registry.npmmirror.com/electron-is-dev/-/electron-is-dev-0.3.0.tgz#14e6fda5c68e9e4ecbeff9ccf037cbd7c05c5afe"
27552786
integrity sha512-jLttuuq8QK67n3mXmIe9pkrO7IH3LGIk12xJkhTmc852U2sCJaRAOpRGPSh+1Xnzck5v9escd9YXzuze9nGejg==
27562787

2788+
electron-is-dev@^2.0.0:
2789+
version "2.0.0"
2790+
resolved "https://registry.npmmirror.com/electron-is-dev/-/electron-is-dev-2.0.0.tgz#833487a069b8dad21425c67a19847d9064ab19bd"
2791+
integrity sha512-3X99K852Yoqu9AcW50qz3ibYBWY79/pBhlMCab8ToEWS48R0T9tyxRiQhwylE7zQdXrMnx2JKqUJyMPmt5FBqA==
2792+
27572793
electron-notarize@^1.1.1:
27582794
version "1.2.1"
27592795
resolved "https://registry.npmmirror.com/electron-notarize/-/electron-notarize-1.2.1.tgz#347c18eca8e29dddadadee511b870c13d4008baf"
@@ -2976,6 +3012,11 @@ escalade@^3.1.1:
29763012
resolved "https://registry.npmmirror.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40"
29773013
integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==
29783014

3015+
escape-goat@^2.0.0:
3016+
version "2.1.1"
3017+
resolved "https://registry.npmmirror.com/escape-goat/-/escape-goat-2.1.1.tgz#1b2dc77003676c457ec760b2dc68edb648188675"
3018+
integrity sha512-8/uIhbG12Csjy2JEW7D9pHbreaVaS/OpN3ycnyvElTdwM5n6GY6W6e2IPemfvGZeUMqZ9A/3GqIZMgKnBhAw/Q==
3019+
29793020
escape-html@~1.0.3:
29803021
version "1.0.3"
29813022
resolved "https://registry.npmmirror.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988"
@@ -3235,6 +3276,21 @@ express@^4.17.1, express@^4.17.3:
32353276
utils-merge "1.0.1"
32363277
vary "~1.1.2"
32373278

3279+
ext-list@^2.0.0:
3280+
version "2.2.2"
3281+
resolved "https://registry.npmmirror.com/ext-list/-/ext-list-2.2.2.tgz#0b98e64ed82f5acf0f2931babf69212ef52ddd37"
3282+
integrity sha512-u+SQgsubraE6zItfVA0tBuCBhfU9ogSRnsvygI7wht9TS510oLkBRXBsqopeUG/GBOIQyKZO9wjTqIu/sf5zFA==
3283+
dependencies:
3284+
mime-db "^1.28.0"
3285+
3286+
ext-name@^5.0.0:
3287+
version "5.0.0"
3288+
resolved "https://registry.npmmirror.com/ext-name/-/ext-name-5.0.0.tgz#70781981d183ee15d13993c8822045c506c8f0a6"
3289+
integrity sha512-yblEwXAbGv1VQDmow7s38W77hzAgJAO50ztBLMcUyUBfxv1HC+LGwtiEN+Co6LtlqT/5uwVOxsD4TNIilWhwdQ==
3290+
dependencies:
3291+
ext-list "^2.0.0"
3292+
sort-keys-length "^1.0.0"
3293+
32383294
extend@^3.0.0:
32393295
version "3.0.2"
32403296
resolved "https://registry.npmmirror.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa"
@@ -4420,6 +4476,11 @@ is-number@^7.0.0:
44204476
resolved "https://registry.npmmirror.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b"
44214477
integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==
44224478

4479+
is-plain-obj@^1.0.0:
4480+
version "1.1.0"
4481+
resolved "https://registry.npmmirror.com/is-plain-obj/-/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e"
4482+
integrity sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==
4483+
44234484
is-plain-obj@^2.0.0, is-plain-obj@^2.1.0:
44244485
version "2.1.0"
44254486
resolved "https://registry.npmmirror.com/is-plain-obj/-/is-plain-obj-2.1.0.tgz#45e42e37fccf1f40da8e5f76ee21515840c09287"
@@ -4935,7 +4996,7 @@ micromatch@^4.0.0, micromatch@^4.0.2, micromatch@^4.0.4:
49354996
braces "^3.0.2"
49364997
picomatch "^2.3.1"
49374998

4938-
mime-db@1.52.0, "mime-db@>= 1.43.0 < 2":
4999+
mime-db@1.52.0, "mime-db@>= 1.43.0 < 2", mime-db@^1.28.0:
49395000
version "1.52.0"
49405001
resolved "https://registry.npmmirror.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70"
49415002
integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==
@@ -5106,6 +5167,11 @@ mocha@^10.0.0:
51065167
yargs-parser "20.2.4"
51075168
yargs-unparser "2.0.0"
51085169

5170+
modify-filename@^1.1.0:
5171+
version "1.1.0"
5172+
resolved "https://registry.npmmirror.com/modify-filename/-/modify-filename-1.1.0.tgz#9a2dec83806fbb2d975f22beec859ca26b393aa1"
5173+
integrity sha512-EickqnKq3kVVaZisYuCxhtKbZjInCuwgwZWyAmRIp1NTMhri7r3380/uqwrUHfaDiPzLVTuoNy4whX66bxPVog==
5174+
51095175
moment@^2.29.4:
51105176
version "2.29.4"
51115177
resolved "https://registry.npmmirror.com/moment/-/moment-2.29.4.tgz#3dbe052889fe7c1b2ed966fcb3a77328964ef108"
@@ -5853,6 +5919,13 @@ punycode@^2.1.0:
58535919
resolved "https://registry.npmmirror.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec"
58545920
integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==
58555921

5922+
pupa@^2.0.1:
5923+
version "2.1.1"
5924+
resolved "https://registry.npmmirror.com/pupa/-/pupa-2.1.1.tgz#f5e8fd4afc2c5d97828faa523549ed8744a20d62"
5925+
integrity sha512-l1jNAspIBSFqbT+y+5FosojNpVpF94nlI+wDUpqP9enwOTfHx9f0gh5nB96vl+6yTpsJsypeNrwfzPrKuHB41A==
5926+
dependencies:
5927+
escape-goat "^2.0.0"
5928+
58565929
qs@6.10.3:
58575930
version "6.10.3"
58585931
resolved "https://registry.npmmirror.com/qs/-/qs-6.10.3.tgz#d6cde1b2ffca87b5aa57889816c5f81535e22e8e"
@@ -6588,6 +6661,15 @@ slash@^3.0.0:
65886661
resolved "https://registry.npmmirror.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634"
65896662
integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==
65906663

6664+
slice-ansi@^3.0.0:
6665+
version "3.0.0"
6666+
resolved "https://registry.npmmirror.com/slice-ansi/-/slice-ansi-3.0.0.tgz#31ddc10930a1b7e0b67b08c96c2f49b77a789787"
6667+
integrity sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==
6668+
dependencies:
6669+
ansi-styles "^4.0.0"
6670+
astral-regex "^2.0.0"
6671+
is-fullwidth-code-point "^3.0.0"
6672+
65916673
smart-buffer@^4.2.0:
65926674
version "4.2.0"
65936675
resolved "https://registry.npmmirror.com/smart-buffer/-/smart-buffer-4.2.0.tgz#6e1d71fa4f18c05f7d0ff216dd16a481d0e8d9ae"
@@ -6619,6 +6701,20 @@ socks@^2.6.2:
66196701
ip "^2.0.0"
66206702
smart-buffer "^4.2.0"
66216703

6704+
sort-keys-length@^1.0.0:
6705+
version "1.0.1"
6706+
resolved "https://registry.npmmirror.com/sort-keys-length/-/sort-keys-length-1.0.1.tgz#9cb6f4f4e9e48155a6aa0671edd336ff1479a188"
6707+
integrity sha512-GRbEOUqCxemTAk/b32F2xa8wDTs+Z1QHOkbhJDQTvv/6G3ZkbJ+frYWsTcc7cBB3Fu4wy4XlLCuNtJuMn7Gsvw==
6708+
dependencies:
6709+
sort-keys "^1.0.0"
6710+
6711+
sort-keys@^1.0.0:
6712+
version "1.1.2"
6713+
resolved "https://registry.npmmirror.com/sort-keys/-/sort-keys-1.1.2.tgz#441b6d4d346798f1b4e49e8920adfba0e543f9ad"
6714+
integrity sha512-vzn8aSqKgytVik0iwdBEi+zevbTYZogewTUM6dtpmGwEcdzbub/TX4bCzRhebDCRC3QzXgJsLRKB2V/Oof7HXg==
6715+
dependencies:
6716+
is-plain-obj "^1.0.0"
6717+
66226718
source-map-js@^1.0.2:
66236719
version "1.0.2"
66246720
resolved "https://registry.npmmirror.com/source-map-js/-/source-map-js-1.0.2.tgz#adbc361d9c62df380125e7f161f71c826f1e490c"
@@ -7257,6 +7353,14 @@ unpipe@1.0.0, unpipe@~1.0.0:
72577353
resolved "https://registry.npmmirror.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec"
72587354
integrity sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==
72597355

7356+
unused-filename@^2.1.0:
7357+
version "2.1.0"
7358+
resolved "https://registry.npmmirror.com/unused-filename/-/unused-filename-2.1.0.tgz#33719c4e8d9644f32d2dec1bc8525c6aaeb4ba51"
7359+
integrity sha512-BMiNwJbuWmqCpAM1FqxCTD7lXF97AvfQC8Kr/DIeA6VtvhJaMDupZ82+inbjl5yVP44PcxOuCSxye1QMS0wZyg==
7360+
dependencies:
7361+
modify-filename "^1.1.0"
7362+
path-exists "^4.0.0"
7363+
72607364
update-browserslist-db@^1.0.9:
72617365
version "1.0.9"
72627366
resolved "https://registry.npmmirror.com/update-browserslist-db/-/update-browserslist-db-1.0.9.tgz#2924d3927367a38d5c555413a7ce138fc95fcb18"

0 commit comments

Comments
 (0)