mirror of
https://github.com/quine-global/hyper.git
synced 2026-01-12 20:18:41 -09:00
* `child_pty` => `pty.js` * Create a frameless window on Windows and Linux * Add a brand new UI for Linux and Windows 💅 * [Windows] Fix plugin installation * [Windows] Fix the `build` script * [Windows] Add a bigger `icon.ico` * [Mac] Add `WebKitAppRegion: drag` when running on macOS * Fix code style 🤔 * Add `appveyor.yml` * Fix code style (again) * [Windows] Fix AppVeyor's `install` script * [Windows] Try a new AppVeyor config * [Windows] Set the binary path so Spectron can run the tests * [Windows] Try to build on x64 * Try again to build on x64 * Try one more time 😩 * Throw an error to indicate that `pty.js` was built incorrectly * [Win/Linux] Add `display: hidden` to <Tabs /> if tabs.length === 1 * [Win/Linux] Reorganize SVGs – via @CodeTheory * [Win/Linux] Fix the hamburger menu height * Make the SVGs look better with `shape-rendering: crispEdges;` * [Win/Linux] Add config options for the window controls and the 🍔 menu * Add `electron-squirrel-startup` dependency * [Win] Handle Squirrel commands * [Win/Linux] Fix default color for the 🍔 and window controls – via @CodeTheory * [Win/Linux] Add some padding - via @CodeTheory * [Win/Linux] Add hover states – via @CodeTheory * [Win] Fix empty window/tab titles * [Win] Fix opening Preferences (#978) * [Win] Fix opening Preferences * Update ui.js * Update ui.js * Enhance messages and default editor * [Win] Add dependency instructions to the README.md [skip ci] * Fix code style * [Win/Linux] Check the number of open windows before quitting the app
95 lines
2.1 KiB
JavaScript
95 lines
2.1 KiB
JavaScript
const {EventEmitter} = require('events');
|
|
const {StringDecoder} = require('string_decoder');
|
|
|
|
const {app} = require('electron');
|
|
const defaultShell = require('default-shell');
|
|
|
|
const {getDecoratedEnv} = require('./plugins');
|
|
const {productName, version} = require('./package');
|
|
const config = require('./config');
|
|
|
|
const createPtyJsError = () => new Error('`pty.js` failed to load. Typically this means that it was built incorrectly. Please check the `README.me` to more info.');
|
|
|
|
let spawn;
|
|
try {
|
|
spawn = require('pty.js').spawn;
|
|
} catch (err) {
|
|
throw createPtyJsError();
|
|
}
|
|
|
|
const envFromConfig = config.getConfig().env || {};
|
|
|
|
module.exports = class Session extends EventEmitter {
|
|
|
|
constructor({rows, cols: columns, cwd, shell, shellArgs}) {
|
|
super();
|
|
const baseEnv = Object.assign({}, process.env, {
|
|
LANG: app.getLocale().replace('-', '_') + '.UTF-8',
|
|
TERM: 'xterm-256color',
|
|
TERM_PROGRAM: productName,
|
|
TERM_PROGRAM_VERSION: version
|
|
}, envFromConfig);
|
|
|
|
const decoder = new StringDecoder('utf8');
|
|
|
|
const defaultShellArgs = ['--login'];
|
|
|
|
try {
|
|
this.pty = spawn(shell || defaultShell, shellArgs || defaultShellArgs, {
|
|
columns,
|
|
rows,
|
|
cwd,
|
|
env: getDecoratedEnv(baseEnv)
|
|
});
|
|
} catch (err) {
|
|
if (/is not a function/.test(err.message)) {
|
|
throw createPtyJsError();
|
|
} else {
|
|
throw err;
|
|
}
|
|
}
|
|
|
|
this.pty.stdout.on('data', data => {
|
|
if (this.ended) {
|
|
return;
|
|
}
|
|
this.emit('data', decoder.write(data));
|
|
});
|
|
|
|
this.pty.on('exit', () => {
|
|
if (!this.ended) {
|
|
this.ended = true;
|
|
this.emit('exit');
|
|
}
|
|
});
|
|
|
|
this.shell = shell || defaultShell;
|
|
}
|
|
|
|
exit() {
|
|
this.destroy();
|
|
}
|
|
|
|
write(data) {
|
|
this.pty.stdin.write(data);
|
|
}
|
|
|
|
resize({cols, rows}) {
|
|
try {
|
|
this.pty.stdout.resize(cols, rows);
|
|
} catch (err) {
|
|
console.error(err.stack);
|
|
}
|
|
}
|
|
|
|
destroy() {
|
|
try {
|
|
this.pty.kill();
|
|
} catch (err) {
|
|
console.error('exit error', err.stack);
|
|
}
|
|
this.emit('exit');
|
|
this.ended = true;
|
|
}
|
|
|
|
};
|