TerminalView.st
author Claus Gittinger <cg@exept.de>
Sat, 13 Jun 1998 19:22:26 +0200
changeset 958 84710fbdfb28
parent 957 8c167c9ea5c0
child 964 43d6e33a4240
permissions -rw-r--r--
create my view before starting a shell (to pass down windowID).
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
943
9eea2d5095b5 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 942
diff changeset
     2
	instanceVariableNames:'inStream outStream readerProcess shellPid kbdSequences
9eea2d5095b5 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 942
diff changeset
     3
		escapeSequenceTree currentSequence currentTree kbdMap
946
45e3eac9c087 added shellTerminateAction
Claus Gittinger <cg@exept.de>
parents: 945
diff changeset
     4
		escapeLeadingChars numberOfColumns numberOfLines
951
a9e48f549763 fixed scroll-range
Claus Gittinger <cg@exept.de>
parents: 950
diff changeset
     5
		shellTerminateAction rangeStartLine rangeEndLine'
943
9eea2d5095b5 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 942
diff changeset
     6
	classVariableNames:''
9eea2d5095b5 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 942
diff changeset
     7
	poolDictionaries:''
9eea2d5095b5 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 942
diff changeset
     8
	category:'Views-TerminalViews'
914
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     9
!
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    10
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    11
!TerminalView class methodsFor:'documentation'!
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    12
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    13
documentation
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    14
"
916
d9626e722c21 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 915
diff changeset
    15
    I provide terminal functionality, by forking a command interpreter
d9626e722c21 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 915
diff changeset
    16
    and comunicating with it via a pty.
d9626e722c21 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 915
diff changeset
    17
    I am abstract - concrete terminal characteristics are defined
d9626e722c21 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 915
diff changeset
    18
    by concrete subclasses (see VT52TerminalView).
914
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    19
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    20
    [author:]
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    21
        Claus Gittinger
915
f2c934efc4da checkin from browser
Claus Gittinger <cg@exept.de>
parents: 914
diff changeset
    22
f2c934efc4da checkin from browser
Claus Gittinger <cg@exept.de>
parents: 914
diff changeset
    23
    [start with:]
f2c934efc4da checkin from browser
Claus Gittinger <cg@exept.de>
parents: 914
diff changeset
    24
        VT52TerminalView openShell
919
07e8c17563a2 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 918
diff changeset
    25
        VT100TerminalView openShell
914
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
929
30a2a3329055 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 928
diff changeset
    29
!TerminalView class methodsFor:'queries'!
30a2a3329055 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 928
diff changeset
    30
30a2a3329055 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 928
diff changeset
    31
isVisualStartable
30a2a3329055 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 928
diff changeset
    32
    "returns whether this application class can be started via #open"
30a2a3329055 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 928
diff changeset
    33
30a2a3329055 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 928
diff changeset
    34
    self == TerminalView ifTrue:[^ false].
30a2a3329055 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 928
diff changeset
    35
    ^ true
30a2a3329055 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 928
diff changeset
    36
30a2a3329055 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 928
diff changeset
    37
    "Created: / 10.6.1998 / 15:48:43 / cg"
30a2a3329055 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 928
diff changeset
    38
! !
30a2a3329055 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 928
diff changeset
    39
914
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    40
!TerminalView class methodsFor:'testing'!
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    41
928
f9a117cb2bcc checkin from browser
Claus Gittinger <cg@exept.de>
parents: 926
diff changeset
    42
open
f9a117cb2bcc checkin from browser
Claus Gittinger <cg@exept.de>
parents: 926
diff changeset
    43
    self openShell
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
    "
f9a117cb2bcc checkin from browser
Claus Gittinger <cg@exept.de>
parents: 926
diff changeset
    46
     VT100TerminalView open
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
f9a117cb2bcc checkin from browser
Claus Gittinger <cg@exept.de>
parents: 926
diff changeset
    49
    "Modified: / 10.6.1998 / 15:06:35 / cg"
f9a117cb2bcc checkin from browser
Claus Gittinger <cg@exept.de>
parents: 926
diff changeset
    50
    "Created: / 10.6.1998 / 15:47:25 / cg"
f9a117cb2bcc checkin from browser
Claus Gittinger <cg@exept.de>
parents: 926
diff changeset
    51
!
f9a117cb2bcc checkin from browser
Claus Gittinger <cg@exept.de>
parents: 926
diff changeset
    52
914
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    53
openDummy
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    54
    |in vt52|
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    55
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    56
    vt52 := self new.
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    57
    in := ForwardingStream on:''.
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    58
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    59
    in fwdStream:vt52.
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    60
    vt52 inStream:in.
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    61
    vt52 outStream:in.
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    62
    vt52 open
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    63
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    64
    "
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    65
     self openDummy
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
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    69
openShell
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    70
    |in top scr vt52|
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    71
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    72
    top := StandardSystemView new.
948
b93aba7db15d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
    73
    scr := ScrollableView for:self in:top.
914
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    74
    scr origin:0.0@0.0 corner:1.0@1.0.
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    75
    vt52 := scr scrolledView.
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    76
946
45e3eac9c087 added shellTerminateAction
Claus Gittinger <cg@exept.de>
parents: 945
diff changeset
    77
    vt52 startShell.
45e3eac9c087 added shellTerminateAction
Claus Gittinger <cg@exept.de>
parents: 945
diff changeset
    78
    vt52 shellTerminateAction:[top destroy].
45e3eac9c087 added shellTerminateAction
Claus Gittinger <cg@exept.de>
parents: 945
diff changeset
    79
940
16c955286510 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 938
diff changeset
    80
    top extent:(scr preferredExtent).
16c955286510 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 938
diff changeset
    81
    top label:'shell'.
946
45e3eac9c087 added shellTerminateAction
Claus Gittinger <cg@exept.de>
parents: 945
diff changeset
    82
    top open
914
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    83
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    84
    "
933
de456e07697e much better asynchronous display
Claus Gittinger <cg@exept.de>
parents: 931
diff changeset
    85
     VT100TerminalView openShell
914
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    86
    "
946
45e3eac9c087 added shellTerminateAction
Claus Gittinger <cg@exept.de>
parents: 945
diff changeset
    87
948
b93aba7db15d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
    88
    "Modified: / 12.6.1998 / 21:43:41 / cg"
914
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    89
! !
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    90
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    91
!TerminalView methodsFor:'accessing'!
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    92
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    93
inStream
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    94
    "return the value of the instance variable 'inStream' (automatically generated)"
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    95
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    96
    ^ inStream!
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    97
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    98
inStream:something
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    99
    "set the value of the instance variable 'inStream' (automatically generated)"
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   100
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   101
    inStream := something.!
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   102
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   103
outStream
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   104
    "return the value of the instance variable 'outStream' (automatically generated)"
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   105
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   106
    ^ outStream!
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   107
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   108
outStream:something
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   109
    "set the value of the instance variable 'outStream' (automatically generated)"
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   110
946
45e3eac9c087 added shellTerminateAction
Claus Gittinger <cg@exept.de>
parents: 945
diff changeset
   111
    outStream := something.!
45e3eac9c087 added shellTerminateAction
Claus Gittinger <cg@exept.de>
parents: 945
diff changeset
   112
45e3eac9c087 added shellTerminateAction
Claus Gittinger <cg@exept.de>
parents: 945
diff changeset
   113
shellTerminateAction:aBlock
45e3eac9c087 added shellTerminateAction
Claus Gittinger <cg@exept.de>
parents: 945
diff changeset
   114
    "set the block which is evaluated when the shell terminates.
45e3eac9c087 added shellTerminateAction
Claus Gittinger <cg@exept.de>
parents: 945
diff changeset
   115
     Can be used to close down the application in this case."
45e3eac9c087 added shellTerminateAction
Claus Gittinger <cg@exept.de>
parents: 945
diff changeset
   116
45e3eac9c087 added shellTerminateAction
Claus Gittinger <cg@exept.de>
parents: 945
diff changeset
   117
    shellTerminateAction := aBlock.
45e3eac9c087 added shellTerminateAction
Claus Gittinger <cg@exept.de>
parents: 945
diff changeset
   118
45e3eac9c087 added shellTerminateAction
Claus Gittinger <cg@exept.de>
parents: 945
diff changeset
   119
    "Created: / 12.6.1998 / 17:02:58 / cg"
45e3eac9c087 added shellTerminateAction
Claus Gittinger <cg@exept.de>
parents: 945
diff changeset
   120
! !
914
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   121
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   122
!TerminalView methodsFor:'cursor handling'!
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   123
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   124
cursorCol:col
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   125
    "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
   126
     Here, the linelength is enforced"
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   127
926
df8d2a821687 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 925
diff changeset
   128
    ^ super cursorCol:(col min:numberOfColumns)
914
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   129
926
df8d2a821687 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 925
diff changeset
   130
    "Modified: / 10.6.1998 / 15:09:34 / cg"
914
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   131
!
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   132
933
de456e07697e much better asynchronous display
Claus Gittinger <cg@exept.de>
parents: 931
diff changeset
   133
cursorDown:n
de456e07697e much better asynchronous display
Claus Gittinger <cg@exept.de>
parents: 931
diff changeset
   134
    cursorLine + n > list size ifTrue:[
de456e07697e much better asynchronous display
Claus Gittinger <cg@exept.de>
parents: 931
diff changeset
   135
        list := list , (Array new:n).
de456e07697e much better asynchronous display
Claus Gittinger <cg@exept.de>
parents: 931
diff changeset
   136
        self textChanged.
de456e07697e much better asynchronous display
Claus Gittinger <cg@exept.de>
parents: 931
diff changeset
   137
    ].
de456e07697e much better asynchronous display
Claus Gittinger <cg@exept.de>
parents: 931
diff changeset
   138
    super cursorDown:n
de456e07697e much better asynchronous display
Claus Gittinger <cg@exept.de>
parents: 931
diff changeset
   139
de456e07697e much better asynchronous display
Claus Gittinger <cg@exept.de>
parents: 931
diff changeset
   140
    "Modified: / 10.6.1998 / 17:18:41 / cg"
de456e07697e much better asynchronous display
Claus Gittinger <cg@exept.de>
parents: 931
diff changeset
   141
    "Created: / 10.6.1998 / 17:18:50 / cg"
de456e07697e much better asynchronous display
Claus Gittinger <cg@exept.de>
parents: 931
diff changeset
   142
!
de456e07697e much better asynchronous display
Claus Gittinger <cg@exept.de>
parents: 931
diff changeset
   143
914
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   144
cursorLine:l col:col
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   145
    "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
   146
     Here, the linelength is enforced"
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   147
926
df8d2a821687 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 925
diff changeset
   148
    ^ super cursorLine:l col:(col min:numberOfColumns)
914
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   149
926
df8d2a821687 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 925
diff changeset
   150
    "Modified: / 10.6.1998 / 15:09:38 / cg"
914
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   151
!
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   152
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   153
validateCursorCol:col inLine:line
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   154
    "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
   155
     Here, the linelength is enforced"
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   156
926
df8d2a821687 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 925
diff changeset
   157
    ^ col min:numberOfColumns
914
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   158
926
df8d2a821687 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 925
diff changeset
   159
    "Modified: / 10.6.1998 / 15:09:41 / cg"
914
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   160
! !
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   161
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   162
!TerminalView methodsFor:'event handling'!
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   163
951
a9e48f549763 fixed scroll-range
Claus Gittinger <cg@exept.de>
parents: 950
diff changeset
   164
computeNumberOfLinesShown
a9e48f549763 fixed scroll-range
Claus Gittinger <cg@exept.de>
parents: 950
diff changeset
   165
    |prevNLines prevNCols|
a9e48f549763 fixed scroll-range
Claus Gittinger <cg@exept.de>
parents: 950
diff changeset
   166
a9e48f549763 fixed scroll-range
Claus Gittinger <cg@exept.de>
parents: 950
diff changeset
   167
    prevNCols := (innerWidth // font width).
a9e48f549763 fixed scroll-range
Claus Gittinger <cg@exept.de>
parents: 950
diff changeset
   168
    prevNLines := nFullLinesShown.
a9e48f549763 fixed scroll-range
Claus Gittinger <cg@exept.de>
parents: 950
diff changeset
   169
a9e48f549763 fixed scroll-range
Claus Gittinger <cg@exept.de>
parents: 950
diff changeset
   170
    super computeNumberOfLinesShown.
a9e48f549763 fixed scroll-range
Claus Gittinger <cg@exept.de>
parents: 950
diff changeset
   171
a9e48f549763 fixed scroll-range
Claus Gittinger <cg@exept.de>
parents: 950
diff changeset
   172
    ((innerWidth // font width) ~~ prevNCols
a9e48f549763 fixed scroll-range
Claus Gittinger <cg@exept.de>
parents: 950
diff changeset
   173
    or:[prevNLines ~~ nFullLinesShown]) ifTrue:[
a9e48f549763 fixed scroll-range
Claus Gittinger <cg@exept.de>
parents: 950
diff changeset
   174
        self defineWindowSize.
a9e48f549763 fixed scroll-range
Claus Gittinger <cg@exept.de>
parents: 950
diff changeset
   175
    ]
a9e48f549763 fixed scroll-range
Claus Gittinger <cg@exept.de>
parents: 950
diff changeset
   176
a9e48f549763 fixed scroll-range
Claus Gittinger <cg@exept.de>
parents: 950
diff changeset
   177
    "Created: / 12.6.1998 / 22:34:39 / cg"
a9e48f549763 fixed scroll-range
Claus Gittinger <cg@exept.de>
parents: 950
diff changeset
   178
    "Modified: / 12.6.1998 / 22:35:38 / cg"
a9e48f549763 fixed scroll-range
Claus Gittinger <cg@exept.de>
parents: 950
diff changeset
   179
!
a9e48f549763 fixed scroll-range
Claus Gittinger <cg@exept.de>
parents: 950
diff changeset
   180
943
9eea2d5095b5 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 942
diff changeset
   181
defineWindowSize
9eea2d5095b5 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 942
diff changeset
   182
    inStream notNil ifTrue:[
9eea2d5095b5 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 942
diff changeset
   183
        OperatingSystem 
9eea2d5095b5 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 942
diff changeset
   184
            setWindowSizeOnFileDescriptor:(inStream fileDescriptor)
9eea2d5095b5 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 942
diff changeset
   185
            width:(innerWidth // font width)
9eea2d5095b5 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 942
diff changeset
   186
            height:(nFullLinesShown).
951
a9e48f549763 fixed scroll-range
Claus Gittinger <cg@exept.de>
parents: 950
diff changeset
   187
        numberOfLines := nFullLinesShown.
943
9eea2d5095b5 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 942
diff changeset
   188
    ].
9eea2d5095b5 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 942
diff changeset
   189
    shellPid notNil ifTrue:[
9eea2d5095b5 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 942
diff changeset
   190
        OperatingSystem sendSignal:OperatingSystem sigWINCH to:shellPid
9eea2d5095b5 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 942
diff changeset
   191
    ]
9eea2d5095b5 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 942
diff changeset
   192
9eea2d5095b5 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 942
diff changeset
   193
    "Created: / 11.6.1998 / 22:51:39 / cg"
951
a9e48f549763 fixed scroll-range
Claus Gittinger <cg@exept.de>
parents: 950
diff changeset
   194
    "Modified: / 12.6.1998 / 22:37:44 / cg"
943
9eea2d5095b5 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 942
diff changeset
   195
!
9eea2d5095b5 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 942
diff changeset
   196
914
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   197
keyPress:aKey x:x y:y
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   198
    |rest rawKey seq|
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   199
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   200
    inStream isNil ifTrue:[^ self].
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   201
931
3dfdf1f7bd5d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 929
diff changeset
   202
"/ Transcript showCR:'----'; show:'key:' ; showCR:aKey printString.
914
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   203
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   204
    aKey isCharacter ifTrue:[
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   205
        "/ send it down to inStream ...
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   206
        inStream nextPut:aKey.
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   207
        ^ self
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   208
    ].
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   209
921
63044deaf3d7 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 919
diff changeset
   210
    aKey == #Tab ifTrue:[
931
3dfdf1f7bd5d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 929
diff changeset
   211
"/ Transcript show:'->' ; showCR:Character tab storeString.
921
63044deaf3d7 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 919
diff changeset
   212
        inStream nextPut:Character tab.
63044deaf3d7 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 919
diff changeset
   213
        ^ self
63044deaf3d7 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 919
diff changeset
   214
    ].
63044deaf3d7 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 919
diff changeset
   215
914
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   216
    seq := kbdSequences at:aKey ifAbsent:nil.
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   217
    seq notNil ifTrue:[
931
3dfdf1f7bd5d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 929
diff changeset
   218
"/ Transcript show:'->' ; showCR:seq storeString.
914
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   219
        inStream nextPutAll:(seq withEscapes).
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   220
        ^ self
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   221
    ].
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   222
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   223
    rawKey := device keyboardMap keyAtValue:aKey ifAbsent:aKey.
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   224
    seq := kbdSequences at:rawKey ifAbsent:nil.
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   225
    seq notNil ifTrue:[
931
3dfdf1f7bd5d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 929
diff changeset
   226
"/ Transcript show:'->' ; showCR:seq storeString.
914
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   227
        inStream nextPutAll:(seq withEscapes).
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   228
        ^ self
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   229
    ].
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   230
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   231
    (rawKey startsWith:'Ctrl') ifTrue:[
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   232
        rest := rawKey copyFrom:5.
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   233
        rest size == 1 ifTrue:[
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   234
            rest := rest at:1.
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   235
            (rest >= $a and:[rest <= $z]) ifTrue:[
931
3dfdf1f7bd5d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 929
diff changeset
   236
"/ Transcript show:'->' ; showCR:(Character value:(rest - $a + 1)) storeString.
914
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   237
                inStream nextPut:(Character value:(rest - $a + 1)).
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   238
                ^ self
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   239
            ].
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   240
            (rest >= $A and:[rest <= $Z]) ifTrue:[
931
3dfdf1f7bd5d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 929
diff changeset
   241
"/ Transcript show:'->' ; showCR:(Character value:(rest - $a + 1)) storeString.
914
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   242
                inStream nextPut:(Character value:(rest - $A + 1)).
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   243
                ^ self
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   244
            ].
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   245
        ]
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   246
    ].
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   247
934
b450dbaeedac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 933
diff changeset
   248
    (rawKey startsWith:'Control') ifTrue:[
b450dbaeedac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 933
diff changeset
   249
        ^ self
b450dbaeedac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 933
diff changeset
   250
    ].
b450dbaeedac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 933
diff changeset
   251
    (rawKey startsWith:'Shift') ifTrue:[
b450dbaeedac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 933
diff changeset
   252
        ^ self
b450dbaeedac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 933
diff changeset
   253
    ].
b450dbaeedac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 933
diff changeset
   254
    (rawKey startsWith:'Alt') ifTrue:[
b450dbaeedac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 933
diff changeset
   255
        ^ self
b450dbaeedac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 933
diff changeset
   256
    ].
b450dbaeedac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 933
diff changeset
   257
    (rawKey startsWith:'Cmd') ifTrue:[
950
9e5834388a79 fixed paste & command keys
Claus Gittinger <cg@exept.de>
parents: 948
diff changeset
   258
        ^ super keyPress:aKey x:x y:y
934
b450dbaeedac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 933
diff changeset
   259
    ].
b450dbaeedac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 933
diff changeset
   260
b450dbaeedac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 933
diff changeset
   261
    Transcript show:'unhandled: '; showCR:rawKey.
914
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   262
950
9e5834388a79 fixed paste & command keys
Claus Gittinger <cg@exept.de>
parents: 948
diff changeset
   263
    "Modified: / 12.6.1998 / 22:16:50 / cg"
914
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   264
!
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   265
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   266
shellTerminated
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   267
    self closeDownShell.
946
45e3eac9c087 added shellTerminateAction
Claus Gittinger <cg@exept.de>
parents: 945
diff changeset
   268
    shellTerminateAction notNil ifTrue:[
45e3eac9c087 added shellTerminateAction
Claus Gittinger <cg@exept.de>
parents: 945
diff changeset
   269
        shellTerminateAction value
45e3eac9c087 added shellTerminateAction
Claus Gittinger <cg@exept.de>
parents: 945
diff changeset
   270
    ] ifFalse:[
45e3eac9c087 added shellTerminateAction
Claus Gittinger <cg@exept.de>
parents: 945
diff changeset
   271
        "/ may be removed ...
45e3eac9c087 added shellTerminateAction
Claus Gittinger <cg@exept.de>
parents: 945
diff changeset
   272
        self warn:'shell terminated'.
45e3eac9c087 added shellTerminateAction
Claus Gittinger <cg@exept.de>
parents: 945
diff changeset
   273
    ]
45e3eac9c087 added shellTerminateAction
Claus Gittinger <cg@exept.de>
parents: 945
diff changeset
   274
45e3eac9c087 added shellTerminateAction
Claus Gittinger <cg@exept.de>
parents: 945
diff changeset
   275
    "Modified: / 12.6.1998 / 17:03:26 / cg"
942
1f4fa3a6faec send a sigWINCH whenever the views size changes.
Claus Gittinger <cg@exept.de>
parents: 940
diff changeset
   276
!
1f4fa3a6faec send a sigWINCH whenever the views size changes.
Claus Gittinger <cg@exept.de>
parents: 940
diff changeset
   277
1f4fa3a6faec send a sigWINCH whenever the views size changes.
Claus Gittinger <cg@exept.de>
parents: 940
diff changeset
   278
sizeChanged:how
1f4fa3a6faec send a sigWINCH whenever the views size changes.
Claus Gittinger <cg@exept.de>
parents: 940
diff changeset
   279
    super sizeChanged:how.
943
9eea2d5095b5 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 942
diff changeset
   280
    self defineWindowSize.
942
1f4fa3a6faec send a sigWINCH whenever the views size changes.
Claus Gittinger <cg@exept.de>
parents: 940
diff changeset
   281
943
9eea2d5095b5 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 942
diff changeset
   282
    "Modified: / 11.6.1998 / 22:51:48 / cg"
914
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   283
! !
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   284
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   285
!TerminalView methodsFor:'functions'!
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   286
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   287
doBackspace
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   288
    self cursorLeft.
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   289
    self replaceCharAtCursor:(Character space).
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   290
    self cursorLeft.
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   291
931
3dfdf1f7bd5d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 929
diff changeset
   292
    "Modified: / 10.6.1998 / 17:09:12 / cg"
914
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   293
!
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   294
926
df8d2a821687 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 925
diff changeset
   295
doClearDisplay
df8d2a821687 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 925
diff changeset
   296
    firstLineShown to:(list size) do:[:l |
df8d2a821687 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 925
diff changeset
   297
        self at:l put:''
df8d2a821687 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 925
diff changeset
   298
    ].
922
c8373b8c7986 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 921
diff changeset
   299
926
df8d2a821687 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 925
diff changeset
   300
    "Created: / 10.6.1998 / 14:43:06 / cg"
df8d2a821687 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 925
diff changeset
   301
    "Modified: / 10.6.1998 / 14:58:07 / cg"
df8d2a821687 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 925
diff changeset
   302
!
df8d2a821687 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 925
diff changeset
   303
df8d2a821687 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 925
diff changeset
   304
doClearToEnd
df8d2a821687 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 925
diff changeset
   305
    self doClearToEndOfLine.
922
c8373b8c7986 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 921
diff changeset
   306
    cursorLine+1 to:(list size) do:[:l |
c8373b8c7986 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 921
diff changeset
   307
        self at:l put:''
c8373b8c7986 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 921
diff changeset
   308
    ].
c8373b8c7986 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 921
diff changeset
   309
926
df8d2a821687 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 925
diff changeset
   310
    "Modified: / 10.6.1998 / 14:45:43 / cg"
df8d2a821687 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 925
diff changeset
   311
!
df8d2a821687 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 925
diff changeset
   312
df8d2a821687 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 925
diff changeset
   313
doClearToEndOfLine
df8d2a821687 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 925
diff changeset
   314
    |l|
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
    l := self listAt:cursorLine.
931
3dfdf1f7bd5d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 929
diff changeset
   317
    (l size >= (cursorCol-1)) ifTrue:[
951
a9e48f549763 fixed scroll-range
Claus Gittinger <cg@exept.de>
parents: 950
diff changeset
   318
        l notNil ifTrue:[
a9e48f549763 fixed scroll-range
Claus Gittinger <cg@exept.de>
parents: 950
diff changeset
   319
            l := l copyTo:cursorCol-1.
a9e48f549763 fixed scroll-range
Claus Gittinger <cg@exept.de>
parents: 950
diff changeset
   320
            self at:cursorLine put:l.
a9e48f549763 fixed scroll-range
Claus Gittinger <cg@exept.de>
parents: 950
diff changeset
   321
        ]
926
df8d2a821687 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 925
diff changeset
   322
    ]
df8d2a821687 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 925
diff changeset
   323
df8d2a821687 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 925
diff changeset
   324
    "Created: / 10.6.1998 / 14:45:01 / cg"
951
a9e48f549763 fixed scroll-range
Claus Gittinger <cg@exept.de>
parents: 950
diff changeset
   325
    "Modified: / 12.6.1998 / 22:27:54 / cg"
914
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   326
!
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   327
926
df8d2a821687 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 925
diff changeset
   328
doCursorDown:n
951
a9e48f549763 fixed scroll-range
Claus Gittinger <cg@exept.de>
parents: 950
diff changeset
   329
    |wasOn|
926
df8d2a821687 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 925
diff changeset
   330
951
a9e48f549763 fixed scroll-range
Claus Gittinger <cg@exept.de>
parents: 950
diff changeset
   331
    cursorVisibleLine + n > rangeEndLine ifFalse:[
a9e48f549763 fixed scroll-range
Claus Gittinger <cg@exept.de>
parents: 950
diff changeset
   332
        "/ no special action req'd
a9e48f549763 fixed scroll-range
Claus Gittinger <cg@exept.de>
parents: 950
diff changeset
   333
        ^ super cursorDown:n
a9e48f549763 fixed scroll-range
Claus Gittinger <cg@exept.de>
parents: 950
diff changeset
   334
    ].
a9e48f549763 fixed scroll-range
Claus Gittinger <cg@exept.de>
parents: 950
diff changeset
   335
    n timesRepeat:[
a9e48f549763 fixed scroll-range
Claus Gittinger <cg@exept.de>
parents: 950
diff changeset
   336
        wasOn := self hideCursor.
a9e48f549763 fixed scroll-range
Claus Gittinger <cg@exept.de>
parents: 950
diff changeset
   337
        cursorVisibleLine == rangeEndLine ifTrue:[
a9e48f549763 fixed scroll-range
Claus Gittinger <cg@exept.de>
parents: 950
diff changeset
   338
            self deleteLine:rangeStartLine.
a9e48f549763 fixed scroll-range
Claus Gittinger <cg@exept.de>
parents: 950
diff changeset
   339
            self insertLine:'' before:rangeEndLine
a9e48f549763 fixed scroll-range
Claus Gittinger <cg@exept.de>
parents: 950
diff changeset
   340
        ] ifFalse:[
a9e48f549763 fixed scroll-range
Claus Gittinger <cg@exept.de>
parents: 950
diff changeset
   341
            super cursorDown
a9e48f549763 fixed scroll-range
Claus Gittinger <cg@exept.de>
parents: 950
diff changeset
   342
        ].
a9e48f549763 fixed scroll-range
Claus Gittinger <cg@exept.de>
parents: 950
diff changeset
   343
        self makeCursorVisibleAndShowCursor:wasOn.
a9e48f549763 fixed scroll-range
Claus Gittinger <cg@exept.de>
parents: 950
diff changeset
   344
    ]
a9e48f549763 fixed scroll-range
Claus Gittinger <cg@exept.de>
parents: 950
diff changeset
   345
955
0140b9375b0f checkin from browser
Claus Gittinger <cg@exept.de>
parents: 954
diff changeset
   346
    "Modified: / 13.6.1998 / 18:13:54 / cg"
926
df8d2a821687 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 925
diff changeset
   347
!
df8d2a821687 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 925
diff changeset
   348
914
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   349
doCursorHome
938
3e65cc6f22cd checkin from browser
Claus Gittinger <cg@exept.de>
parents: 936
diff changeset
   350
    self cursorVisibleLine:1 col:1
3e65cc6f22cd checkin from browser
Claus Gittinger <cg@exept.de>
parents: 936
diff changeset
   351
    "/ super cursorHome
3e65cc6f22cd checkin from browser
Claus Gittinger <cg@exept.de>
parents: 936
diff changeset
   352
3e65cc6f22cd checkin from browser
Claus Gittinger <cg@exept.de>
parents: 936
diff changeset
   353
    "Modified: / 10.6.1998 / 20:47:31 / cg"
914
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   354
!
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   355
942
1f4fa3a6faec send a sigWINCH whenever the views size changes.
Claus Gittinger <cg@exept.de>
parents: 940
diff changeset
   356
doCursorLeft:n
1f4fa3a6faec send a sigWINCH whenever the views size changes.
Claus Gittinger <cg@exept.de>
parents: 940
diff changeset
   357
    n timesRepeat:[
1f4fa3a6faec send a sigWINCH whenever the views size changes.
Claus Gittinger <cg@exept.de>
parents: 940
diff changeset
   358
        super cursorLeft
1f4fa3a6faec send a sigWINCH whenever the views size changes.
Claus Gittinger <cg@exept.de>
parents: 940
diff changeset
   359
    ]
1f4fa3a6faec send a sigWINCH whenever the views size changes.
Claus Gittinger <cg@exept.de>
parents: 940
diff changeset
   360
1f4fa3a6faec send a sigWINCH whenever the views size changes.
Claus Gittinger <cg@exept.de>
parents: 940
diff changeset
   361
    "Created: / 11.6.1998 / 22:30:00 / cg"
1f4fa3a6faec send a sigWINCH whenever the views size changes.
Claus Gittinger <cg@exept.de>
parents: 940
diff changeset
   362
!
1f4fa3a6faec send a sigWINCH whenever the views size changes.
Claus Gittinger <cg@exept.de>
parents: 940
diff changeset
   363
914
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   364
doCursorNewLine
931
3dfdf1f7bd5d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 929
diff changeset
   365
    super cursorDown:1
3dfdf1f7bd5d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 929
diff changeset
   366
3dfdf1f7bd5d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 929
diff changeset
   367
    "Modified: / 10.6.1998 / 16:55:57 / cg"
914
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   368
!
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   369
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   370
doCursorReturn
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   371
    super cursorToBeginOfLine
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   372
!
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   373
926
df8d2a821687 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 925
diff changeset
   374
doCursorRight:n
df8d2a821687 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 925
diff changeset
   375
    self cursorCol:(cursorCol + n)
df8d2a821687 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 925
diff changeset
   376
df8d2a821687 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 925
diff changeset
   377
    "Created: / 10.6.1998 / 15:10:08 / cg"
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
951
a9e48f549763 fixed scroll-range
Claus Gittinger <cg@exept.de>
parents: 950
diff changeset
   380
doCursorUp:n
a9e48f549763 fixed scroll-range
Claus Gittinger <cg@exept.de>
parents: 950
diff changeset
   381
    |wasOn|
926
df8d2a821687 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 925
diff changeset
   382
951
a9e48f549763 fixed scroll-range
Claus Gittinger <cg@exept.de>
parents: 950
diff changeset
   383
    cursorVisibleLine - n < rangeStartLine ifFalse:[
a9e48f549763 fixed scroll-range
Claus Gittinger <cg@exept.de>
parents: 950
diff changeset
   384
        "/ no special action req'd
a9e48f549763 fixed scroll-range
Claus Gittinger <cg@exept.de>
parents: 950
diff changeset
   385
        ^ super cursorUp:n
a9e48f549763 fixed scroll-range
Claus Gittinger <cg@exept.de>
parents: 950
diff changeset
   386
    ].
942
1f4fa3a6faec send a sigWINCH whenever the views size changes.
Claus Gittinger <cg@exept.de>
parents: 940
diff changeset
   387
    n timesRepeat:[
951
a9e48f549763 fixed scroll-range
Claus Gittinger <cg@exept.de>
parents: 950
diff changeset
   388
        wasOn := self hideCursor.
a9e48f549763 fixed scroll-range
Claus Gittinger <cg@exept.de>
parents: 950
diff changeset
   389
        cursorVisibleLine == rangeStartLine ifTrue:[
a9e48f549763 fixed scroll-range
Claus Gittinger <cg@exept.de>
parents: 950
diff changeset
   390
            self deleteLine:rangeEndLine.
a9e48f549763 fixed scroll-range
Claus Gittinger <cg@exept.de>
parents: 950
diff changeset
   391
            self insertLine:'' before:rangeStartLine
a9e48f549763 fixed scroll-range
Claus Gittinger <cg@exept.de>
parents: 950
diff changeset
   392
        ] ifFalse:[
a9e48f549763 fixed scroll-range
Claus Gittinger <cg@exept.de>
parents: 950
diff changeset
   393
            super cursorUp
a9e48f549763 fixed scroll-range
Claus Gittinger <cg@exept.de>
parents: 950
diff changeset
   394
        ].
a9e48f549763 fixed scroll-range
Claus Gittinger <cg@exept.de>
parents: 950
diff changeset
   395
        self makeCursorVisibleAndShowCursor:wasOn.
942
1f4fa3a6faec send a sigWINCH whenever the views size changes.
Claus Gittinger <cg@exept.de>
parents: 940
diff changeset
   396
    ]
1f4fa3a6faec send a sigWINCH whenever the views size changes.
Claus Gittinger <cg@exept.de>
parents: 940
diff changeset
   397
1f4fa3a6faec send a sigWINCH whenever the views size changes.
Claus Gittinger <cg@exept.de>
parents: 940
diff changeset
   398
    "Created: / 11.6.1998 / 22:29:46 / cg"
951
a9e48f549763 fixed scroll-range
Claus Gittinger <cg@exept.de>
parents: 950
diff changeset
   399
    "Modified: / 12.6.1998 / 22:45:30 / cg"
942
1f4fa3a6faec send a sigWINCH whenever the views size changes.
Claus Gittinger <cg@exept.de>
parents: 940
diff changeset
   400
!
1f4fa3a6faec send a sigWINCH whenever the views size changes.
Claus Gittinger <cg@exept.de>
parents: 940
diff changeset
   401
926
df8d2a821687 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 925
diff changeset
   402
doSendInterrupt
df8d2a821687 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 925
diff changeset
   403
    OperatingSystem sendSignal:(OperatingSystem sigINT) to:shellPid negated.
df8d2a821687 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 925
diff changeset
   404
934
b450dbaeedac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 933
diff changeset
   405
    "Modified: / 10.6.1998 / 17:49:49 / cg"
914
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   406
! !
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   407
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   408
!TerminalView methodsFor:'initialization'!
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   409
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   410
closeDownShell
926
df8d2a821687 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 925
diff changeset
   411
    |pid|
df8d2a821687 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 925
diff changeset
   412
df8d2a821687 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 925
diff changeset
   413
    (pid := shellPid) notNil ifTrue:[
934
b450dbaeedac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 933
diff changeset
   414
"/        Transcript print:'killing shell pid='; showCR:pid.
b450dbaeedac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 933
diff changeset
   415
926
df8d2a821687 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 925
diff changeset
   416
        OperatingSystem terminateProcessGroup:pid.
df8d2a821687 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 925
diff changeset
   417
        OperatingSystem terminateProcess:pid.
925
f9ef1268a21b kill after termination.
Claus Gittinger <cg@exept.de>
parents: 924
diff changeset
   418
        Delay waitForSeconds:1.
f9ef1268a21b kill after termination.
Claus Gittinger <cg@exept.de>
parents: 924
diff changeset
   419
        shellPid notNil ifTrue:[
926
df8d2a821687 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 925
diff changeset
   420
            OperatingSystem killProcessGroup:pid.
df8d2a821687 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 925
diff changeset
   421
            OperatingSystem killProcess:pid.
925
f9ef1268a21b kill after termination.
Claus Gittinger <cg@exept.de>
parents: 924
diff changeset
   422
            shellPid := nil.
f9ef1268a21b kill after termination.
Claus Gittinger <cg@exept.de>
parents: 924
diff changeset
   423
        ].
926
df8d2a821687 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 925
diff changeset
   424
        OperatingSystem closePid:pid.
914
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   425
    ].
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   426
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   427
    readerProcess notNil ifTrue:[
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   428
        readerProcess terminate.
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   429
        readerProcess := nil
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   430
    ].
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   431
    inStream notNil ifTrue:[
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   432
        inStream close.
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   433
        inStream := nil
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   434
    ].
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   435
    outStream notNil ifTrue:[
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   436
        outStream close.
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   437
        outStream := nil
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   438
    ].
924
c1d2e1fecd79 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 923
diff changeset
   439
934
b450dbaeedac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 933
diff changeset
   440
    "Modified: / 10.6.1998 / 17:53:49 / cg"
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
destroy
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   444
    self closeDownShell.
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   445
    super destroy
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
escapeSequences:codes
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   449
    |tree|
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   450
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   451
    tree isNil ifTrue:[tree := escapeSequenceTree := IdentityDictionary new].
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   452
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   453
    codes do:[:specEntry |
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   454
        |sequence function|
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   455
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   456
        sequence := (specEntry at:1) withEscapes.
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   457
        function := specEntry at:2.
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   458
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   459
        tree := escapeSequenceTree.
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   460
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   461
        sequence keysAndValuesDo:[:idx :char |
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   462
            |followup|
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   463
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   464
            idx == sequence size ifTrue:[
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   465
                tree at:char put:function
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   466
            ] ifFalse:[
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   467
                followup := tree at:char ifAbsent:nil.
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   468
                followup isNil ifTrue:[
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   469
                    tree at:char put:(followup := IdentityDictionary new).
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   470
                ].
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   471
                tree := followup
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   472
            ]
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   473
        ]
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   474
    ].
918
2d6a4c91c4bd checkin from browser
Claus Gittinger <cg@exept.de>
parents: 917
diff changeset
   475
    escapeLeadingChars := escapeSequenceTree keys asSet.
2d6a4c91c4bd checkin from browser
Claus Gittinger <cg@exept.de>
parents: 917
diff changeset
   476
    escapeLeadingChars add:(Character cr).
2d6a4c91c4bd checkin from browser
Claus Gittinger <cg@exept.de>
parents: 917
diff changeset
   477
    escapeLeadingChars add:(Character return).
2d6a4c91c4bd checkin from browser
Claus Gittinger <cg@exept.de>
parents: 917
diff changeset
   478
    escapeLeadingChars add:(Character backspace).
2d6a4c91c4bd checkin from browser
Claus Gittinger <cg@exept.de>
parents: 917
diff changeset
   479
2d6a4c91c4bd checkin from browser
Claus Gittinger <cg@exept.de>
parents: 917
diff changeset
   480
    escapeLeadingChars := escapeLeadingChars asArray
2d6a4c91c4bd checkin from browser
Claus Gittinger <cg@exept.de>
parents: 917
diff changeset
   481
2d6a4c91c4bd checkin from browser
Claus Gittinger <cg@exept.de>
parents: 917
diff changeset
   482
    "Modified: / 9.6.1998 / 19:43:12 / cg"
914
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   483
!
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   484
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   485
initialize
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   486
    super initialize.
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   487
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   488
    showMatchingParenthesis := false.
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   489
    insertMode := false.
936
d377fb0f726f checkin from browser
Claus Gittinger <cg@exept.de>
parents: 935
diff changeset
   490
    alwaysAppendAtEnd := false.
944
c59be5892714 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 943
diff changeset
   491
    collectSize := 100.
914
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   492
926
df8d2a821687 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 925
diff changeset
   493
    numberOfColumns := 80.
df8d2a821687 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 925
diff changeset
   494
    numberOfLines := 25.
954
4cef50a89ca1 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 951
diff changeset
   495
    rangeStartLine := 1.
4cef50a89ca1 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 951
diff changeset
   496
    rangeEndLine := numberOfLines.
926
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
    self initializeKeyboardSequences.
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   499
    list := OrderedCollection new:24 withAll:''.
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   500
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   501
    self initializeKeyboardMap.
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   502
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   503
    "
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   504
     VT52TerminalView openShell
926
df8d2a821687 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 925
diff changeset
   505
     VT100TerminalView openShell
914
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   506
    "
926
df8d2a821687 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 925
diff changeset
   507
954
4cef50a89ca1 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 951
diff changeset
   508
    "Modified: / 13.6.1998 / 13:58:13 / cg"
914
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   509
!
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   510
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   511
initializeKeyboardMap
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   512
    |ctrlKeys cmdKeys|
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   513
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   514
    "/ setup my own keyboardMap, where control-keys are
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   515
    "/ not translated.
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   516
    kbdMap := device keyboardMap copy.
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   517
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   518
    ctrlKeys := kbdMap keys select:[:key | key startsWith:'Ctrl'].
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   519
    ctrlKeys do:[:key | kbdMap removeKey:key].
950
9e5834388a79 fixed paste & command keys
Claus Gittinger <cg@exept.de>
parents: 948
diff changeset
   520
914
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   521
    cmdKeys := kbdMap keys select:[:key | key startsWith:'Cmd'].
950
9e5834388a79 fixed paste & command keys
Claus Gittinger <cg@exept.de>
parents: 948
diff changeset
   522
    cmdKeys do:[:key | 
9e5834388a79 fixed paste & command keys
Claus Gittinger <cg@exept.de>
parents: 948
diff changeset
   523
        (#(Copy Paste SaveAs Print) includes:(kbdMap at:key)) ifFalse:[
9e5834388a79 fixed paste & command keys
Claus Gittinger <cg@exept.de>
parents: 948
diff changeset
   524
            kbdMap removeKey:key
9e5834388a79 fixed paste & command keys
Claus Gittinger <cg@exept.de>
parents: 948
diff changeset
   525
        ]
9e5834388a79 fixed paste & command keys
Claus Gittinger <cg@exept.de>
parents: 948
diff changeset
   526
    ].
914
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   527
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   528
    kbdMap removeKey:#Delete ifAbsent:[].
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   529
    kbdMap removeKey:#BackSpace ifAbsent:[].
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   530
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   531
    "
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   532
     VT52TerminalView openShell
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   533
    "
950
9e5834388a79 fixed paste & command keys
Claus Gittinger <cg@exept.de>
parents: 948
diff changeset
   534
9e5834388a79 fixed paste & command keys
Claus Gittinger <cg@exept.de>
parents: 948
diff changeset
   535
    "Modified: / 12.6.1998 / 22:18:23 / cg"
914
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   536
!
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   537
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   538
initializeKeyboardSequences
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   539
    self subclassResponsibility.
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   540
!
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   541
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   542
keyboardMap
934
b450dbaeedac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 933
diff changeset
   543
    "return my keyboard map. This has control keys removed and
b450dbaeedac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 933
diff changeset
   544
     those will be passed unchanged to the shell"
b450dbaeedac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 933
diff changeset
   545
914
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   546
    ^ kbdMap
934
b450dbaeedac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 933
diff changeset
   547
b450dbaeedac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 933
diff changeset
   548
    "Modified: / 10.6.1998 / 17:46:59 / cg"
914
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   549
!
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   550
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   551
startReaderProcess
934
b450dbaeedac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 933
diff changeset
   552
    "Start a reader process, which looks for the commands output,
b450dbaeedac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 933
diff changeset
   553
     and sends me #peocessInput:n: events whenever something arrives."
b450dbaeedac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 933
diff changeset
   554
914
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   555
    readerProcess isNil ifTrue:[
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   556
        readerProcess := [
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   557
            [
947
e3baca36e6f7 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 946
diff changeset
   558
                self waitUntilVisible.
e3baca36e6f7 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 946
diff changeset
   559
940
16c955286510 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 938
diff changeset
   560
                Stream streamErrorSignal handle:[:ex |
16c955286510 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 938
diff changeset
   561
                    Transcript showCR:ex errorString.
16c955286510 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 938
diff changeset
   562
                    Transcript showCR:OperatingSystem lastErrorString.
16c955286510 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 938
diff changeset
   563
                ] do:[
926
df8d2a821687 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 925
diff changeset
   564
                    [true] whileTrue:[
df8d2a821687 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 925
diff changeset
   565
                        Object abortSignal handle:[:ex |
df8d2a821687 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 925
diff changeset
   566
                            self showCursor.
df8d2a821687 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 925
diff changeset
   567
                        ] do:[
948
b93aba7db15d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
   568
                            |buffer n|
b93aba7db15d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
   569
926
df8d2a821687 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 925
diff changeset
   570
                            outStream readWait.
945
552cf1a3d47b checkin from browser
Claus Gittinger <cg@exept.de>
parents: 944
diff changeset
   571
                            (self sensor hasKeyPressEventFor:self) ifTrue:[
552cf1a3d47b checkin from browser
Claus Gittinger <cg@exept.de>
parents: 944
diff changeset
   572
                                Processor yield
926
df8d2a821687 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 925
diff changeset
   573
                            ] ifFalse:[
945
552cf1a3d47b checkin from browser
Claus Gittinger <cg@exept.de>
parents: 944
diff changeset
   574
                                buffer := String new:1024.
552cf1a3d47b checkin from browser
Claus Gittinger <cg@exept.de>
parents: 944
diff changeset
   575
                                n := outStream nextAvailableBytes:1024 into:buffer startingAt:1.
552cf1a3d47b checkin from browser
Claus Gittinger <cg@exept.de>
parents: 944
diff changeset
   576
552cf1a3d47b checkin from browser
Claus Gittinger <cg@exept.de>
parents: 944
diff changeset
   577
                                n > 0 ifTrue:[
552cf1a3d47b checkin from browser
Claus Gittinger <cg@exept.de>
parents: 944
diff changeset
   578
                                    self pushEvent:#processInput:n: with:buffer with:n.
552cf1a3d47b checkin from browser
Claus Gittinger <cg@exept.de>
parents: 944
diff changeset
   579
                                ] ifFalse:[
552cf1a3d47b checkin from browser
Claus Gittinger <cg@exept.de>
parents: 944
diff changeset
   580
                                    n == 0 ifTrue:[
552cf1a3d47b checkin from browser
Claus Gittinger <cg@exept.de>
parents: 944
diff changeset
   581
                                        outStream atEnd ifTrue:[
552cf1a3d47b checkin from browser
Claus Gittinger <cg@exept.de>
parents: 944
diff changeset
   582
                                            outStream close. outStream := nil.
552cf1a3d47b checkin from browser
Claus Gittinger <cg@exept.de>
parents: 944
diff changeset
   583
                                            inStream close.  inStream := nil.
552cf1a3d47b checkin from browser
Claus Gittinger <cg@exept.de>
parents: 944
diff changeset
   584
                                            
552cf1a3d47b checkin from browser
Claus Gittinger <cg@exept.de>
parents: 944
diff changeset
   585
                                            Processor activeProcess terminate.
552cf1a3d47b checkin from browser
Claus Gittinger <cg@exept.de>
parents: 944
diff changeset
   586
                                        ]
926
df8d2a821687 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 925
diff changeset
   587
                                    ]
df8d2a821687 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 925
diff changeset
   588
                                ]
914
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
                    ]
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   592
                ]
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   593
            ] valueOnUnwindDo:[
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   594
                readerProcess := nil    
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   595
            ]
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   596
        ] fork.
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
    "
934
b450dbaeedac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 933
diff changeset
   600
     VT100TerminalView openShell
914
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   601
    "
926
df8d2a821687 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 925
diff changeset
   602
948
b93aba7db15d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
   603
    "Modified: / 12.6.1998 / 20:59:05 / cg"
914
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   604
!
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   605
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   606
startShell
934
b450dbaeedac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 933
diff changeset
   607
    "start a shell on a pseudo terminal.
b450dbaeedac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 933
diff changeset
   608
     Also fork a reader process, to read the shells output and
948
b93aba7db15d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
   609
     tell me, whenever something arrives"
934
b450dbaeedac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 933
diff changeset
   610
914
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   611
    |p slaveFD execFdArray blocked exitStatus|
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   612
958
84710fbdfb28 create my view before starting a shell (to pass down windowID).
Claus Gittinger <cg@exept.de>
parents: 957
diff changeset
   613
    self create.  "/ need my windowID (to pass down in environment)
84710fbdfb28 create my view before starting a shell (to pass down windowID).
Claus Gittinger <cg@exept.de>
parents: 957
diff changeset
   614
914
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   615
    p := ExternalStream makePTYPair.
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   616
    p isNil ifTrue:[
915
f2c934efc4da checkin from browser
Claus Gittinger <cg@exept.de>
parents: 914
diff changeset
   617
        self warn:'cannot open pty'.
914
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   618
        ^ self.
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   619
    ].
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   620
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   621
    "/ p at:1 is the master;
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   622
    "/ p at:2 is the slave
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   623
    inStream := outStream := (p at:1).
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   624
    inStream buffered:false.
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   625
943
9eea2d5095b5 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 942
diff changeset
   626
    self defineWindowSize.
9eea2d5095b5 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 942
diff changeset
   627
914
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   628
    "/ fork a shell process on the slave-side
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   629
    slaveFD := (p at:2) fileDescriptor.
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   630
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   631
    execFdArray := Array with:slaveFD with:slaveFD with:slaveFD.
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   632
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   633
    blocked := OperatingSystem blockInterrupts.
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   634
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   635
    shellPid := Processor
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   636
               monitor:[
957
8c167c9ea5c0 also pass WINDOWID (if known) and SHELL in environment.
Claus Gittinger <cg@exept.de>
parents: 955
diff changeset
   637
                  |e shell cmd|
929
30a2a3329055 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 928
diff changeset
   638
942
1f4fa3a6faec send a sigWINCH whenever the views size changes.
Claus Gittinger <cg@exept.de>
parents: 940
diff changeset
   639
                  e := Dictionary new.
957
8c167c9ea5c0 also pass WINDOWID (if known) and SHELL in environment.
Claus Gittinger <cg@exept.de>
parents: 955
diff changeset
   640
                  e at:'TERM'     put:(self terminalType).
8c167c9ea5c0 also pass WINDOWID (if known) and SHELL in environment.
Claus Gittinger <cg@exept.de>
parents: 955
diff changeset
   641
                  e at:'LINES'    put:(numberOfLines printString).
8c167c9ea5c0 also pass WINDOWID (if known) and SHELL in environment.
Claus Gittinger <cg@exept.de>
parents: 955
diff changeset
   642
                  e at:'COLUMNS'  put:(numberOfColumns printString).
8c167c9ea5c0 also pass WINDOWID (if known) and SHELL in environment.
Claus Gittinger <cg@exept.de>
parents: 955
diff changeset
   643
                  drawableId notNil ifTrue:[
8c167c9ea5c0 also pass WINDOWID (if known) and SHELL in environment.
Claus Gittinger <cg@exept.de>
parents: 955
diff changeset
   644
                      e at:'WINDOWID' put:(drawableId address printString).
8c167c9ea5c0 also pass WINDOWID (if known) and SHELL in environment.
Claus Gittinger <cg@exept.de>
parents: 955
diff changeset
   645
                  ].
8c167c9ea5c0 also pass WINDOWID (if known) and SHELL in environment.
Claus Gittinger <cg@exept.de>
parents: 955
diff changeset
   646
8c167c9ea5c0 also pass WINDOWID (if known) and SHELL in environment.
Claus Gittinger <cg@exept.de>
parents: 955
diff changeset
   647
                  shell := OperatingSystem getEnvironment:'SHELL'.
8c167c9ea5c0 also pass WINDOWID (if known) and SHELL in environment.
Claus Gittinger <cg@exept.de>
parents: 955
diff changeset
   648
                  shell size == 0 ifTrue:[
8c167c9ea5c0 also pass WINDOWID (if known) and SHELL in environment.
Claus Gittinger <cg@exept.de>
parents: 955
diff changeset
   649
                      shell := '/bin/sh'.
8c167c9ea5c0 also pass WINDOWID (if known) and SHELL in environment.
Claus Gittinger <cg@exept.de>
parents: 955
diff changeset
   650
                  ].
8c167c9ea5c0 also pass WINDOWID (if known) and SHELL in environment.
Claus Gittinger <cg@exept.de>
parents: 955
diff changeset
   651
                  e at:'SHELL'  put:shell.
8c167c9ea5c0 also pass WINDOWID (if known) and SHELL in environment.
Claus Gittinger <cg@exept.de>
parents: 955
diff changeset
   652
                  cmd := shell asFilename baseName.
929
30a2a3329055 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 928
diff changeset
   653
914
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   654
                  OperatingSystem
957
8c167c9ea5c0 also pass WINDOWID (if known) and SHELL in environment.
Claus Gittinger <cg@exept.de>
parents: 955
diff changeset
   655
                      exec:shell
8c167c9ea5c0 also pass WINDOWID (if known) and SHELL in environment.
Claus Gittinger <cg@exept.de>
parents: 955
diff changeset
   656
                      withArguments:(Array with:cmd)
929
30a2a3329055 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 928
diff changeset
   657
                      environment:e
914
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   658
                      fileDescriptors:execFdArray
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   659
                      closeDescriptors:#()
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   660
                      fork:true
929
30a2a3329055 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 928
diff changeset
   661
                      newPgrp:true.
914
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   662
               ]
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   663
               action:[:status |
935
7ea0854209a5 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
   664
"/                  Transcript show:'pid:'; showCR:status pid.
7ea0854209a5 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
   665
"/                  Transcript show:'status:'; showCR:status status.
7ea0854209a5 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
   666
"/                  Transcript show:'code:'; showCR:status code.
7ea0854209a5 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
   667
"/                  Transcript show:'core:'; showCR:status core.
914
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   668
                  status stillAlive ifFalse:[
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   669
                      exitStatus := status.
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   670
                      OperatingSystem closePid:shellPid.
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   671
                      shellPid := nil.
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   672
                      self pushEvent:#shellTerminated
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   673
                  ].
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   674
               ].
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   675
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   676
    shellPid isNil ifTrue:[
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   677
        self halt.
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   678
        (p at:1) close.
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   679
        (p at:2) close.
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   680
    ].
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   681
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   682
    blocked ifFalse:[
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   683
        OperatingSystem unblockInterrupts
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   684
    ].
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   685
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   686
    self startReaderProcess.
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   687
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   688
    "
934
b450dbaeedac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 933
diff changeset
   689
     VT100TerminalView openShell
914
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   690
    "
929
30a2a3329055 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 928
diff changeset
   691
958
84710fbdfb28 create my view before starting a shell (to pass down windowID).
Claus Gittinger <cg@exept.de>
parents: 957
diff changeset
   692
    "Modified: / 13.6.1998 / 19:20:54 / cg"
914
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   693
! !
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   694
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   695
!TerminalView methodsFor:'menu'!
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   696
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   697
editMenu
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   698
    "return the views middleButtonMenu"
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   699
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   700
    <resource: #keyboard (#Copy #Paste #Print)>
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   701
    <resource: #programMenu>
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   702
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   703
    |items m sub shortKeys sensor|
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   704
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   705
    ((sensor := self sensor) notNil and:[sensor ctrlDown]) ifTrue:[
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   706
        items := #(
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   707
                        ('Interrupt'      doSendInterrupt)  
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   708
                  ).
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   709
    ] ifFalse:[
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   710
        items := #(
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   711
                        ('copy'         copySelection    Copy   )
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   712
                        ('paste'        pasteOrReplace   Paste  )
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   713
                        ('-'                                    )
951
a9e48f549763 fixed scroll-range
Claus Gittinger <cg@exept.de>
parents: 950
diff changeset
   714
                        ('font ...'     changeFont              )
a9e48f549763 fixed scroll-range
Claus Gittinger <cg@exept.de>
parents: 950
diff changeset
   715
                        ('-'                                    )
914
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   716
                        ('save as ...'  save             SaveAs )
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   717
                        ('print'        doPrint          Print  )
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   718
                  ).
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   719
    ].
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   720
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   721
    m := PopUpMenu itemList:items resources:resources.
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   722
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   723
    self hasSelection not ifTrue:[
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   724
        m disable:#copySelection.
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   725
    ].
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   726
    ^ m.
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   727
951
a9e48f549763 fixed scroll-range
Claus Gittinger <cg@exept.de>
parents: 950
diff changeset
   728
    "Modified: / 12.6.1998 / 22:33:33 / cg"
914
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   729
! !
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   730
940
16c955286510 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 938
diff changeset
   731
!TerminalView methodsFor:'misc'!
914
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   732
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   733
removeTrailingBlankLines
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   734
    ^ self
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   735
! !
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   736
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   737
!TerminalView methodsFor:'processing - input'!
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   738
933
de456e07697e much better asynchronous display
Claus Gittinger <cg@exept.de>
parents: 931
diff changeset
   739
processInput:buffer n:count
de456e07697e much better asynchronous display
Claus Gittinger <cg@exept.de>
parents: 931
diff changeset
   740
    1 to:count do:[:i |
de456e07697e much better asynchronous display
Claus Gittinger <cg@exept.de>
parents: 931
diff changeset
   741
        self nextPut:(buffer at:i).
de456e07697e much better asynchronous display
Claus Gittinger <cg@exept.de>
parents: 931
diff changeset
   742
    ].
948
b93aba7db15d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
   743
933
de456e07697e much better asynchronous display
Claus Gittinger <cg@exept.de>
parents: 931
diff changeset
   744
    (self sensor hasEvent:#processInput:n: for:self) ifFalse:[
de456e07697e much better asynchronous display
Claus Gittinger <cg@exept.de>
parents: 931
diff changeset
   745
        self endEntry.
de456e07697e much better asynchronous display
Claus Gittinger <cg@exept.de>
parents: 931
diff changeset
   746
        self makeCursorVisible.
de456e07697e much better asynchronous display
Claus Gittinger <cg@exept.de>
parents: 931
diff changeset
   747
    ].
de456e07697e much better asynchronous display
Claus Gittinger <cg@exept.de>
parents: 931
diff changeset
   748
de456e07697e much better asynchronous display
Claus Gittinger <cg@exept.de>
parents: 931
diff changeset
   749
    "Created: / 10.6.1998 / 17:26:09 / cg"
948
b93aba7db15d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
   750
    "Modified: / 12.6.1998 / 20:45:52 / cg"
914
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   751
! !
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   752
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   753
!TerminalView methodsFor:'queries'!
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   754
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   755
preferredExtent
951
a9e48f549763 fixed scroll-range
Claus Gittinger <cg@exept.de>
parents: 950
diff changeset
   756
    ^ (fontWidth * numberOfColumns + (leftMargin * 2))
a9e48f549763 fixed scroll-range
Claus Gittinger <cg@exept.de>
parents: 950
diff changeset
   757
      @ 
a9e48f549763 fixed scroll-range
Claus Gittinger <cg@exept.de>
parents: 950
diff changeset
   758
      (self heightForLines:25)
926
df8d2a821687 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 925
diff changeset
   759
951
a9e48f549763 fixed scroll-range
Claus Gittinger <cg@exept.de>
parents: 950
diff changeset
   760
    "Modified: / 12.6.1998 / 22:37:30 / cg"
929
30a2a3329055 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 928
diff changeset
   761
!
30a2a3329055 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 928
diff changeset
   762
30a2a3329055 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 928
diff changeset
   763
terminalType
30a2a3329055 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 928
diff changeset
   764
    ^ #dump
30a2a3329055 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 928
diff changeset
   765
30a2a3329055 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 928
diff changeset
   766
    "Modified: / 10.6.1998 / 14:47:03 / cg"
30a2a3329055 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 928
diff changeset
   767
    "Created: / 10.6.1998 / 16:22:30 / cg"
914
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   768
! !
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   769
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   770
!TerminalView methodsFor:'selection handling'!
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   771
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   772
paste:someText
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   773
    "paste - redefined to send the chars to the shell instead
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   774
     of pasting into the view"
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   775
950
9e5834388a79 fixed paste & command keys
Claus Gittinger <cg@exept.de>
parents: 948
diff changeset
   776
    |s nLines|
9e5834388a79 fixed paste & command keys
Claus Gittinger <cg@exept.de>
parents: 948
diff changeset
   777
9e5834388a79 fixed paste & command keys
Claus Gittinger <cg@exept.de>
parents: 948
diff changeset
   778
    s := someText.
9e5834388a79 fixed paste & command keys
Claus Gittinger <cg@exept.de>
parents: 948
diff changeset
   779
    s isString ifTrue:[
9e5834388a79 fixed paste & command keys
Claus Gittinger <cg@exept.de>
parents: 948
diff changeset
   780
        s := s asStringCollection
9e5834388a79 fixed paste & command keys
Claus Gittinger <cg@exept.de>
parents: 948
diff changeset
   781
    ] ifFalse:[
9e5834388a79 fixed paste & command keys
Claus Gittinger <cg@exept.de>
parents: 948
diff changeset
   782
        (s isKindOf:StringCollection) ifFalse:[
9e5834388a79 fixed paste & command keys
Claus Gittinger <cg@exept.de>
parents: 948
diff changeset
   783
            self warn:'selection (' , s class name , ') is not convertable to Text'.
9e5834388a79 fixed paste & command keys
Claus Gittinger <cg@exept.de>
parents: 948
diff changeset
   784
            ^ self
9e5834388a79 fixed paste & command keys
Claus Gittinger <cg@exept.de>
parents: 948
diff changeset
   785
        ]
9e5834388a79 fixed paste & command keys
Claus Gittinger <cg@exept.de>
parents: 948
diff changeset
   786
    ].
9e5834388a79 fixed paste & command keys
Claus Gittinger <cg@exept.de>
parents: 948
diff changeset
   787
    (nLines := s size) == 0 ifTrue:[^ self].
9e5834388a79 fixed paste & command keys
Claus Gittinger <cg@exept.de>
parents: 948
diff changeset
   788
    (nLines == 1 and:[(s at:1) size == 0]) ifTrue:[^ self].
9e5834388a79 fixed paste & command keys
Claus Gittinger <cg@exept.de>
parents: 948
diff changeset
   789
    s keysAndValuesDo:[:idx :line |
9e5834388a79 fixed paste & command keys
Claus Gittinger <cg@exept.de>
parents: 948
diff changeset
   790
        inStream nextPutAll:line.
9e5834388a79 fixed paste & command keys
Claus Gittinger <cg@exept.de>
parents: 948
diff changeset
   791
        idx ~~ nLines ifTrue:[
9e5834388a79 fixed paste & command keys
Claus Gittinger <cg@exept.de>
parents: 948
diff changeset
   792
            inStream nextPut:(Character return).
9e5834388a79 fixed paste & command keys
Claus Gittinger <cg@exept.de>
parents: 948
diff changeset
   793
        ]
9e5834388a79 fixed paste & command keys
Claus Gittinger <cg@exept.de>
parents: 948
diff changeset
   794
    ].
9e5834388a79 fixed paste & command keys
Claus Gittinger <cg@exept.de>
parents: 948
diff changeset
   795
9e5834388a79 fixed paste & command keys
Claus Gittinger <cg@exept.de>
parents: 948
diff changeset
   796
    "Modified: / 12.6.1998 / 22:12:47 / cg"
914
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   797
! !
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   798
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   799
!TerminalView class methodsFor:'documentation'!
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   800
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   801
version
958
84710fbdfb28 create my view before starting a shell (to pass down windowID).
Claus Gittinger <cg@exept.de>
parents: 957
diff changeset
   802
    ^ '$Header: /cvs/stx/stx/libwidg2/TerminalView.st,v 1.34 1998-06-13 17:22:26 cg Exp $'
914
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   803
! !