@@ -20,7 +20,7 @@ export function get (path, args) {
20
20
21
21
export function get_ ( path , args ) {
22
22
const env = customEnv ( )
23
- return getUnix ( path , args , env )
23
+ return getProcess ( path , args , env )
24
24
}
25
25
26
26
export function customEnv ( env = process . env ) {
@@ -43,7 +43,7 @@ export function customEnv (env = process.env) {
43
43
return env
44
44
}
45
45
46
- function getUnix ( path , args , env ) {
46
+ function getProcess ( path , args , env ) {
47
47
return new Promise ( ( resolve , reject ) => {
48
48
tcp . listen ( ) . then ( ( port ) => {
49
49
paths . fullPath ( path ) . then ( ( path ) => {
@@ -54,21 +54,56 @@ function getUnix (path, args, env) {
54
54
rows : 30 ,
55
55
env : env ,
56
56
cwd : cwd ,
57
- useConpty : true
57
+ useConpty : true ,
58
+ handleFlowControl : true
58
59
} )
59
60
60
61
let sock = socket ( ty )
61
62
62
- sock . catch ( ( err ) => reject ( err ) )
63
+ sock . catch ( ( err ) => {
64
+ reject ( err )
65
+ } )
63
66
67
+ // catch errors when interacting with ty, just to be safe (errors might crash Atom)
64
68
let proc = {
65
69
ty : ty ,
66
- kill : ( ) => ty . kill ( ) ,
67
- interrupt : ( ) => ty . write ( '\x03' ) ,
70
+ kill : ( ) => {
71
+ // only kill pty if it's still alive:
72
+ if ( ty . _readable || ty . _writable ) {
73
+ try {
74
+ ty . kill ( )
75
+ } catch ( err ) {
76
+ console . log ( 'Terminal:' )
77
+ console . log ( err ) ;
78
+ }
79
+ }
80
+ } ,
81
+ interrupt : ( ) => {
82
+ try {
83
+ ty . write ( '\x03' )
84
+ } catch ( err ) {
85
+ console . log ( 'Terminal:' )
86
+ console . log ( err ) ;
87
+ }
88
+ } ,
68
89
socket : sock ,
69
- onExit : ( f ) => ty . on ( 'exit' , f ) ,
90
+ onExit : ( f ) => {
91
+ try {
92
+ ty . on ( 'exit' , f )
93
+ } catch ( err ) {
94
+ console . log ( 'Terminal:' )
95
+ console . log ( err ) ;
96
+ }
97
+ } ,
70
98
onStderr : ( f ) => { } ,
71
- onStdout : ( f ) => ty . on ( 'data' , f )
99
+ onStdout : ( f ) => {
100
+ try {
101
+ ty . on ( 'data' , f )
102
+ } catch ( err ) {
103
+ console . log ( 'Terminal:' )
104
+ console . log ( err ) ;
105
+ }
106
+ }
72
107
}
73
108
74
109
resolve ( proc )
@@ -84,17 +119,6 @@ function getUnix (path, args, env) {
84
119
} )
85
120
}
86
121
87
- function freePort ( ) {
88
- return new Promise ( ( resolve ) => {
89
- let server = net . createServer ( )
90
- server . listen ( 0 , '127.0.0.1' , ( ) => {
91
- let port = server . address ( ) . port
92
- server . close ( )
93
- resolve ( port )
94
- } )
95
- } )
96
- }
97
-
98
122
function socket ( ty ) {
99
123
conn = tcp . next ( )
100
124
failure = new Promise ( ( resolve , reject ) => {
0 commit comments