.
"*
* $Header$
*
* sample private.rc - file
*
* a copy of this file can (should) reside in your home or
* current directory - put all private preferences in here.
* notice, you will find some things enclosed in
* ... getLoginName = 'claus' ifTrue:[
*
* these are my personal preferrences which will be
* ignored in your environment, but are taken in mine.
* That way, I dont have to maintain two different 'private.rc' files.
* (you may want to have a look into it - some is of general interrest)
*"
"/
"/ this turns off information messages from classes
"/ (such as 'D8IMAGE: allocating colors ...'
"/
"/ Object infoPrinting:false.
Object infoPrinting:true.
"/
"/ this turns off information messages from the VM
"/ (such as 'MEM: chitty chatty ...'
"/
"/ ObjectMemory infoPrinting:false.
ObjectMemory infoPrinting:true.
"/
"/ this turns off error/fatal messages from the VM
"/ (it does not really make sense to turn them off)
"/
"/ Smalltalk debugPrinting:false.
"/
"/ set the package for fileIns done below
"/
Project notNil ifTrue:[
Project setDefaultProject.
Project current packageName:#'goody-fileIn'.
].
!
"/ a kludge: some Xservers send #Delete for both the backspace
"/ and the Delete key. In this case, we use the Backspace function
"/ for both keys. If your Xserver does not do this (it should not)
"/ remove or comment the following 'bindValue:#BackSpace'-line:
"/
|map macros|
map := Display keyboardMap.
map bindValue:#BackSpace to:#Delete.
"/
"/ my personal preferences - make it unconditional if you like them
"/
OperatingSystem getLoginName = 'claus' ifTrue:[
map bindValue:#Compose to:#'Control_R'. "/ remove this line, if your keyboard has a compose-key
"/
"/ convenient functions on the keyboard
"/
map bindValue:#Again to:#F1.
map bindValue:#UserInterrupt to:#Break.
map bindValue:#PrintIt to:#Print. "/ called PrintScreen on most keyboards
map bindValue:#InspectIt to:#Execute. "/ called SysReq on most keyboards
"/
"/ have F5 paste the output of a selected unix command ..
"/ have CtrlTab toggle between 4 and 8 col tab setting
"/ F6/F7 is cool (not available on all systems):
"/ F6 sends the selection to spell ,
"/ F7 locates the next spelling error and searches for these word(s)
"/ F10 indents selection by 4
"/ F9 undents selection by 4
"/
"/ F3 comments a (multiline) selection
"/ F4 uncomments a (multiline) selection
"/
macros := Smalltalk at:#FunctionKeySequences.
macros isNil ifTrue:[
macros := IdentityDictionary new.
Smalltalk at:#FunctionKeySequences put:macros.
].
"/ replace selection by unix command
macros at:#F99 put:'
"replace selection by
corresponding
unix commands output"
|sel|
sel := self selection.
sel notNil ifTrue:[
self replace:
(PipeStream readingFrom:(sel asString))
contents asString
]'.
"/ toggle tabs
macros at:#F98 put:'
"toggle between 4-col
and 8-col tabs"
(tabPositions == self class tab4Positions)
ifTrue:[self setTab8]
ifFalse:[self setTab4]'.
"/ get next spelling error, and select it
macros at:#F97 put:'
|errs thisErr sl sc|
thisErr := Smalltalk at:#''_thisError''.
thisErr isNil ifTrue:[
errs := Smalltalk at:#''_spellOutput''.
(errs notNil and:[errs notEmpty]) ifTrue:[
thisErr := errs removeFirst.
errs isEmpty ifTrue:[Smalltalk removeKey:''_spellOut'']
].
Smalltalk at:#''_lastErrLine'' put:1.
Smalltalk at:#''_lastErrCol'' put:1.
].
thisErr notNil ifTrue:[
sl := Smalltalk at:#''_lastErrLine''.
sc := Smalltalk at:#''_lastErrCol''.
self searchForwardFor:thisErr
startingAtLine:sl col:sc
ifFound:[:fl :fc | self selectWordAtLine:fl col:fc.
Smalltalk at:#''_lastErrLine'' put:fl.
Smalltalk at:#''_lastErrCol'' put:fc+1]
ifAbsent:[self device beep]
]'.
"/ send contents to spell; remember spelling errors
"/ does not work on all systems (some do not have spell ...)
macros at:#F96 put:'
|p f s|
f := Filename newTemporary. s := f writeStream.
s nextPutAll:self contents asString.
s close.
p := PipeStream readingFrom:''spell '' , f pathName.
Smalltalk at:#''_spellOutput'' put:p contents asString asCollectionOfLines.
p close.
self information:''F7 positions on the next spelling error''.
'.
"/ indent by 4
macros at:#F95 put:'
"indent selected line-range
by 4 spaces (i.e. to the right)"
self selectionStartLine to:self selectionEndLine-1 do:[:lineNr |
|line|
line := self listAt:lineNr.
line notNil ifTrue:[
line notEmpty ifTrue:[
line := '' '' , line.
self at:lineNr put:line
]
]
]
'.
"/ undent by 4
macros at:#F94 put:'
"undent selected line-range
by 4 spaces (i.e. to the left)"
self selectionStartLine to:self selectionEndLine-1 do:[:lineNr |
|line|
line := self listAt:lineNr.
line notNil ifTrue:[
line notEmpty ifTrue:[
(line startsWith:'' '') ifTrue:[
line := line copyFrom:5.
self at:lineNr put:line
]
]
]
]
'.
map bindValue:#CmdF99 to:#F5.
map bindValue:#CmdF98 to:#CtrlTab.
"/ map bindValue:#CmdF97 to:#F7.
"/ map bindValue:#CmdF96 to:#F6.
map bindValue:#CmdF95 to:#F10.
map bindValue:#CmdF94 to:#F9.
map bindValue:#CommentSelection to:#F3.
map bindValue:#UncommentSelection to:#F4.
"/
"/ since some of my machines have german keyboards ;-)
"/ and I like to be able to edit my files on all machines,
"/ I need a translation in both ways.
"/ you'd normally not define things in both directions.
"/
"/ actually, these things belong into d_xxx.rc ...
"/
"/ german national characters on a US keyboard:
"/
map bindValue:(Character value:16rFC) to:#'Cmd['.
map bindValue:(Character value:16rE4) to:#'Cmd'''.
map bindValue:(Character value:16rF6) to:#'Cmd;'.
map bindValue:(Character value:16rDC) to:#'Cmd{'.
map bindValue:(Character value:16rC4) to:#'Cmd"'.
map bindValue:(Character value:16rD6) to:#'Cmd:'.
map bindValue:(Character value:16rDF) to:#'Cmd-'.
"/
"/ US characters on german keyboard:
"/
map bindValue:$[ to:#'Alt['.
map bindValue:$] to:#'Alt]'.
map bindValue:$| to:#'Alt|'.
map bindValue:${ to:#'Alt{'.
"/
"/ no matter what the 'display.rc' says:
"/ I want my #iris style ...
"/
View defaultStyle:#iris
].
"/ add my private directories to the searchPath ...
"/ This does not make sense in your environment.
"/ However, I leave the code here to show how its done.
"/
Smalltalk systemPath addFirst:'../..'.
OperatingSystem getLoginName = 'claus' ifTrue:[
Smalltalk systemPath addFirst:'/phys/clam/claus/smalltalk/not_delivered'.
Smalltalk systemPath addFirst:'/phys/clam/claus/smalltalk/private_classes'.
Smalltalk systemPath addFirst:'/phys/clam/claus/work/fileIn/not_delivered'.
Smalltalk systemPath addFirst:'../../libpro'.
].
"/ since smalltalk keeps track of which directories exist
"/ in the path, this cache has to be flushed whenever new directories
"/ are added to the path:
"/
Smalltalk flushPathCaches.
"/
"/ color allocation strategy:
"/
"/ the default is to allocate from the colormap as required.
"/ As long as the number of distinct colors used is less than the number
"/ of available colors (which is usually the case) this leads to better looking
"/ images.
"/ However, if many images are to be displayed simulatiously, images displayed
"/ first may steal too many colors required in images displayed later.
"/ In this case, it is better to preallocate some colors, and dither all images
"/ using theese. Of course, while making the worst case better, this makes
"/ the best case worse. You can decide ...
"/
"/ Color getColors6x6x4.
"/ The following loads some nice cursors; for example thumbsUp and thumbsDown
"/
"/ claus:
"/ I like those fancy cursors :-)
"/ if you think this is too 'childish', remove the line below ...
"/
"/
Smalltalk silentFileIn:'../goodies/Cursor-ST80Cursors.chg'.
"/ claus:
"/ I dont want those warnings about stx features being non-portable ...
"/ However, you should (at least when new to the system) see them.
"/ Once you get bored about them, make the below unconditional.
"/ (you can also turn them off in the NewLaunchers settings menu ...)
"/
OperatingSystem getLoginName = 'claus' ifTrue:[
Compiler warnSTXSpecials:false.
Compiler allowUnderscoreInIdentifier:true.
Compiler warnUnderscoreInIdentifier:false.
].
"/ this is a temporary kludge: specify the flags to be used
"/ when compiling via stc. Primitive compilation (from within the browser)
"/ is still experimental. So you better not care (yet)
"/ BTW: its only supported on UnixWare and SGI anyway
"/ (and not in the free demo release).
"/
Compiler stcCompilation:#default.
OperatingSystem getOSType = 'irix' ifTrue:[
Compiler stcCompilationFlags:'-I../../include +optinline -DGLX'.
] ifFalse:[
Compiler stcCompilationFlags:'-I../../include -I../../librun/VGL/vogl/src +optinline -DVGL'.
].
"/ experimental: try to always keep some bytes in the pocket
"/ this changes the memory policy, to start the background whenever
"/ freespace drops below 250k or 500k have been allocated since the last GC.
"/ AND to allocate more memory, if (after the collect) less than 1Mb is free.
"/ Doing so makes the system behave better if lots of memory is required
"/ for short periods of time, since it prepares itself for that
"/ during idle time. (I often walk around in the fileBrowser, loading big
"/ files like XWorkstation.st or SystemBrowser.st ....)
"/
"/ If you find this setup useful, remove the if, and make the
"/ statements in the block unconditional.
"/
OperatingSystem getLoginName = 'claus' ifTrue:[
ObjectMemory freeSpaceGCAmount:1000000.
ObjectMemory freeSpaceGCLimit:250000.
ObjectMemory incrementalGCLimit:500000.
ObjectMemory startBackgroundCollectorAt:5.
ObjectMemory startBackgroundFinalizationAt:5.
].
"/ experimental: configure the memory manager to quickly increase
"/ its oldSpace, as long as it stays below 8Mb (i.e. do not enter
"/ a blocking mark&sweep or compress, but go straight ahead increasing
"/ the oldSpace). Above that, behave as usual, i.e. try a GC first,
"/ then increase the oldSpace size if that did not help.
"/ If you have a machine with lots of (real) memory, you may want to
"/ increase the number. The value below should be ok for 16-32Mb machines.
"/
OperatingSystem getLoginName = 'claus' ifTrue:[
ObjectMemory fastMoreOldSpaceLimit:8*1024*1024.
ObjectMemory fastMoreOldSpaceAllocation:true.
].
!
"/ another experimental (and a secret for now, since I dont want
"/ you to play with those ;-)
"/ For now, this is experimental. Once the best numbers
"/ have been found, I'll hardwire them and document it ...
|a|
ObjectMemory newSpaceSize > (500*1024) ifTrue:[
a := #(nil nil nil nil -16 -4 -2 -2 0 0 16 nil) copy.
] ifFalse:[
"/ min max cpy /32 /16 /8 /4 /2 /4 /8 /16 /32 "
"/
"/ slow tenure - keeps objects longer in newSpace,
"/ producing more scavenge overhead, but releasing IGC somewhat
"/
"/ a := #(nil nil nil -100 -8 -4 -1 1 2 4 8 16 nil) copy.
"/ a := #(nil nil nil nil -16 -4 0 0 0 4 16 nil) copy.
"fast tenure"
"/
"/ fast tenure - moves objects earlier into oldSpace,
"/ releasing newSpace collector; however, the oldSpace IGC
"/ may have more work to do.
"/
a := #(nil nil nil nil -20 -8 -3 -1 -1 1 16 nil) copy.
].
ObjectMemory tenureParameters:a.
"/ set the package back to some useful default for programming
"/ this is the package token assigned (by default) to all new methods/classes
"/ (so you can use a browser on package=#private to find all of your new
"/ stuff easily. (the conditional on Project being nonNil is for stripped down
"/ systems without a Project class)
Project notNil ifTrue:[
Project setDefaultProject.
Project current packageName:#'private'.
].
!