Neil Brown wrote:
On 08/07/10 09:08, Michael Mossey wrote:
data PlayState = PlayState
{ playState_cursor :: Int
, playState_verts :: [Loc]
, playState_len :: Int
, playState_doc :: MusDoc
}
Notice how often the characters "playState_" get typed. This would be
a great situation for Emacs abbreviations. When you define an
abbreviation in Emacs, such as defining "xps" to expand to
"PlayState", emacs will watch for the characters xps. It will then
replace "xps" with "PlayState" when you type a non-alphanumeric
character following "xps". So if I type "xps." the moment I hit "." it
changes to "PlayState."
But I would have a hard time using this feature with "playState_"
because it is always followed by an alphanumeric character.
What about auto-completion?
Generally I prefer static abbreviations rather than dynamic expansion or
auto-completion, because static abbreviations have predictable behavior.
I'm a bit obsessive-compulsive, so I get annoyed when, say,
pl<expand-key> expands to something shorter than I expected. With static
abbreviations, behavior is 100% predictable. The abbreviations I choose,
like "xps" follow a convention so they are easy to remember. They have
no capitals.
Plus the identifier before and after the period can be more generic and
reusable, and in that case dynamic expansion is more reliable, or I'm
more likely to benefit from defining a static abbreviation.
With that set of definitions, typing
pl<expand-key> should give you playState_ (it expands to the longest
unambigious expansion),
Hmm, when I use dabbrev-expand it expands to a complete identifier, but
you can keep invoking it to rotate through all compatible identifiers.
Maybe you are describing a mode I wasn't aware of.
I do use dabbrev-expand extensively, but once an identifier becomes very
common I make a static abbreviation.
and adding c<expand-key> should give you
playState_cursor. So you get the full thing for about five keystrokes,
without any worrying about alphanumeric vs non-alphanumeric.
For example, as soon as I define playState_crunch then the behavior of
dabbrev-expand changes. That's my complaint.
I have completion bound to tab in emacs (a la tab completion in the
shell): "(global-set-key (kbd "TAB") 'dabbrev-expand)" and am pretty
happy with this for Haskell coding.
Interesting, so you have abandoned it for indentation... but I guess
typing spaces works okay. Or do you do something else?
dabbrev-expand does not perform any
Haskell-specific context-sensitive completion -- it just picks words out
of open buffers, but I've found this to work to my satisfaction.
It does work quite well. One of the most successful "dumb algorithms" I
know.
Thanks,
Mike
_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe