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