TerminalView.st
author Claus Gittinger <cg@exept.de>
Thu, 11 Jun 1998 19:11:45 +0200
changeset 940 16c955286510
parent 938 3e65cc6f22cd
child 942 1f4fa3a6faec
permissions -rw-r--r--
checkin from browser
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
914
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     1
TextCollector subclass:#TerminalView
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     2
	instanceVariableNames:'inStream outStream readerProcess shellPid kbdSequences
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     3
		escapeSequenceTree currentSequence currentTree kbdMap
926
df8d2a821687 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 925
diff changeset
     4
		escapeLeadingChars numberOfColumns numberOfLines'
914
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     5
	classVariableNames:''
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     6
	poolDictionaries:''
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     7
	category:'Views-TerminalViews'
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     8
!
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     9
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    10
!TerminalView class methodsFor:'documentation'!
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    11
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    12
documentation
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    13
"
916
d9626e722c21 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 915
diff changeset
    14
    I provide terminal functionality, by forking a command interpreter
d9626e722c21 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 915
diff changeset
    15
    and comunicating with it via a pty.
d9626e722c21 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 915
diff changeset
    16
    I am abstract - concrete terminal characteristics are defined
d9626e722c21 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 915
diff changeset
    17
    by concrete subclasses (see VT52TerminalView).
914
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    18
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    19
    [author:]
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    20
        Claus Gittinger
915
f2c934efc4da checkin from browser
Claus Gittinger <cg@exept.de>
parents: 914
diff changeset
    21
f2c934efc4da checkin from browser
Claus Gittinger <cg@exept.de>
parents: 914
diff changeset
    22
    [start with:]
f2c934efc4da checkin from browser
Claus Gittinger <cg@exept.de>
parents: 914
diff changeset
    23
        VT52TerminalView openShell
919
07e8c17563a2 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 918
diff changeset
    24
        VT100TerminalView openShell
914
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    25
"
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    26
! !
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    27
929
30a2a3329055 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 928
diff changeset
    28
!TerminalView class methodsFor:'queries'!
30a2a3329055 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 928
diff changeset
    29
30a2a3329055 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 928
diff changeset
    30
isVisualStartable
30a2a3329055 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 928
diff changeset
    31
    "returns whether this application class can be started via #open"
30a2a3329055 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 928
diff changeset
    32
30a2a3329055 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 928
diff changeset
    33
    self == TerminalView ifTrue:[^ false].
30a2a3329055 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 928
diff changeset
    34
    ^ true
30a2a3329055 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 928
diff changeset
    35
30a2a3329055 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 928
diff changeset
    36
    "Created: / 10.6.1998 / 15:48:43 / cg"
30a2a3329055 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 928
diff changeset
    37
! !
30a2a3329055 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 928
diff changeset
    38
914
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    39
!TerminalView class methodsFor:'testing'!
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    40
928
f9a117cb2bcc checkin from browser
Claus Gittinger <cg@exept.de>
parents: 926
diff changeset
    41
open
f9a117cb2bcc checkin from browser
Claus Gittinger <cg@exept.de>
parents: 926
diff changeset
    42
    self openShell
f9a117cb2bcc checkin from browser
Claus Gittinger <cg@exept.de>
parents: 926
diff changeset
    43
f9a117cb2bcc checkin from browser
Claus Gittinger <cg@exept.de>
parents: 926
diff changeset
    44
    "
f9a117cb2bcc checkin from browser
Claus Gittinger <cg@exept.de>
parents: 926
diff changeset
    45
     VT100TerminalView open
f9a117cb2bcc checkin from browser
Claus Gittinger <cg@exept.de>
parents: 926
diff changeset
    46
    "
f9a117cb2bcc checkin from browser
Claus Gittinger <cg@exept.de>
parents: 926
diff changeset
    47
f9a117cb2bcc checkin from browser
Claus Gittinger <cg@exept.de>
parents: 926
diff changeset
    48
    "Modified: / 10.6.1998 / 15:06:35 / cg"
f9a117cb2bcc checkin from browser
Claus Gittinger <cg@exept.de>
parents: 926
diff changeset
    49
    "Created: / 10.6.1998 / 15:47:25 / cg"
f9a117cb2bcc checkin from browser
Claus Gittinger <cg@exept.de>
parents: 926
diff changeset
    50
!
f9a117cb2bcc checkin from browser
Claus Gittinger <cg@exept.de>
parents: 926
diff changeset
    51
914
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    52
openDummy
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    53
    |in vt52|
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    54
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    55
    vt52 := self new.
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    56
    in := ForwardingStream on:''.
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    57
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    58
    in fwdStream:vt52.
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    59
    vt52 inStream:in.
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    60
    vt52 outStream:in.
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    61
    vt52 open
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    62
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    63
    "
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    64
     self openDummy
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    65
    "
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    66
!
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    67
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    68
openShell
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    69
    |in top scr vt52|
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    70
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    71
    top := StandardSystemView new.
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    72
    scr := HVScrollableView for:self in:top.
917
f9dd2e4b9bce checkin from browser
Claus Gittinger <cg@exept.de>
parents: 916
diff changeset
    73
    scr autoHideHorizontalScrollBar:true.
933
de456e07697e much better asynchronous display
Claus Gittinger <cg@exept.de>
parents: 931
diff changeset
    74
    scr horizontalMini:true.
914
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    75
    scr origin:0.0@0.0 corner:1.0@1.0.
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    76
    vt52 := scr scrolledView.
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    77
940
16c955286510 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 938
diff changeset
    78
    top extent:(scr preferredExtent).
16c955286510 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 938
diff changeset
    79
    top label:'shell'.
16c955286510 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 938
diff changeset
    80
    top openAndWait.
16c955286510 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 938
diff changeset
    81
914
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    82
    vt52 startShell.
917
f9dd2e4b9bce checkin from browser
Claus Gittinger <cg@exept.de>
parents: 916
diff changeset
    83
914
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    84
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    85
    "
933
de456e07697e much better asynchronous display
Claus Gittinger <cg@exept.de>
parents: 931
diff changeset
    86
     VT100TerminalView openShell
914
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    87
    "
923
eb082b0aa595 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 922
diff changeset
    88
940
16c955286510 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 938
diff changeset
    89
    "Modified: / 11.6.1998 / 18:11:19 / cg"
914
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    90
! !
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    91
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    92
!TerminalView methodsFor:'accessing'!
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    93
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    94
inStream
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    95
    "return the value of the instance variable 'inStream' (automatically generated)"
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    96
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    97
    ^ inStream!
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    98
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    99
inStream:something
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   100
    "set the value of the instance variable 'inStream' (automatically generated)"
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   101
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   102
    inStream := something.!
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   103
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   104
outStream
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   105
    "return the value of the instance variable 'outStream' (automatically generated)"
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   106
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   107
    ^ outStream!
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   108
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   109
outStream:something
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   110
    "set the value of the instance variable 'outStream' (automatically generated)"
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   111
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   112
    outStream := something.! !
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   113
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   114
!TerminalView methodsFor:'cursor handling'!
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   115
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   116
cursorCol:col
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   117
    "check of col is a valid cursor position; return a new col-nr if not.
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   118
     Here, the linelength is enforced"
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   119
926
df8d2a821687 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 925
diff changeset
   120
    ^ super cursorCol:(col min:numberOfColumns)
914
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   121
926
df8d2a821687 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 925
diff changeset
   122
    "Modified: / 10.6.1998 / 15:09:34 / cg"
914
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   123
!
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   124
933
de456e07697e much better asynchronous display
Claus Gittinger <cg@exept.de>
parents: 931
diff changeset
   125
cursorDown:n
de456e07697e much better asynchronous display
Claus Gittinger <cg@exept.de>
parents: 931
diff changeset
   126
    cursorLine + n > list size ifTrue:[
de456e07697e much better asynchronous display
Claus Gittinger <cg@exept.de>
parents: 931
diff changeset
   127
        list := list , (Array new:n).
de456e07697e much better asynchronous display
Claus Gittinger <cg@exept.de>
parents: 931
diff changeset
   128
        self textChanged.
de456e07697e much better asynchronous display
Claus Gittinger <cg@exept.de>
parents: 931
diff changeset
   129
    ].
de456e07697e much better asynchronous display
Claus Gittinger <cg@exept.de>
parents: 931
diff changeset
   130
    super cursorDown:n
de456e07697e much better asynchronous display
Claus Gittinger <cg@exept.de>
parents: 931
diff changeset
   131
de456e07697e much better asynchronous display
Claus Gittinger <cg@exept.de>
parents: 931
diff changeset
   132
    "Modified: / 10.6.1998 / 17:18:41 / cg"
de456e07697e much better asynchronous display
Claus Gittinger <cg@exept.de>
parents: 931
diff changeset
   133
    "Created: / 10.6.1998 / 17:18:50 / cg"
de456e07697e much better asynchronous display
Claus Gittinger <cg@exept.de>
parents: 931
diff changeset
   134
!
de456e07697e much better asynchronous display
Claus Gittinger <cg@exept.de>
parents: 931
diff changeset
   135
914
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   136
cursorLine:l col:col
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   137
    "check of col is a valid cursor position; return a new col-nr if not.
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   138
     Here, the linelength is enforced"
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   139
926
df8d2a821687 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 925
diff changeset
   140
    ^ super cursorLine:l col:(col min:numberOfColumns)
914
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   141
926
df8d2a821687 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 925
diff changeset
   142
    "Modified: / 10.6.1998 / 15:09:38 / cg"
914
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   143
!
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   144
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   145
validateCursorCol:col inLine:line
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   146
    "check of col is a valid cursor position; return a new col-nr if not.
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   147
     Here, the linelength is enforced"
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   148
926
df8d2a821687 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 925
diff changeset
   149
    ^ col min:numberOfColumns
914
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   150
926
df8d2a821687 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 925
diff changeset
   151
    "Modified: / 10.6.1998 / 15:09:41 / cg"
914
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   152
! !
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   153
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   154
!TerminalView methodsFor:'event handling'!
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   155
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   156
keyPress:aKey x:x y:y
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   157
    |rest rawKey seq|
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   158
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   159
    inStream isNil ifTrue:[^ self].
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   160
931
3dfdf1f7bd5d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 929
diff changeset
   161
"/ Transcript showCR:'----'; show:'key:' ; showCR:aKey printString.
914
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   162
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   163
    aKey isCharacter ifTrue:[
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   164
        "/ send it down to inStream ...
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   165
        inStream nextPut:aKey.
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   166
        ^ self
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   167
    ].
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   168
921
63044deaf3d7 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 919
diff changeset
   169
    aKey == #Tab ifTrue:[
931
3dfdf1f7bd5d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 929
diff changeset
   170
"/ Transcript show:'->' ; showCR:Character tab storeString.
921
63044deaf3d7 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 919
diff changeset
   171
        inStream nextPut:Character tab.
63044deaf3d7 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 919
diff changeset
   172
        ^ self
63044deaf3d7 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 919
diff changeset
   173
    ].
63044deaf3d7 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 919
diff changeset
   174
914
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   175
    seq := kbdSequences at:aKey ifAbsent:nil.
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   176
    seq notNil ifTrue:[
931
3dfdf1f7bd5d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 929
diff changeset
   177
"/ Transcript show:'->' ; showCR:seq storeString.
914
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   178
        inStream nextPutAll:(seq withEscapes).
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   179
        ^ self
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   180
    ].
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   181
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   182
    rawKey := device keyboardMap keyAtValue:aKey ifAbsent:aKey.
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   183
    seq := kbdSequences at:rawKey ifAbsent:nil.
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   184
    seq notNil ifTrue:[
931
3dfdf1f7bd5d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 929
diff changeset
   185
"/ Transcript show:'->' ; showCR:seq storeString.
914
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   186
        inStream nextPutAll:(seq withEscapes).
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   187
        ^ self
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   188
    ].
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   189
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   190
    (rawKey startsWith:'Ctrl') ifTrue:[
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   191
        rest := rawKey copyFrom:5.
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   192
        rest size == 1 ifTrue:[
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   193
            rest := rest at:1.
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   194
            (rest >= $a and:[rest <= $z]) ifTrue:[
931
3dfdf1f7bd5d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 929
diff changeset
   195
"/ Transcript show:'->' ; showCR:(Character value:(rest - $a + 1)) storeString.
914
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   196
                inStream nextPut:(Character value:(rest - $a + 1)).
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   197
                ^ self
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   198
            ].
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   199
            (rest >= $A and:[rest <= $Z]) ifTrue:[
931
3dfdf1f7bd5d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 929
diff changeset
   200
"/ Transcript show:'->' ; showCR:(Character value:(rest - $a + 1)) storeString.
914
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   201
                inStream nextPut:(Character value:(rest - $A + 1)).
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   202
                ^ self
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   203
            ].
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   204
        ]
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   205
    ].
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   206
934
b450dbaeedac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 933
diff changeset
   207
    (rawKey startsWith:'Control') ifTrue:[
b450dbaeedac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 933
diff changeset
   208
        ^ self
b450dbaeedac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 933
diff changeset
   209
    ].
b450dbaeedac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 933
diff changeset
   210
    (rawKey startsWith:'Shift') ifTrue:[
b450dbaeedac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 933
diff changeset
   211
        ^ self
b450dbaeedac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 933
diff changeset
   212
    ].
b450dbaeedac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 933
diff changeset
   213
    (rawKey startsWith:'Alt') ifTrue:[
b450dbaeedac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 933
diff changeset
   214
        ^ self
b450dbaeedac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 933
diff changeset
   215
    ].
b450dbaeedac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 933
diff changeset
   216
    (rawKey startsWith:'Cmd') ifTrue:[
b450dbaeedac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 933
diff changeset
   217
        ^ self
b450dbaeedac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 933
diff changeset
   218
    ].
b450dbaeedac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 933
diff changeset
   219
b450dbaeedac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 933
diff changeset
   220
    Transcript show:'unhandled: '; showCR:rawKey.
914
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   221
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   222
"/    super keyPress:aKey x:x y:y
921
63044deaf3d7 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 919
diff changeset
   223
934
b450dbaeedac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 933
diff changeset
   224
    "Modified: / 10.6.1998 / 17:51:21 / cg"
914
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   225
!
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   226
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   227
shellTerminated
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   228
    self warn:'shell terminated'.
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   229
    self closeDownShell.
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   230
! !
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   231
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   232
!TerminalView methodsFor:'functions'!
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   233
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   234
doBackspace
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   235
    self cursorLeft.
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   236
    self replaceCharAtCursor:(Character space).
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   237
    self cursorLeft.
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   238
931
3dfdf1f7bd5d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 929
diff changeset
   239
    "Modified: / 10.6.1998 / 17:09:12 / cg"
914
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   240
!
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   241
926
df8d2a821687 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 925
diff changeset
   242
doClearDisplay
df8d2a821687 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 925
diff changeset
   243
    firstLineShown to:(list size) do:[:l |
df8d2a821687 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 925
diff changeset
   244
        self at:l put:''
df8d2a821687 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 925
diff changeset
   245
    ].
922
c8373b8c7986 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 921
diff changeset
   246
926
df8d2a821687 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 925
diff changeset
   247
    "Created: / 10.6.1998 / 14:43:06 / cg"
df8d2a821687 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 925
diff changeset
   248
    "Modified: / 10.6.1998 / 14:58:07 / cg"
df8d2a821687 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 925
diff changeset
   249
!
df8d2a821687 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 925
diff changeset
   250
df8d2a821687 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 925
diff changeset
   251
doClearToEnd
df8d2a821687 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 925
diff changeset
   252
    self doClearToEndOfLine.
922
c8373b8c7986 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 921
diff changeset
   253
    cursorLine+1 to:(list size) do:[:l |
c8373b8c7986 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 921
diff changeset
   254
        self at:l put:''
c8373b8c7986 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 921
diff changeset
   255
    ].
c8373b8c7986 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 921
diff changeset
   256
926
df8d2a821687 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 925
diff changeset
   257
    "Modified: / 10.6.1998 / 14:45:43 / cg"
df8d2a821687 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 925
diff changeset
   258
!
df8d2a821687 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 925
diff changeset
   259
df8d2a821687 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 925
diff changeset
   260
doClearToEndOfLine
df8d2a821687 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 925
diff changeset
   261
    |l|
df8d2a821687 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 925
diff changeset
   262
df8d2a821687 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 925
diff changeset
   263
    l := self listAt:cursorLine.
931
3dfdf1f7bd5d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 929
diff changeset
   264
    (l size >= (cursorCol-1)) ifTrue:[
926
df8d2a821687 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 925
diff changeset
   265
        l := l copyTo:cursorCol-1.
df8d2a821687 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 925
diff changeset
   266
        self at:cursorLine put:l.
df8d2a821687 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 925
diff changeset
   267
    ]
df8d2a821687 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 925
diff changeset
   268
df8d2a821687 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 925
diff changeset
   269
    "Created: / 10.6.1998 / 14:45:01 / cg"
931
3dfdf1f7bd5d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 929
diff changeset
   270
    "Modified: / 10.6.1998 / 17:08:23 / cg"
922
c8373b8c7986 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 921
diff changeset
   271
!
c8373b8c7986 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 921
diff changeset
   272
914
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   273
doCursorDown
931
3dfdf1f7bd5d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 929
diff changeset
   274
    super cursorDown:1
3dfdf1f7bd5d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 929
diff changeset
   275
3dfdf1f7bd5d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 929
diff changeset
   276
    "Modified: / 10.6.1998 / 16:55:17 / cg"
914
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   277
!
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   278
926
df8d2a821687 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 925
diff changeset
   279
doCursorDown:n
931
3dfdf1f7bd5d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 929
diff changeset
   280
    super cursorDown:n
926
df8d2a821687 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 925
diff changeset
   281
df8d2a821687 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 925
diff changeset
   282
    "Created: / 10.6.1998 / 15:15:05 / cg"
931
3dfdf1f7bd5d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 929
diff changeset
   283
    "Modified: / 10.6.1998 / 16:55:25 / cg"
926
df8d2a821687 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 925
diff changeset
   284
!
df8d2a821687 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 925
diff changeset
   285
914
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   286
doCursorHome
938
3e65cc6f22cd checkin from browser
Claus Gittinger <cg@exept.de>
parents: 936
diff changeset
   287
    self cursorVisibleLine:1 col:1
3e65cc6f22cd checkin from browser
Claus Gittinger <cg@exept.de>
parents: 936
diff changeset
   288
    "/ super cursorHome
3e65cc6f22cd checkin from browser
Claus Gittinger <cg@exept.de>
parents: 936
diff changeset
   289
3e65cc6f22cd checkin from browser
Claus Gittinger <cg@exept.de>
parents: 936
diff changeset
   290
    "Modified: / 10.6.1998 / 20:47:31 / cg"
914
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   291
!
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   292
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   293
doCursorLeft
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   294
    super cursorLeft
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   295
!
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   296
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   297
doCursorNewLine
931
3dfdf1f7bd5d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 929
diff changeset
   298
    super cursorDown:1
3dfdf1f7bd5d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 929
diff changeset
   299
3dfdf1f7bd5d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 929
diff changeset
   300
    "Modified: / 10.6.1998 / 16:55:57 / cg"
914
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   301
!
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   302
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   303
doCursorReturn
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   304
    super cursorToBeginOfLine
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   305
!
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   306
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   307
doCursorRight
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   308
    super cursorRight
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   309
!
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   310
926
df8d2a821687 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 925
diff changeset
   311
doCursorRight:n
df8d2a821687 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 925
diff changeset
   312
    self cursorCol:(cursorCol + n)
df8d2a821687 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 925
diff changeset
   313
df8d2a821687 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 925
diff changeset
   314
    "Created: / 10.6.1998 / 15:10:08 / cg"
df8d2a821687 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 925
diff changeset
   315
!
df8d2a821687 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 925
diff changeset
   316
914
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   317
doCursorUp
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   318
    super cursorUp
926
df8d2a821687 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 925
diff changeset
   319
!
df8d2a821687 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 925
diff changeset
   320
df8d2a821687 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 925
diff changeset
   321
doSendInterrupt
df8d2a821687 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 925
diff changeset
   322
    OperatingSystem sendSignal:(OperatingSystem sigINT) to:shellPid negated.
df8d2a821687 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 925
diff changeset
   323
934
b450dbaeedac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 933
diff changeset
   324
    "Modified: / 10.6.1998 / 17:49:49 / cg"
914
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   325
! !
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   326
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   327
!TerminalView methodsFor:'initialization'!
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   328
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   329
closeDownShell
926
df8d2a821687 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 925
diff changeset
   330
    |pid|
df8d2a821687 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 925
diff changeset
   331
df8d2a821687 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 925
diff changeset
   332
    (pid := shellPid) notNil ifTrue:[
934
b450dbaeedac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 933
diff changeset
   333
"/        Transcript print:'killing shell pid='; showCR:pid.
b450dbaeedac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 933
diff changeset
   334
926
df8d2a821687 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 925
diff changeset
   335
        OperatingSystem terminateProcessGroup:pid.
df8d2a821687 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 925
diff changeset
   336
        OperatingSystem terminateProcess:pid.
925
f9ef1268a21b kill after termination.
Claus Gittinger <cg@exept.de>
parents: 924
diff changeset
   337
        Delay waitForSeconds:1.
f9ef1268a21b kill after termination.
Claus Gittinger <cg@exept.de>
parents: 924
diff changeset
   338
        shellPid notNil ifTrue:[
926
df8d2a821687 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 925
diff changeset
   339
            OperatingSystem killProcessGroup:pid.
df8d2a821687 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 925
diff changeset
   340
            OperatingSystem killProcess:pid.
925
f9ef1268a21b kill after termination.
Claus Gittinger <cg@exept.de>
parents: 924
diff changeset
   341
            shellPid := nil.
f9ef1268a21b kill after termination.
Claus Gittinger <cg@exept.de>
parents: 924
diff changeset
   342
        ].
926
df8d2a821687 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 925
diff changeset
   343
        OperatingSystem closePid:pid.
914
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   344
    ].
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   345
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   346
    readerProcess notNil ifTrue:[
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   347
        readerProcess terminate.
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   348
        readerProcess := nil
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   349
    ].
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   350
    inStream notNil ifTrue:[
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   351
        inStream close.
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   352
        inStream := nil
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   353
    ].
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   354
    outStream notNil ifTrue:[
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   355
        outStream close.
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   356
        outStream := nil
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   357
    ].
924
c1d2e1fecd79 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 923
diff changeset
   358
934
b450dbaeedac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 933
diff changeset
   359
    "Modified: / 10.6.1998 / 17:53:49 / cg"
914
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   360
!
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   361
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   362
destroy
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   363
    self closeDownShell.
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   364
    super destroy
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   365
!
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   366
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   367
escapeSequences:codes
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   368
    |tree|
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   369
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   370
    tree isNil ifTrue:[tree := escapeSequenceTree := IdentityDictionary new].
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   371
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   372
    codes do:[:specEntry |
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   373
        |sequence function|
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   374
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   375
        sequence := (specEntry at:1) withEscapes.
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   376
        function := specEntry at:2.
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   377
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   378
        tree := escapeSequenceTree.
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   379
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   380
        sequence keysAndValuesDo:[:idx :char |
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   381
            |followup|
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   382
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   383
            idx == sequence size ifTrue:[
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   384
                tree at:char put:function
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   385
            ] ifFalse:[
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   386
                followup := tree at:char ifAbsent:nil.
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   387
                followup isNil ifTrue:[
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   388
                    tree at:char put:(followup := IdentityDictionary new).
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   389
                ].
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   390
                tree := followup
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   391
            ]
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   392
        ]
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   393
    ].
918
2d6a4c91c4bd checkin from browser
Claus Gittinger <cg@exept.de>
parents: 917
diff changeset
   394
    escapeLeadingChars := escapeSequenceTree keys asSet.
2d6a4c91c4bd checkin from browser
Claus Gittinger <cg@exept.de>
parents: 917
diff changeset
   395
    escapeLeadingChars add:(Character cr).
2d6a4c91c4bd checkin from browser
Claus Gittinger <cg@exept.de>
parents: 917
diff changeset
   396
    escapeLeadingChars add:(Character return).
2d6a4c91c4bd checkin from browser
Claus Gittinger <cg@exept.de>
parents: 917
diff changeset
   397
    escapeLeadingChars add:(Character backspace).
2d6a4c91c4bd checkin from browser
Claus Gittinger <cg@exept.de>
parents: 917
diff changeset
   398
2d6a4c91c4bd checkin from browser
Claus Gittinger <cg@exept.de>
parents: 917
diff changeset
   399
    escapeLeadingChars := escapeLeadingChars asArray
2d6a4c91c4bd checkin from browser
Claus Gittinger <cg@exept.de>
parents: 917
diff changeset
   400
2d6a4c91c4bd checkin from browser
Claus Gittinger <cg@exept.de>
parents: 917
diff changeset
   401
    "Modified: / 9.6.1998 / 19:43:12 / cg"
914
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   402
!
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   403
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   404
initialize
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   405
    super initialize.
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   406
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   407
    showMatchingParenthesis := false.
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   408
    insertMode := false.
936
d377fb0f726f checkin from browser
Claus Gittinger <cg@exept.de>
parents: 935
diff changeset
   409
    alwaysAppendAtEnd := false.
914
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   410
926
df8d2a821687 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 925
diff changeset
   411
    numberOfColumns := 80.
df8d2a821687 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 925
diff changeset
   412
    numberOfLines := 25.
df8d2a821687 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 925
diff changeset
   413
914
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   414
    self initializeEscapeSequences.
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   415
    self initializeKeyboardSequences.
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   416
    list := OrderedCollection new:24 withAll:''.
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   417
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   418
    self initializeKeyboardMap.
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   419
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   420
    "
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   421
     VT52TerminalView openShell
926
df8d2a821687 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 925
diff changeset
   422
     VT100TerminalView openShell
914
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   423
    "
926
df8d2a821687 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 925
diff changeset
   424
936
d377fb0f726f checkin from browser
Claus Gittinger <cg@exept.de>
parents: 935
diff changeset
   425
    "Modified: / 10.6.1998 / 19:21:57 / cg"
914
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   426
!
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   427
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   428
initializeEscapeSequences
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   429
    self subclassResponsibility.
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   430
!
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   431
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   432
initializeKeyboardMap
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   433
    |ctrlKeys cmdKeys|
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   434
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   435
    "/ setup my own keyboardMap, where control-keys are
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   436
    "/ not translated.
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   437
    kbdMap := device keyboardMap copy.
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   438
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   439
    ctrlKeys := kbdMap keys select:[:key | key startsWith:'Ctrl'].
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   440
    ctrlKeys do:[:key | kbdMap removeKey:key].
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   441
    cmdKeys := kbdMap keys select:[:key | key startsWith:'Cmd'].
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   442
    cmdKeys do:[:key | kbdMap removeKey:key].
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   443
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   444
    kbdMap removeKey:#Delete ifAbsent:[].
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   445
    kbdMap removeKey:#BackSpace ifAbsent:[].
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   446
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   447
    "
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   448
     VT52TerminalView openShell
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   449
    "
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   450
!
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   451
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   452
initializeKeyboardSequences
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   453
    self subclassResponsibility.
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   454
!
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   455
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   456
keyboardMap
934
b450dbaeedac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 933
diff changeset
   457
    "return my keyboard map. This has control keys removed and
b450dbaeedac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 933
diff changeset
   458
     those will be passed unchanged to the shell"
b450dbaeedac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 933
diff changeset
   459
914
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   460
    ^ kbdMap
934
b450dbaeedac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 933
diff changeset
   461
b450dbaeedac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 933
diff changeset
   462
    "Modified: / 10.6.1998 / 17:46:59 / cg"
914
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   463
!
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   464
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   465
startReaderProcess
934
b450dbaeedac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 933
diff changeset
   466
    "Start a reader process, which looks for the commands output,
b450dbaeedac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 933
diff changeset
   467
     and sends me #peocessInput:n: events whenever something arrives."
b450dbaeedac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 933
diff changeset
   468
914
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   469
    readerProcess isNil ifTrue:[
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   470
        readerProcess := [
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   471
            [
926
df8d2a821687 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 925
diff changeset
   472
                |buffer n reading|
df8d2a821687 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 925
diff changeset
   473
df8d2a821687 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 925
diff changeset
   474
                reading := true.
940
16c955286510 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 938
diff changeset
   475
                Stream streamErrorSignal handle:[:ex |
16c955286510 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 938
diff changeset
   476
                    Transcript showCR:ex errorString.
16c955286510 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 938
diff changeset
   477
                    Transcript showCR:OperatingSystem lastErrorString.
16c955286510 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 938
diff changeset
   478
                ] do:[
926
df8d2a821687 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 925
diff changeset
   479
                    [true] whileTrue:[
df8d2a821687 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 925
diff changeset
   480
                        Object abortSignal handle:[:ex |
df8d2a821687 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 925
diff changeset
   481
                            self showCursor.
df8d2a821687 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 925
diff changeset
   482
                        ] do:[
df8d2a821687 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 925
diff changeset
   483
                            outStream readWait.
933
de456e07697e much better asynchronous display
Claus Gittinger <cg@exept.de>
parents: 931
diff changeset
   484
                            buffer := String new:1024.
926
df8d2a821687 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 925
diff changeset
   485
                            n := outStream nextAvailableBytes:1024 into:buffer startingAt:1.
914
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   486
926
df8d2a821687 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 925
diff changeset
   487
                            n > 0 ifTrue:[
933
de456e07697e much better asynchronous display
Claus Gittinger <cg@exept.de>
parents: 931
diff changeset
   488
                                self pushEvent:#processInput:n: with:buffer with:n.
926
df8d2a821687 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 925
diff changeset
   489
                            ] ifFalse:[
df8d2a821687 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 925
diff changeset
   490
                                n == 0 ifTrue:[
df8d2a821687 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 925
diff changeset
   491
                                    outStream atEnd ifTrue:[
df8d2a821687 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 925
diff changeset
   492
                                        outStream close. outStream := nil.
df8d2a821687 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 925
diff changeset
   493
                                        inStream close.  inStream := nil.
df8d2a821687 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 925
diff changeset
   494
                                        
df8d2a821687 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 925
diff changeset
   495
                                        Processor activeProcess terminate.
df8d2a821687 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 925
diff changeset
   496
                                    ]
df8d2a821687 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 925
diff changeset
   497
                                ]
914
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   498
                            ]
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   499
                        ]
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   500
                    ]
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   501
                ]
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   502
            ] valueOnUnwindDo:[
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   503
                readerProcess := nil    
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   504
            ]
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   505
        ] fork.
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   506
    ]
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   507
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   508
    "
934
b450dbaeedac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 933
diff changeset
   509
     VT100TerminalView openShell
914
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   510
    "
926
df8d2a821687 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 925
diff changeset
   511
940
16c955286510 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 938
diff changeset
   512
    "Modified: / 11.6.1998 / 18:10:33 / cg"
914
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   513
!
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   514
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   515
startShell
934
b450dbaeedac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 933
diff changeset
   516
    "start a shell on a pseudo terminal.
b450dbaeedac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 933
diff changeset
   517
     Also fork a reader process, to read the shells output and
b450dbaeedac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 933
diff changeset
   518
     pass it back to me."
b450dbaeedac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 933
diff changeset
   519
914
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   520
    |p slaveFD execFdArray blocked exitStatus|
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   521
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   522
    p := ExternalStream makePTYPair.
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   523
    p isNil ifTrue:[
915
f2c934efc4da checkin from browser
Claus Gittinger <cg@exept.de>
parents: 914
diff changeset
   524
        self warn:'cannot open pty'.
914
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   525
        ^ self.
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   526
    ].
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   527
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   528
    "/ p at:1 is the master;
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   529
    "/ p at:2 is the slave
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   530
    inStream := outStream := (p at:1).
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   531
    inStream buffered:false.
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   532
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   533
    "/ fork a shell process on the slave-side
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   534
    slaveFD := (p at:2) fileDescriptor.
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   535
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   536
    execFdArray := Array with:slaveFD with:slaveFD with:slaveFD.
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   537
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   538
    blocked := OperatingSystem blockInterrupts.
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   539
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   540
    shellPid := Processor
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   541
               monitor:[
929
30a2a3329055 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 928
diff changeset
   542
                  |e|
30a2a3329055 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 928
diff changeset
   543
30a2a3329055 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 928
diff changeset
   544
                  e := IdentityDictionary new.
30a2a3329055 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 928
diff changeset
   545
                  e at:#TERM put:(self terminalType).
30a2a3329055 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 928
diff changeset
   546
914
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   547
                  OperatingSystem
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   548
                      exec:'/bin/sh'
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   549
                      withArguments:#('sh')
929
30a2a3329055 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 928
diff changeset
   550
                      environment:e
914
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   551
                      fileDescriptors:execFdArray
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   552
                      closeDescriptors:#()
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   553
                      fork:true
929
30a2a3329055 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 928
diff changeset
   554
                      newPgrp:true.
914
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   555
               ]
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   556
               action:[:status |
935
7ea0854209a5 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
   557
"/                  Transcript show:'pid:'; showCR:status pid.
7ea0854209a5 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
   558
"/                  Transcript show:'status:'; showCR:status status.
7ea0854209a5 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
   559
"/                  Transcript show:'code:'; showCR:status code.
7ea0854209a5 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
   560
"/                  Transcript show:'core:'; showCR:status core.
914
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   561
                  status stillAlive ifFalse:[
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   562
                      exitStatus := status.
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   563
                      OperatingSystem closePid:shellPid.
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   564
                      shellPid := nil.
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   565
                      self pushEvent:#shellTerminated
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   566
                  ].
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   567
               ].
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   568
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   569
    shellPid isNil ifTrue:[
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   570
        self halt.
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   571
        (p at:1) close.
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   572
        (p at:2) close.
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   573
    ].
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   574
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   575
    blocked ifFalse:[
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   576
        OperatingSystem unblockInterrupts
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   577
    ].
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   578
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   579
    self startReaderProcess.
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   580
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   581
    "
934
b450dbaeedac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 933
diff changeset
   582
     VT100TerminalView openShell
914
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   583
    "
929
30a2a3329055 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 928
diff changeset
   584
935
7ea0854209a5 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
   585
    "Modified: / 10.6.1998 / 18:42:23 / cg"
914
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   586
! !
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   587
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   588
!TerminalView methodsFor:'menu'!
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   589
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   590
editMenu
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   591
    "return the views middleButtonMenu"
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   592
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   593
    <resource: #keyboard (#Copy #Paste #Print)>
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   594
    <resource: #programMenu>
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   595
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   596
    |items m sub shortKeys sensor|
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   597
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   598
    ((sensor := self sensor) notNil and:[sensor ctrlDown]) ifTrue:[
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   599
        items := #(
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   600
                        ('Interrupt'      doSendInterrupt)  
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   601
                  ).
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   602
    ] ifFalse:[
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   603
        items := #(
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   604
                        ('copy'         copySelection    Copy   )
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   605
                        ('paste'        pasteOrReplace   Paste  )
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   606
                        ('-'                                    )
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   607
                        ('save as ...'  save             SaveAs )
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   608
                        ('print'        doPrint          Print  )
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   609
                  ).
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   610
    ].
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   611
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   612
    m := PopUpMenu itemList:items resources:resources.
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   613
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   614
    self hasSelection not ifTrue:[
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   615
        m disable:#copySelection.
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   616
    ].
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   617
    ^ m.
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   618
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   619
    "Modified: / 21.5.1998 / 15:52:38 / cg"
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   620
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   621
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   622
! !
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   623
940
16c955286510 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 938
diff changeset
   624
!TerminalView methodsFor:'misc'!
914
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   625
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   626
removeTrailingBlankLines
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   627
    ^ self
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   628
! !
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   629
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   630
!TerminalView methodsFor:'processing - input'!
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   631
933
de456e07697e much better asynchronous display
Claus Gittinger <cg@exept.de>
parents: 931
diff changeset
   632
processInput:buffer n:count
de456e07697e much better asynchronous display
Claus Gittinger <cg@exept.de>
parents: 931
diff changeset
   633
    1 to:count do:[:i |
de456e07697e much better asynchronous display
Claus Gittinger <cg@exept.de>
parents: 931
diff changeset
   634
        self nextPut:(buffer at:i).
de456e07697e much better asynchronous display
Claus Gittinger <cg@exept.de>
parents: 931
diff changeset
   635
    ].
de456e07697e much better asynchronous display
Claus Gittinger <cg@exept.de>
parents: 931
diff changeset
   636
    (self sensor hasEvent:#processInput:n: for:self) ifFalse:[
de456e07697e much better asynchronous display
Claus Gittinger <cg@exept.de>
parents: 931
diff changeset
   637
        self endEntry.
de456e07697e much better asynchronous display
Claus Gittinger <cg@exept.de>
parents: 931
diff changeset
   638
        self makeCursorVisible.
de456e07697e much better asynchronous display
Claus Gittinger <cg@exept.de>
parents: 931
diff changeset
   639
    ].
de456e07697e much better asynchronous display
Claus Gittinger <cg@exept.de>
parents: 931
diff changeset
   640
de456e07697e much better asynchronous display
Claus Gittinger <cg@exept.de>
parents: 931
diff changeset
   641
    "Created: / 10.6.1998 / 17:26:09 / cg"
de456e07697e much better asynchronous display
Claus Gittinger <cg@exept.de>
parents: 931
diff changeset
   642
    "Modified: / 10.6.1998 / 17:36:07 / cg"
914
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   643
! !
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   644
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   645
!TerminalView methodsFor:'queries'!
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   646
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   647
preferredExtent
926
df8d2a821687 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 925
diff changeset
   648
    ^ (fontWidth * numberOfColumns + (leftMargin * 2)) @ (self heightForLines:numberOfLines)
df8d2a821687 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 925
diff changeset
   649
df8d2a821687 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 925
diff changeset
   650
    "Modified: / 10.6.1998 / 14:47:03 / cg"
929
30a2a3329055 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 928
diff changeset
   651
!
30a2a3329055 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 928
diff changeset
   652
30a2a3329055 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 928
diff changeset
   653
terminalType
30a2a3329055 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 928
diff changeset
   654
    ^ #dump
30a2a3329055 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 928
diff changeset
   655
30a2a3329055 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 928
diff changeset
   656
    "Modified: / 10.6.1998 / 14:47:03 / cg"
30a2a3329055 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 928
diff changeset
   657
    "Created: / 10.6.1998 / 16:22:30 / cg"
914
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   658
! !
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   659
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   660
!TerminalView methodsFor:'selection handling'!
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   661
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   662
paste:someText
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   663
    "paste - redefined to send the chars to the shell instead
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   664
     of pasting into the view"
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   665
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   666
    someText asString string do:[:aChar |
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   667
        inStream nextPut:aChar
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   668
    ]
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   669
! !
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   670
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   671
!TerminalView class methodsFor:'documentation'!
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   672
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   673
version
940
16c955286510 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 938
diff changeset
   674
    ^ '$Header: /cvs/stx/stx/libwidg2/TerminalView.st,v 1.21 1998-06-11 17:11:45 cg Exp $'
914
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   675
! !