На www.smalltalking.net можно найти полезное дополнение, позволяющее по сокращениям и нажатию Ctrl+Shift+Space вводить стандартные конструкции. Называется оно Abreviations (да, ошибка в названии ;-)).
Но сразу обращает внимание то, что курсор становится сразу после выражения и все время приходится позиционировать в нужное место, чтобы ввести необходимый код. Например, в выражении ifTrue: [] нужно переместиться внутрь скобок.
Для сокращения числа манипуляций можно сделать следующее - задавать начальную позицию курсора внутри выражениея символом * (звездочка). Имеющиеся конструкции перепишутся следующим образом:
AbreviationsManager>>addAndresAbreviations self at: 'it' put: 'ifTrue: [*]'; at: 'itf' put: 'ifTrue: [*] ifFalse: []'; at: 'if' put: 'ifFalse: [*]'; at: 'intf' put: 'isNil ifTrue: [*] ifFalse: []'; at: 'inf' put: 'isNil ifFalse: [*]'; at: 'int' put: 'isNil ifTrue: [*]'; at: 'ai' put: 'AbreviationsManager current inspect'; at: 'do' put: 'do: [:e | *].'; at: 'sel' put: 'select: [:e | *].'; at: 'col' put: 'collect: [:e | *].'; at: 'inj0' put: 'inject: 0 into: [:acc :e | *].'; at: 'inj' put: 'inject: * into: [:acc :e | ].'; at: 'sh' put: 'self halt.'; at: 'ts' put: 'Transcript show: '; at: 'np' put: 'nextPut: '; at: 'npa' put: 'nextPutAll: '; at: 'wst' put: 'when: #* send: # to:#'; at: 'ini' put: 'initialize super initialize. '; at: 'newi' put: 'new ^super new initialize'
И код, реализующий новую возможность выглядит так:
AbreviationsManager>>replaceAbreviationIn: aWorkspace | abreviation selRange caretPos expression selectionStart | abreviation := self wordNextToCaretIn: aWorkspace ifNone: [^self]. expression := self at: abreviation ifAbsent: [^self]. caretPos := expression indexOf: $* ifAbsent: [expression size + 1]. caretPos < expression size ifTrue: [expression := expression reject: [:c | c = $*]]. selectionStart := aWorkspace view selectionRange start. aWorkspace replaceSelection: expression. aWorkspace view caretPosition: selectionStart + caretPos - 1
Теперь осталось только подобрать свой набор сокращений.
27.03.2003, Владимир Лешкевич.