TerminalView.st
author Claus Gittinger <cg@exept.de>
Fri, 12 Jun 1998 23:02:29 +0200
changeset 951 a9e48f549763
parent 950 9e5834388a79
child 954 4cef50a89ca1
permissions -rw-r--r--
fixed scroll-range
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
a9e48f549763 fixed scroll-range
Claus Gittinger <cg@exept.de>
parents: 950
diff changeset
   346
    "Modified: / 12.6.1998 / 22:58:35 / 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.
df8d2a821687 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 925
diff changeset
   495
914
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   496
    self initializeKeyboardSequences.
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   497
    list := OrderedCollection new:24 withAll:''.
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   498
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   499
    self initializeKeyboardMap.
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   500
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   501
    "
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   502
     VT52TerminalView openShell
926
df8d2a821687 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 925
diff changeset
   503
     VT100TerminalView openShell
914
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   504
    "
926
df8d2a821687 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 925
diff changeset
   505
948
b93aba7db15d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
   506
    "Modified: / 12.6.1998 / 20:39:02 / cg"
914
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   507
!
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   508
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   509
initializeKeyboardMap
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   510
    |ctrlKeys cmdKeys|
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   511
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   512
    "/ setup my own keyboardMap, where control-keys are
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   513
    "/ not translated.
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   514
    kbdMap := device keyboardMap copy.
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   515
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   516
    ctrlKeys := kbdMap keys select:[:key | key startsWith:'Ctrl'].
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   517
    ctrlKeys do:[:key | kbdMap removeKey:key].
950
9e5834388a79 fixed paste & command keys
Claus Gittinger <cg@exept.de>
parents: 948
diff changeset
   518
914
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   519
    cmdKeys := kbdMap keys select:[:key | key startsWith:'Cmd'].
950
9e5834388a79 fixed paste & command keys
Claus Gittinger <cg@exept.de>
parents: 948
diff changeset
   520
    cmdKeys do:[:key | 
9e5834388a79 fixed paste & command keys
Claus Gittinger <cg@exept.de>
parents: 948
diff changeset
   521
        (#(Copy Paste SaveAs Print) includes:(kbdMap at:key)) ifFalse:[
9e5834388a79 fixed paste & command keys
Claus Gittinger <cg@exept.de>
parents: 948
diff changeset
   522
            kbdMap removeKey:key
9e5834388a79 fixed paste & command keys
Claus Gittinger <cg@exept.de>
parents: 948
diff changeset
   523
        ]
9e5834388a79 fixed paste & command keys
Claus Gittinger <cg@exept.de>
parents: 948
diff changeset
   524
    ].
914
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   525
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   526
    kbdMap removeKey:#Delete ifAbsent:[].
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   527
    kbdMap removeKey:#BackSpace ifAbsent:[].
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   528
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   529
    "
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   530
     VT52TerminalView openShell
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   531
    "
950
9e5834388a79 fixed paste & command keys
Claus Gittinger <cg@exept.de>
parents: 948
diff changeset
   532
9e5834388a79 fixed paste & command keys
Claus Gittinger <cg@exept.de>
parents: 948
diff changeset
   533
    "Modified: / 12.6.1998 / 22:18:23 / cg"
914
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   534
!
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   535
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   536
initializeKeyboardSequences
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   537
    self subclassResponsibility.
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   538
!
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   539
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   540
keyboardMap
934
b450dbaeedac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 933
diff changeset
   541
    "return my keyboard map. This has control keys removed and
b450dbaeedac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 933
diff changeset
   542
     those will be passed unchanged to the shell"
b450dbaeedac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 933
diff changeset
   543
914
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   544
    ^ kbdMap
934
b450dbaeedac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 933
diff changeset
   545
b450dbaeedac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 933
diff changeset
   546
    "Modified: / 10.6.1998 / 17:46:59 / cg"
914
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   547
!
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   548
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   549
startReaderProcess
934
b450dbaeedac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 933
diff changeset
   550
    "Start a reader process, which looks for the commands output,
b450dbaeedac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 933
diff changeset
   551
     and sends me #peocessInput:n: events whenever something arrives."
b450dbaeedac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 933
diff changeset
   552
914
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   553
    readerProcess isNil ifTrue:[
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   554
        readerProcess := [
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   555
            [
947
e3baca36e6f7 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 946
diff changeset
   556
                self waitUntilVisible.
e3baca36e6f7 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 946
diff changeset
   557
940
16c955286510 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 938
diff changeset
   558
                Stream streamErrorSignal handle:[:ex |
16c955286510 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 938
diff changeset
   559
                    Transcript showCR:ex errorString.
16c955286510 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 938
diff changeset
   560
                    Transcript showCR:OperatingSystem lastErrorString.
16c955286510 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 938
diff changeset
   561
                ] do:[
926
df8d2a821687 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 925
diff changeset
   562
                    [true] whileTrue:[
df8d2a821687 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 925
diff changeset
   563
                        Object abortSignal handle:[:ex |
df8d2a821687 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 925
diff changeset
   564
                            self showCursor.
df8d2a821687 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 925
diff changeset
   565
                        ] do:[
948
b93aba7db15d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
   566
                            |buffer n|
b93aba7db15d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
   567
926
df8d2a821687 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 925
diff changeset
   568
                            outStream readWait.
945
552cf1a3d47b checkin from browser
Claus Gittinger <cg@exept.de>
parents: 944
diff changeset
   569
                            (self sensor hasKeyPressEventFor:self) ifTrue:[
552cf1a3d47b checkin from browser
Claus Gittinger <cg@exept.de>
parents: 944
diff changeset
   570
                                Processor yield
926
df8d2a821687 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 925
diff changeset
   571
                            ] ifFalse:[
945
552cf1a3d47b checkin from browser
Claus Gittinger <cg@exept.de>
parents: 944
diff changeset
   572
                                buffer := String new:1024.
552cf1a3d47b checkin from browser
Claus Gittinger <cg@exept.de>
parents: 944
diff changeset
   573
                                n := outStream nextAvailableBytes:1024 into:buffer startingAt:1.
552cf1a3d47b checkin from browser
Claus Gittinger <cg@exept.de>
parents: 944
diff changeset
   574
552cf1a3d47b checkin from browser
Claus Gittinger <cg@exept.de>
parents: 944
diff changeset
   575
                                n > 0 ifTrue:[
552cf1a3d47b checkin from browser
Claus Gittinger <cg@exept.de>
parents: 944
diff changeset
   576
                                    self pushEvent:#processInput:n: with:buffer with:n.
552cf1a3d47b checkin from browser
Claus Gittinger <cg@exept.de>
parents: 944
diff changeset
   577
                                ] ifFalse:[
552cf1a3d47b checkin from browser
Claus Gittinger <cg@exept.de>
parents: 944
diff changeset
   578
                                    n == 0 ifTrue:[
552cf1a3d47b checkin from browser
Claus Gittinger <cg@exept.de>
parents: 944
diff changeset
   579
                                        outStream atEnd ifTrue:[
552cf1a3d47b checkin from browser
Claus Gittinger <cg@exept.de>
parents: 944
diff changeset
   580
                                            outStream close. outStream := nil.
552cf1a3d47b checkin from browser
Claus Gittinger <cg@exept.de>
parents: 944
diff changeset
   581
                                            inStream close.  inStream := nil.
552cf1a3d47b checkin from browser
Claus Gittinger <cg@exept.de>
parents: 944
diff changeset
   582
                                            
552cf1a3d47b checkin from browser
Claus Gittinger <cg@exept.de>
parents: 944
diff changeset
   583
                                            Processor activeProcess terminate.
552cf1a3d47b checkin from browser
Claus Gittinger <cg@exept.de>
parents: 944
diff changeset
   584
                                        ]
926
df8d2a821687 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 925
diff changeset
   585
                                    ]
df8d2a821687 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 925
diff changeset
   586
                                ]
914
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   587
                            ]
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   588
                        ]
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
            ] valueOnUnwindDo:[
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   592
                readerProcess := nil    
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   593
            ]
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   594
        ] fork.
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   595
    ]
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   596
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   597
    "
934
b450dbaeedac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 933
diff changeset
   598
     VT100TerminalView openShell
914
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   599
    "
926
df8d2a821687 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 925
diff changeset
   600
948
b93aba7db15d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
   601
    "Modified: / 12.6.1998 / 20:59:05 / cg"
914
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   602
!
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   603
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   604
startShell
934
b450dbaeedac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 933
diff changeset
   605
    "start a shell on a pseudo terminal.
b450dbaeedac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 933
diff changeset
   606
     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
   607
     tell me, whenever something arrives"
934
b450dbaeedac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 933
diff changeset
   608
914
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   609
    |p slaveFD execFdArray blocked exitStatus|
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   610
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   611
    p := ExternalStream makePTYPair.
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   612
    p isNil ifTrue:[
915
f2c934efc4da checkin from browser
Claus Gittinger <cg@exept.de>
parents: 914
diff changeset
   613
        self warn:'cannot open pty'.
914
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   614
        ^ self.
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   615
    ].
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   616
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   617
    "/ p at:1 is the master;
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   618
    "/ p at:2 is the slave
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   619
    inStream := outStream := (p at:1).
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   620
    inStream buffered:false.
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   621
943
9eea2d5095b5 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 942
diff changeset
   622
    self defineWindowSize.
9eea2d5095b5 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 942
diff changeset
   623
914
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   624
    "/ fork a shell process on the slave-side
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   625
    slaveFD := (p at:2) fileDescriptor.
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   626
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   627
    execFdArray := Array with:slaveFD with:slaveFD with:slaveFD.
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   628
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   629
    blocked := OperatingSystem blockInterrupts.
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   630
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   631
    shellPid := Processor
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   632
               monitor:[
929
30a2a3329055 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 928
diff changeset
   633
                  |e|
30a2a3329055 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 928
diff changeset
   634
942
1f4fa3a6faec send a sigWINCH whenever the views size changes.
Claus Gittinger <cg@exept.de>
parents: 940
diff changeset
   635
                  e := Dictionary new.
1f4fa3a6faec send a sigWINCH whenever the views size changes.
Claus Gittinger <cg@exept.de>
parents: 940
diff changeset
   636
                  e at:'TERM'    put:(self terminalType).
1f4fa3a6faec send a sigWINCH whenever the views size changes.
Claus Gittinger <cg@exept.de>
parents: 940
diff changeset
   637
                  e at:'LINES'   put:nil.
1f4fa3a6faec send a sigWINCH whenever the views size changes.
Claus Gittinger <cg@exept.de>
parents: 940
diff changeset
   638
                  e at:'COLUMNS' put:nil.
929
30a2a3329055 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 928
diff changeset
   639
914
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   640
                  OperatingSystem
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   641
                      exec:'/bin/sh'
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   642
                      withArguments:#('sh')
929
30a2a3329055 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 928
diff changeset
   643
                      environment:e
914
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   644
                      fileDescriptors:execFdArray
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   645
                      closeDescriptors:#()
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   646
                      fork:true
929
30a2a3329055 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 928
diff changeset
   647
                      newPgrp:true.
914
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   648
               ]
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   649
               action:[:status |
935
7ea0854209a5 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
   650
"/                  Transcript show:'pid:'; showCR:status pid.
7ea0854209a5 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
   651
"/                  Transcript show:'status:'; showCR:status status.
7ea0854209a5 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
   652
"/                  Transcript show:'code:'; showCR:status code.
7ea0854209a5 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
   653
"/                  Transcript show:'core:'; showCR:status core.
914
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   654
                  status stillAlive ifFalse:[
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   655
                      exitStatus := status.
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   656
                      OperatingSystem closePid:shellPid.
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   657
                      shellPid := nil.
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   658
                      self pushEvent:#shellTerminated
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   659
                  ].
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   660
               ].
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   661
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   662
    shellPid isNil ifTrue:[
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   663
        self halt.
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   664
        (p at:1) close.
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   665
        (p at:2) close.
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   666
    ].
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   667
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   668
    blocked ifFalse:[
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   669
        OperatingSystem unblockInterrupts
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   670
    ].
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   671
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   672
    self startReaderProcess.
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   673
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   674
    "
934
b450dbaeedac checkin from browser
Claus Gittinger <cg@exept.de>
parents: 933
diff changeset
   675
     VT100TerminalView openShell
914
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   676
    "
929
30a2a3329055 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 928
diff changeset
   677
948
b93aba7db15d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
   678
    "Modified: / 12.6.1998 / 20:59:32 / cg"
914
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   679
! !
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   680
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   681
!TerminalView methodsFor:'menu'!
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   682
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   683
editMenu
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   684
    "return the views middleButtonMenu"
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   685
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   686
    <resource: #keyboard (#Copy #Paste #Print)>
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   687
    <resource: #programMenu>
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   688
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   689
    |items m sub shortKeys sensor|
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   690
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   691
    ((sensor := self sensor) notNil and:[sensor ctrlDown]) ifTrue:[
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   692
        items := #(
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   693
                        ('Interrupt'      doSendInterrupt)  
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   694
                  ).
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   695
    ] ifFalse:[
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   696
        items := #(
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   697
                        ('copy'         copySelection    Copy   )
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   698
                        ('paste'        pasteOrReplace   Paste  )
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   699
                        ('-'                                    )
951
a9e48f549763 fixed scroll-range
Claus Gittinger <cg@exept.de>
parents: 950
diff changeset
   700
                        ('font ...'     changeFont              )
a9e48f549763 fixed scroll-range
Claus Gittinger <cg@exept.de>
parents: 950
diff changeset
   701
                        ('-'                                    )
914
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   702
                        ('save as ...'  save             SaveAs )
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   703
                        ('print'        doPrint          Print  )
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   704
                  ).
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   705
    ].
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   706
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   707
    m := PopUpMenu itemList:items resources:resources.
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   708
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   709
    self hasSelection not ifTrue:[
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   710
        m disable:#copySelection.
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   711
    ].
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   712
    ^ m.
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
    "Modified: / 12.6.1998 / 22:33:33 / cg"
914
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   715
! !
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   716
940
16c955286510 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 938
diff changeset
   717
!TerminalView methodsFor:'misc'!
914
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   718
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   719
removeTrailingBlankLines
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   720
    ^ self
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   721
! !
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   722
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   723
!TerminalView methodsFor:'processing - input'!
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   724
933
de456e07697e much better asynchronous display
Claus Gittinger <cg@exept.de>
parents: 931
diff changeset
   725
processInput:buffer n:count
de456e07697e much better asynchronous display
Claus Gittinger <cg@exept.de>
parents: 931
diff changeset
   726
    1 to:count do:[:i |
de456e07697e much better asynchronous display
Claus Gittinger <cg@exept.de>
parents: 931
diff changeset
   727
        self nextPut:(buffer at:i).
de456e07697e much better asynchronous display
Claus Gittinger <cg@exept.de>
parents: 931
diff changeset
   728
    ].
948
b93aba7db15d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
   729
933
de456e07697e much better asynchronous display
Claus Gittinger <cg@exept.de>
parents: 931
diff changeset
   730
    (self sensor hasEvent:#processInput:n: for:self) ifFalse:[
de456e07697e much better asynchronous display
Claus Gittinger <cg@exept.de>
parents: 931
diff changeset
   731
        self endEntry.
de456e07697e much better asynchronous display
Claus Gittinger <cg@exept.de>
parents: 931
diff changeset
   732
        self makeCursorVisible.
de456e07697e much better asynchronous display
Claus Gittinger <cg@exept.de>
parents: 931
diff changeset
   733
    ].
de456e07697e much better asynchronous display
Claus Gittinger <cg@exept.de>
parents: 931
diff changeset
   734
de456e07697e much better asynchronous display
Claus Gittinger <cg@exept.de>
parents: 931
diff changeset
   735
    "Created: / 10.6.1998 / 17:26:09 / cg"
948
b93aba7db15d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 947
diff changeset
   736
    "Modified: / 12.6.1998 / 20:45:52 / cg"
914
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   737
! !
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   738
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   739
!TerminalView methodsFor:'queries'!
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   740
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   741
preferredExtent
951
a9e48f549763 fixed scroll-range
Claus Gittinger <cg@exept.de>
parents: 950
diff changeset
   742
    ^ (fontWidth * numberOfColumns + (leftMargin * 2))
a9e48f549763 fixed scroll-range
Claus Gittinger <cg@exept.de>
parents: 950
diff changeset
   743
      @ 
a9e48f549763 fixed scroll-range
Claus Gittinger <cg@exept.de>
parents: 950
diff changeset
   744
      (self heightForLines:25)
926
df8d2a821687 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 925
diff changeset
   745
951
a9e48f549763 fixed scroll-range
Claus Gittinger <cg@exept.de>
parents: 950
diff changeset
   746
    "Modified: / 12.6.1998 / 22:37:30 / cg"
929
30a2a3329055 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 928
diff changeset
   747
!
30a2a3329055 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 928
diff changeset
   748
30a2a3329055 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 928
diff changeset
   749
terminalType
30a2a3329055 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 928
diff changeset
   750
    ^ #dump
30a2a3329055 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 928
diff changeset
   751
30a2a3329055 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 928
diff changeset
   752
    "Modified: / 10.6.1998 / 14:47:03 / cg"
30a2a3329055 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 928
diff changeset
   753
    "Created: / 10.6.1998 / 16:22:30 / cg"
914
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   754
! !
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   755
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   756
!TerminalView methodsFor:'selection handling'!
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   757
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   758
paste:someText
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   759
    "paste - redefined to send the chars to the shell instead
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   760
     of pasting into the view"
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   761
950
9e5834388a79 fixed paste & command keys
Claus Gittinger <cg@exept.de>
parents: 948
diff changeset
   762
    |s nLines|
9e5834388a79 fixed paste & command keys
Claus Gittinger <cg@exept.de>
parents: 948
diff changeset
   763
9e5834388a79 fixed paste & command keys
Claus Gittinger <cg@exept.de>
parents: 948
diff changeset
   764
    s := someText.
9e5834388a79 fixed paste & command keys
Claus Gittinger <cg@exept.de>
parents: 948
diff changeset
   765
    s isString ifTrue:[
9e5834388a79 fixed paste & command keys
Claus Gittinger <cg@exept.de>
parents: 948
diff changeset
   766
        s := s asStringCollection
9e5834388a79 fixed paste & command keys
Claus Gittinger <cg@exept.de>
parents: 948
diff changeset
   767
    ] ifFalse:[
9e5834388a79 fixed paste & command keys
Claus Gittinger <cg@exept.de>
parents: 948
diff changeset
   768
        (s isKindOf:StringCollection) ifFalse:[
9e5834388a79 fixed paste & command keys
Claus Gittinger <cg@exept.de>
parents: 948
diff changeset
   769
            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
   770
            ^ self
9e5834388a79 fixed paste & command keys
Claus Gittinger <cg@exept.de>
parents: 948
diff changeset
   771
        ]
9e5834388a79 fixed paste & command keys
Claus Gittinger <cg@exept.de>
parents: 948
diff changeset
   772
    ].
9e5834388a79 fixed paste & command keys
Claus Gittinger <cg@exept.de>
parents: 948
diff changeset
   773
    (nLines := s size) == 0 ifTrue:[^ self].
9e5834388a79 fixed paste & command keys
Claus Gittinger <cg@exept.de>
parents: 948
diff changeset
   774
    (nLines == 1 and:[(s at:1) size == 0]) ifTrue:[^ self].
9e5834388a79 fixed paste & command keys
Claus Gittinger <cg@exept.de>
parents: 948
diff changeset
   775
    s keysAndValuesDo:[:idx :line |
9e5834388a79 fixed paste & command keys
Claus Gittinger <cg@exept.de>
parents: 948
diff changeset
   776
        inStream nextPutAll:line.
9e5834388a79 fixed paste & command keys
Claus Gittinger <cg@exept.de>
parents: 948
diff changeset
   777
        idx ~~ nLines ifTrue:[
9e5834388a79 fixed paste & command keys
Claus Gittinger <cg@exept.de>
parents: 948
diff changeset
   778
            inStream nextPut:(Character return).
9e5834388a79 fixed paste & command keys
Claus Gittinger <cg@exept.de>
parents: 948
diff changeset
   779
        ]
9e5834388a79 fixed paste & command keys
Claus Gittinger <cg@exept.de>
parents: 948
diff changeset
   780
    ].
9e5834388a79 fixed paste & command keys
Claus Gittinger <cg@exept.de>
parents: 948
diff changeset
   781
9e5834388a79 fixed paste & command keys
Claus Gittinger <cg@exept.de>
parents: 948
diff changeset
   782
    "Modified: / 12.6.1998 / 22:12:47 / cg"
914
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   783
! !
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   784
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   785
!TerminalView class methodsFor:'documentation'!
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   786
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   787
version
951
a9e48f549763 fixed scroll-range
Claus Gittinger <cg@exept.de>
parents: 950
diff changeset
   788
    ^ '$Header: /cvs/stx/stx/libwidg2/TerminalView.st,v 1.30 1998-06-12 21:02:18 cg Exp $'
914
7ac6d1a53bab initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   789
! !