mirror of
https://github.com/Eugeny/tabby
synced 2024-12-14 23:32:41 +00:00
47 lines
1 KiB
JavaScript
47 lines
1 KiB
JavaScript
|
module.exports = function patchPTYModule (path) {
|
||
|
const mod = require(path)
|
||
|
const oldSpawn = mod.spawn
|
||
|
mod.spawn = (file, args, opt) => {
|
||
|
let terminal = oldSpawn(file, args, opt)
|
||
|
let timeout = null
|
||
|
let buffer = ''
|
||
|
let lastFlush = 0
|
||
|
let nextTimeout = 0
|
||
|
|
||
|
const maxWindow = 250
|
||
|
const minWindow = 50
|
||
|
|
||
|
function flush () {
|
||
|
if (buffer) {
|
||
|
terminal.emit('data-buffered', buffer)
|
||
|
}
|
||
|
lastFlush = Date.now()
|
||
|
buffer = ''
|
||
|
}
|
||
|
|
||
|
function reschedule () {
|
||
|
if (timeout) {
|
||
|
clearTimeout(timeout)
|
||
|
}
|
||
|
nextTimeout = Date.now() + minWindow
|
||
|
timeout = setTimeout(() => {
|
||
|
timeout = null
|
||
|
flush()
|
||
|
}, minWindow)
|
||
|
}
|
||
|
|
||
|
terminal.on('data', data => {
|
||
|
buffer += data
|
||
|
if (Date.now() - lastFlush > maxWindow) {
|
||
|
flush()
|
||
|
} else {
|
||
|
if (Date.now() > nextTimeout - (minWindow / 10)) {
|
||
|
reschedule()
|
||
|
}
|
||
|
}
|
||
|
})
|
||
|
return terminal
|
||
|
}
|
||
|
return mod
|
||
|
}
|