Содержание сайта
Главная Новичку Цитаты Реализации Статьи Документация
Компании Программы Ссылки Обсуждение Обсуждение 2 Гостевая

Dolphin Abbreviations

На 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, Владимир Лешкевич.




Есть комментарии? Пишите.