mirror of
https://github.com/Eugeny/tabby.git
synced 2025-09-28 11:06:03 +00:00
Compare commits
2 Commits
b31c2a5c11
...
v1.0.225
Author | SHA1 | Date | |
---|---|---|---|
![]() |
b9e335817d | ||
![]() |
56ee368b63 |
@@ -16,7 +16,7 @@
|
||||
},
|
||||
"dependencies": {
|
||||
"@electron/remote": "^2",
|
||||
"node-pty": "^1.0.0",
|
||||
"node-pty": "^1.1.0-beta34",
|
||||
"any-promise": "^1.3.0",
|
||||
"electron-config": "2.0.0",
|
||||
"electron-debug": "^3.2.0",
|
||||
|
@@ -1,53 +0,0 @@
|
||||
diff --git a/node_modules/node-pty/binding.gyp b/node_modules/node-pty/binding.gyp
|
||||
index 79a93e7..efb0a3f 100644
|
||||
--- a/node_modules/node-pty/binding.gyp
|
||||
+++ b/node_modules/node-pty/binding.gyp
|
||||
@@ -18,6 +18,9 @@
|
||||
]
|
||||
}
|
||||
},
|
||||
+ 'defines': [
|
||||
+ 'NOMINMAX'
|
||||
+ ]
|
||||
}],
|
||||
],
|
||||
},
|
||||
diff --git a/node_modules/node-pty/src/win/winpty.cc b/node_modules/node-pty/src/win/winpty.cc
|
||||
index b054dee..a094b1c 100644
|
||||
--- a/node_modules/node-pty/src/win/winpty.cc
|
||||
+++ b/node_modules/node-pty/src/win/winpty.cc
|
||||
@@ -164,7 +164,7 @@ static NAN_METHOD(PtyStartProcess) {
|
||||
Nan::ThrowError(why.str().c_str());
|
||||
goto cleanup;
|
||||
}
|
||||
-
|
||||
+ {
|
||||
int cols = info[4]->Int32Value(Nan::GetCurrentContext()).FromJust();
|
||||
int rows = info[5]->Int32Value(Nan::GetCurrentContext()).FromJust();
|
||||
bool debug = Nan::To<bool>(info[6]).FromJust();
|
||||
@@ -179,6 +179,7 @@ static NAN_METHOD(PtyStartProcess) {
|
||||
throw_winpty_error("Error creating WinPTY config", error_ptr);
|
||||
goto cleanup;
|
||||
}
|
||||
+ {
|
||||
winpty_error_free(error_ptr);
|
||||
|
||||
// Set pty size on config
|
||||
@@ -215,7 +216,7 @@ static NAN_METHOD(PtyStartProcess) {
|
||||
winpty_error_free(error_ptr);
|
||||
|
||||
// Set return values
|
||||
- v8::Local<v8::Object> marshal = Nan::New<v8::Object>();
|
||||
+ {v8::Local<v8::Object> marshal = Nan::New<v8::Object>();
|
||||
Nan::Set(marshal, Nan::New<v8::String>("innerPid").ToLocalChecked(), Nan::New<v8::Number>((int)GetProcessId(handle)));
|
||||
Nan::Set(marshal, Nan::New<v8::String>("innerPidHandle").ToLocalChecked(), Nan::New<v8::Number>((int)handle));
|
||||
Nan::Set(marshal, Nan::New<v8::String>("pid").ToLocalChecked(), Nan::New<v8::Number>((int)winpty_agent_process(pc)));
|
||||
@@ -232,7 +233,7 @@ static NAN_METHOD(PtyStartProcess) {
|
||||
Nan::Set(marshal, Nan::New<v8::String>("conout").ToLocalChecked(), Nan::New<v8::String>(conoutPipeNameStr).ToLocalChecked());
|
||||
}
|
||||
info.GetReturnValue().Set(marshal);
|
||||
-
|
||||
+ }}}
|
||||
goto cleanup;
|
||||
|
||||
cleanup:
|
@@ -2607,7 +2607,7 @@ mz@^2.7.0:
|
||||
object-assign "^4.0.1"
|
||||
thenify-all "^1.0.0"
|
||||
|
||||
nan@2.22.2, nan@^2.17.0:
|
||||
nan@2.22.2:
|
||||
version "2.22.2"
|
||||
resolved "https://registry.yarnpkg.com/nan/-/nan-2.22.2.tgz#6b504fd029fb8f38c0990e52ad5c26772fdacfbb"
|
||||
integrity sha512-DANghxFkS1plDdRsX0X9pm0Z6SJNN6gBdtXfanwoZ8hooC5gosGFSBGRYHUVPz1asKA/kMRqDRdHrluZ61SpBQ==
|
||||
@@ -2648,7 +2648,7 @@ node-abi@4.9.0, node-abi@^3.3.0:
|
||||
dependencies:
|
||||
semver "^7.6.3"
|
||||
|
||||
node-addon-api@3.1.0, node-addon-api@6.1.0, node-addon-api@7.1.0, node-addon-api@^3.0.2, node-addon-api@^3.1.0, node-addon-api@^4.0.0, node-addon-api@^4.3.0, node-addon-api@^8.3.0:
|
||||
node-addon-api@3.1.0, node-addon-api@6.1.0, node-addon-api@7.1.0, node-addon-api@^3.0.2, node-addon-api@^3.1.0, node-addon-api@^4.0.0, node-addon-api@^4.3.0, node-addon-api@^7.1.0, node-addon-api@^8.3.0:
|
||||
version "8.3.0"
|
||||
resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-8.3.0.tgz#ec3763f18befc1cdf66d11e157ce44d5eddc0603"
|
||||
integrity sha512-8VOpLHFrOQlAH+qA0ZzuGRlALRA6/LVh8QJldbrC4DY0hXoMP0l4Acq8TzFC018HztWiRqyCEj2aTWY2UvnJUg==
|
||||
@@ -2683,12 +2683,12 @@ node-gyp@^10.0.0, node-gyp@^5.0.2, node-gyp@^5.1.0:
|
||||
tar "^6.1.2"
|
||||
which "^4.0.0"
|
||||
|
||||
node-pty@^1.0.0:
|
||||
version "1.0.0"
|
||||
resolved "https://registry.yarnpkg.com/node-pty/-/node-pty-1.0.0.tgz#7daafc0aca1c4ca3de15c61330373af4af5861fd"
|
||||
integrity sha512-wtBMWWS7dFZm/VgqElrTvtfMq4GzJ6+edFI0Y0zyzygUSZMgZdraDUMUhCIvkjhJjme15qWmbyJbtAx4ot4uZA==
|
||||
node-pty@^1.1.0-beta34:
|
||||
version "1.1.0-beta9"
|
||||
resolved "https://registry.yarnpkg.com/node-pty/-/node-pty-1.1.0-beta9.tgz#ed643cb3b398d031b4e31c216e8f3b0042435f1d"
|
||||
integrity sha512-/Ue38pvXJdgRZ3+me1FgfglLd301GhJN0NStiotdt61tm43N5htUyR/IXOUzOKuNaFmCwIhy6nwb77Ky41LMbw==
|
||||
dependencies:
|
||||
nan "^2.17.0"
|
||||
node-addon-api "^7.1.0"
|
||||
|
||||
nopt@^4.0.3:
|
||||
version "4.0.3"
|
||||
@@ -3939,8 +3939,7 @@ strict-uri-encode@^2.0.0:
|
||||
resolved "https://registry.yarnpkg.com/strict-uri-encode/-/strict-uri-encode-2.0.0.tgz#b9c7330c7042862f6b142dc274bbcc5866ce3546"
|
||||
integrity sha1-ucczDHBChi9rFC3CdLvMWGbONUY=
|
||||
|
||||
"string-width-cjs@npm:string-width@^4.2.0", string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3:
|
||||
name string-width-cjs
|
||||
"string-width-cjs@npm:string-width@^4.2.0":
|
||||
version "4.2.3"
|
||||
resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010"
|
||||
integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==
|
||||
@@ -3975,6 +3974,15 @@ string-width@^3.0.0, string-width@^3.1.0:
|
||||
is-fullwidth-code-point "^2.0.0"
|
||||
strip-ansi "^5.1.0"
|
||||
|
||||
string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3:
|
||||
version "4.2.3"
|
||||
resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010"
|
||||
integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==
|
||||
dependencies:
|
||||
emoji-regex "^8.0.0"
|
||||
is-fullwidth-code-point "^3.0.0"
|
||||
strip-ansi "^6.0.1"
|
||||
|
||||
string-width@^5.0.1, string-width@^5.1.2:
|
||||
version "5.1.2"
|
||||
resolved "https://registry.yarnpkg.com/string-width/-/string-width-5.1.2.tgz#14f8daec6d81e7221d2a357e668cab73bdbca794"
|
||||
@@ -4017,8 +4025,7 @@ stringify-package@^1.0.0, stringify-package@^1.0.1:
|
||||
resolved "https://registry.yarnpkg.com/stringify-package/-/stringify-package-1.0.1.tgz#e5aa3643e7f74d0f28628b72f3dad5cecfc3ba85"
|
||||
integrity sha512-sa4DUQsYciMP1xhKWGuFM04fB0LG/9DlluZoSVywUMRNvzid6XucHK0/90xGxRoHrAaROrcHK1aPKaijCtSrhg==
|
||||
|
||||
"strip-ansi-cjs@npm:strip-ansi@^6.0.1", strip-ansi@^6.0.1:
|
||||
name strip-ansi-cjs
|
||||
"strip-ansi-cjs@npm:strip-ansi@^6.0.1":
|
||||
version "6.0.1"
|
||||
resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9"
|
||||
integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==
|
||||
@@ -4053,6 +4060,13 @@ strip-ansi@^6.0.0:
|
||||
dependencies:
|
||||
ansi-regex "^5.0.0"
|
||||
|
||||
strip-ansi@^6.0.1:
|
||||
version "6.0.1"
|
||||
resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9"
|
||||
integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==
|
||||
dependencies:
|
||||
ansi-regex "^5.0.1"
|
||||
|
||||
strip-ansi@^7.0.1:
|
||||
version "7.1.0"
|
||||
resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-7.1.0.tgz#d5b6568ca689d8561370b0707685d22434faff45"
|
||||
@@ -4457,8 +4471,7 @@ worker-farm@^1.6.0, worker-farm@^1.7.0:
|
||||
dependencies:
|
||||
errno "~0.1.7"
|
||||
|
||||
"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0", wrap-ansi@^7.0.0:
|
||||
name wrap-ansi-cjs
|
||||
"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0":
|
||||
version "7.0.0"
|
||||
resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43"
|
||||
integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==
|
||||
@@ -4484,6 +4497,15 @@ wrap-ansi@^5.1.0:
|
||||
string-width "^3.0.0"
|
||||
strip-ansi "^5.0.0"
|
||||
|
||||
wrap-ansi@^7.0.0:
|
||||
version "7.0.0"
|
||||
resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43"
|
||||
integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==
|
||||
dependencies:
|
||||
ansi-styles "^4.0.0"
|
||||
string-width "^4.1.0"
|
||||
strip-ansi "^6.0.0"
|
||||
|
||||
wrap-ansi@^8.1.0:
|
||||
version "8.1.0"
|
||||
resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-8.1.0.tgz#56dc22368ee570face1b49819975d9b9a5ead214"
|
||||
|
@@ -17,6 +17,10 @@
|
||||
|
||||
.breadcrumb-spacer.flex-grow-1.h-100((dblclick)='editPath()')
|
||||
|
||||
button.btn.btn-link.btn-sm.flex-shrink-0.d-flex(*ngIf='!showFilter', (click)='showFilter = true')
|
||||
i.fas.fa-filter.me-1
|
||||
div(translate) Filter
|
||||
|
||||
button.btn.btn-link.btn-sm.flex-shrink-0.d-flex((click)='openCreateDirectoryModal()')
|
||||
i.fas.fa-plus.me-1
|
||||
div(translate) Create directory
|
||||
@@ -31,6 +35,19 @@
|
||||
|
||||
button.btn.btn-link.text-decoration-none((click)='close()') !{require('../../../tabby-core/src/icons/times.svg')}
|
||||
|
||||
.filter-bar.px-3.py-2.border-bottom(*ngIf='showFilter')
|
||||
.input-group
|
||||
input.form-control(
|
||||
type='text',
|
||||
placeholder='Filter...',
|
||||
autofocus,
|
||||
[(ngModel)]='filterText',
|
||||
(input)='onFilterChange()',
|
||||
(keydown.escape)='clearFilter()'
|
||||
)
|
||||
button.btn.btn-secondary((click)='clearFilter()')
|
||||
i.fas.fa-times
|
||||
|
||||
.body(dropZone, (transfer)='uploadOneFolder($event)')
|
||||
a.alert.alert-info.d-flex.align-items-center(
|
||||
*ngIf='shouldShowCWDTip && !cwdDetectionAvailable',
|
||||
@@ -47,13 +64,13 @@
|
||||
div(*ngIf='fileList === null', translate) Loading
|
||||
.list-group.list-group-light(*ngIf='fileList !== null')
|
||||
.list-group-item.list-group-item-action.d-flex.align-items-center(
|
||||
*ngIf='path !== "/"',
|
||||
*ngIf='path !== "/" && (!showFilter || filterText.trim() === "")',
|
||||
(click)='goUp()'
|
||||
)
|
||||
i.fas.fa-fw.fa-level-up-alt
|
||||
div(translate) Go up
|
||||
.list-group-item.list-group-item-action.d-flex.align-items-center(
|
||||
*ngFor='let item of fileList',
|
||||
*ngFor='let item of filteredFileList',
|
||||
(contextmenu)='showContextMenu(item, $event)',
|
||||
(click)='open(item)'
|
||||
)
|
||||
@@ -63,3 +80,6 @@
|
||||
.size(*ngIf='!item.isDirectory') {{item.size|filesize}}
|
||||
.date {{item.modified|tabbyDate}}
|
||||
.mode {{getModeString(item)}}
|
||||
.alert.alert-info.text-center.mt-3(*ngIf='fileList !== null && filteredFileList.length === 0 && showFilter && filterText.trim() !== ""')
|
||||
i.fas.fa-search.me-2
|
||||
span(translate) No files match the filter "{{filterText}}"
|
||||
|
@@ -9,6 +9,10 @@
|
||||
flex: none;
|
||||
}
|
||||
|
||||
> .filter-bar {
|
||||
flex: none;
|
||||
}
|
||||
|
||||
> .body {
|
||||
padding: 10px 20px;
|
||||
flex: 1 1 0;
|
||||
|
@@ -23,11 +23,14 @@ export class SFTPPanelComponent {
|
||||
@Output() closed = new EventEmitter<void>()
|
||||
sftp: SFTPSession
|
||||
fileList: SFTPFile[]|null = null
|
||||
filteredFileList: SFTPFile[] = []
|
||||
@Input() path = '/'
|
||||
@Output() pathChange = new EventEmitter<string>()
|
||||
pathSegments: PathSegment[] = []
|
||||
@Input() cwdDetectionAvailable = false
|
||||
editingPath: string|null = null
|
||||
showFilter = false
|
||||
filterText = ''
|
||||
|
||||
constructor (
|
||||
private ngbModal: NgbModal,
|
||||
@@ -54,6 +57,8 @@ export class SFTPPanelComponent {
|
||||
this.path = newPath
|
||||
this.pathChange.next(this.path)
|
||||
|
||||
this.clearFilter()
|
||||
|
||||
let p = newPath
|
||||
this.pathSegments = []
|
||||
while (p !== '/') {
|
||||
@@ -65,6 +70,7 @@ export class SFTPPanelComponent {
|
||||
}
|
||||
|
||||
this.fileList = null
|
||||
this.filteredFileList = []
|
||||
try {
|
||||
this.fileList = await this.sftp.readdir(this.path)
|
||||
} catch (error) {
|
||||
@@ -79,6 +85,8 @@ export class SFTPPanelComponent {
|
||||
this.fileList.sort((a, b) =>
|
||||
dirKey(b) - dirKey(a) ||
|
||||
a.name.localeCompare(b.name))
|
||||
|
||||
this.updateFilteredList()
|
||||
}
|
||||
|
||||
getFileType (fileExtension: string): string {
|
||||
@@ -336,4 +344,29 @@ export class SFTPPanelComponent {
|
||||
this.closed.emit()
|
||||
}
|
||||
|
||||
clearFilter (): void {
|
||||
this.showFilter = false
|
||||
this.filterText = ''
|
||||
this.updateFilteredList()
|
||||
}
|
||||
|
||||
onFilterChange (): void {
|
||||
this.updateFilteredList()
|
||||
}
|
||||
|
||||
private updateFilteredList (): void {
|
||||
if (!this.fileList) {
|
||||
this.filteredFileList = []
|
||||
return
|
||||
}
|
||||
|
||||
if (!this.showFilter || this.filterText.trim() === '') {
|
||||
this.filteredFileList = this.fileList
|
||||
return
|
||||
}
|
||||
|
||||
this.filteredFileList = this.fileList.filter(item =>
|
||||
item.name.toLowerCase().includes(this.filterText.toLowerCase()),
|
||||
)
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user