I've been using SBCL with a copy of SLIME that I checked out on March 4. I was quite happy to see that when I evaluated
(setf (readtable-case *readtable*) :invert)
SLIME didn't die. However, there are some weird bits, especially symbol completion, which seems to work for oneword symbols, but not multi-word-symbols. I've slowly come to the realization that I'm one of only a few Lispers who regularly works with case-inverted readtables, so I'm guessing not much thought has been put into this question. For you all who know the insides of SLIME, I'm wondering if it would be much work to get SLIME to be inverted-case freindly, or if a couple well-placed WITH-STANDARD-IO-SYNTAX's would do it.
[ A 5-second summary of inverted readtable-case, in case you were headed for the CLHS:
(setf (readtable-case *readtable*) :invert) (string 'foo) => "FOO" (string 'FOO) => "foo" (string 'Foo) => "Foo" ]
"Thomas F. Burdick" tfb@OCF.Berkeley.EDU writes:
I've been using SBCL with a copy of SLIME that I checked out on March 4. I was quite happy to see that when I evaluated
(setf (readtable-case *readtable*) :invert)
SLIME didn't die. However, there are some weird bits, especially symbol completion, which seems to work for oneword symbols, but not multi-word-symbols. I've slowly come to the realization that I'm one of only a few Lispers who regularly works with case-inverted readtables, so I'm guessing not much thought has been put into this question. For you all who know the insides of SLIME, I'm wondering if it would be much work to get SLIME to be inverted-case freindly, or if a couple well-placed WITH-STANDARD-IO-SYNTAX's would do it.
No, we didn't think much about this issue. The problems with symbol completion are probably not so much related to the reader/printer settings, but to some inconsistent use of char-equal/char=/eql in our code.
It's not entirely obvious to me what inverted-case friendly completion means, so here some questions. Assume we have the symbols foo, Foo, FOO and FLOAT. What are the preferred expansions for f?
f => foo f => Foo, FOO, FLOAT f => Foo, foo, float f => FOO, Foo, foo, float
Helmut Eller writes:
It's not entirely obvious to me what inverted-case friendly completion means, so here some questions. Assume we have the symbols foo, Foo, FOO and FLOAT. What are the preferred expansions for f?
I think the answer would be the same for both case-preserving modes (:invert and :preserve): to complete only to the symbols that match casewise, too. So, for :invert, it would be:
f => foo (symbol-name "FOO"), float (symbol-name "FLOAT") F => FOO (symbol-name "foo"), Foo (sybol-name "Foo")
"Thomas F. Burdick" tfb@OCF.Berkeley.EDU writes:
I think the answer would be the same for both case-preserving modes (:invert and :preserve): to complete only to the symbols that match casewise, too. So, for :invert, it would be:
f => foo (symbol-name "FOO"), float (symbol-name "FLOAT") F => FOO (symbol-name "foo"), Foo (sybol-name "Foo")
Yes, makes sense. The latest CVS version should work better with case-inverting. Please give it a try.
Thank you for the suggestions.
Helmut.
Helmut Eller writes:
"Thomas F. Burdick" tfb@OCF.Berkeley.EDU writes:
I think the answer would be the same for both case-preserving modes (:invert and :preserve): to complete only to the symbols that match casewise, too. So, for :invert, it would be:
f => foo (symbol-name "FOO"), float (symbol-name "FLOAT") F => FOO (symbol-name "foo"), Foo (sybol-name "Foo")
Yes, makes sense. The latest CVS version should work better with case-inverting. Please give it a try.
Fantastic! I used it all today, and everything completed just right :-)