mirror of
https://github.com/Eugeny/tabby
synced 2024-11-15 01:17:14 +00:00
50 lines
1.1 KiB
JavaScript
50 lines
1.1 KiB
JavaScript
module.exports = function patchPTYModule (path) {
|
|
const mod = require(path)
|
|
const oldSpawn = mod.spawn
|
|
if (mod.patched) {
|
|
return mod
|
|
}
|
|
mod.patched = true
|
|
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
|
|
}
|