Hey,

2010/7/5 Lee Spector <lspec...@hampshire.edu>:
>
> On Jul 4, 2010, at 4:10 PM, Laurent PETIT wrote:
>> So there are 2 possibilities:
>>  a. I create an additional "configuration parameter" so that anybody
>> can choose if he wants the Tab key to behave "normally" or to be bound
>> to the "reindent line" feature. And I make this "structural editing
>> mode-independent". The next question is: which default state for this
>> configuration parameter ?
>>  b. I move the feature back to "default mode". No additional
>> configuration parameter.
>>
>> My preference would go for b. [etc.]
>
> I would be happy with either, although my preference would also be b. I have 
> no use for tab aside for indentation in Clojure code, so it's okay with me if 
> it always means "re-indent this line." BTW if it's possible to make it 
> "re-indent this line or, if there's a selection, all of the lines in the 
> selection" then that would be even better.

I guess I could make the Tab-as-indent-line behavior go back to the
default mode, and introduce the
Esc.-as-no-interpretation-by-the-editor-for-the-nex-keystroke . So
people wanting to insert a real tab could do it by first hitting the
Esc. key first.

>> Currently I can say that the strict mode is not totally feature
>> complete. I intend to provide some "escape" key, which would allow
>> "escaping the next typed character from the strict mode evaluation".
>> This escape key may well end up being the Esc. key. If you were
>> provided with this way to, some times, really add, insert or delete
>> this damn ")", would you reexamine adopting the strict mode ?
>
> I guess I'd give it a whirl, but really the issue here is that I'd like to 
> think just about the code when I'm typing it, and not some combination of the 
> code and "what the editor is going to think of it or going to type for me so 
> I have to remember not to type it, and instead to move around what it types, 
> etc." In other words, I would prefer it if the only characters that show up 
> in the buffer are the ones that I type. I love feedback, which I get through 
> auto-indentation and auto-coloring, but I personally don't like it when an 
> editor messes with the actual characters that I type. I guess it would be 
> better if there was a way to disable this "helpfulness" on a per-use basis, 
> but I'd rather if it just wasn't there or if I could turn it off completely.

Maybe you're not "embracing" the source-code as data to its full
extent ? I was not -and still am not- an emacs/paredit.el user, but
now I can't go back to the default mode. I'm thinking about my code
more and more in terms of forms, not in terms of a begin-to-end flow
of characters. Just to give you a powerful example :

I have this code:
(if true
  (foo bar)
  (baz))

Now I have a spy function I want to apply to foo. This function will
print the value of foo, and then return the value of foo. With
structural editing, I do the following sequence: select via structural
selection "(foo bar)", hit the "(" key to wrap "(foo bar)" with
balanced parens, type "spy " and voilà : (consider pipe is the cursor,
double pipe is a selection)
"  |(foo bar)" -> hit Shift+Alt+Right -> "|(foo bar)|" -> hit "(" ->
"(|(foo bar))" -> type "spy " -> "(spy (foo bar))"

Now you have debugged and I want to get rid of the spy call. What I
want to do is make the (foo...) call replace (raise over) its parent
form. Easy with the "raise over" structural edition command. I must
just go in front of the (foo..) call, and call the function:
"(spy |(foo bar))" -> hit Alt+R (R as in Raise over) -> "|(foo bar)" ! !

And of course this works even if the (foo ...) form is very long,
dispatched on several lines, etc. :-)


>> Oh, this for sure is a bug ! Lau Jensen opened an issue for it (
>> http://code.google.com/p/counterclockwise/issues/detail?id=114 ),
>> which I was not able to reproduce on my side. With the help of this
>> new input, I'll try to reproduce -and then eradicate- it!
>
> Great!

btw, now fixed in my local branch !

>>> In both modes auto-indentation seems to be oddly global, with a mismatched 
>>> bracket anywhere in the buffer turning off all auto-indentation everywhere. 
>>> In other lispy editors that I've used I think that the indentation has 
>>> always been determined only from the code *before* the cursor and only back 
>>> to the beginning of the current definition.
>>
>> That's, unfortunately, a current limitation of the implementation.
>> We'll try to work on this, but give no promise for the short term.
>
> There will be an interaction between this and the automatic insertion. If you 
> get rid of automatic insertion (which I would prefer) then if the I type 
> "(defn foo" and hit return then the parentheses will be unbalanced 
> (globally), so unless this issue is resolved the next line couldn't be 
> indented at all. That wouldn't be very helpful.

Sincerely, I'll make everything in my power to get it back.

>> The default "reindent line" keyboard shortcut in Eclipse is Ctrl+I.
>> Would this be acceptable to you ? I chose Tab because emacs did this,
>> and I found this easier to type than Ctrl+I, given that we may type
>> this quite a lot ?
>
> Agreed. I'd say stick with tab unless there's a reason not to. Especially if 
> you have to do it once per line it would be a bit cumbersome to have to do a 
> two key combo on each line in order to re-indent a whole definition.
>
>>
>>> working to re-indent the current line and with the indentation determined 
>>> only from the text before the insertion point, back to the beginning of the 
>>> current definition (as in emacs, etc.). I would also personally prefer to 
>>> be able to turn off automatic pair insertion entirely -- maybe I'll get 
>>> used to it, but I'm not at all sure about that (and if I do then I'll 
>>> probably end up leaving out closing brackets when I write code 
>>> elsewhere...).
>>
>> Yes, in the default mode, I've had reports that the automatic
>> insertion is getting tedious to work with, since you don't jump after
>> the closing paren. Or maybe I could make it "jump after the closing
>> paren" only if between the cursor and the closing paren, only spaces
>> (or nothing at all) are present ? But I can already hear some people
>> tell they really wanted to insert a new closing paren, ... :)
>
> My own view of this is that you're trying to do something cool here, but it's 
> too cool. When I am typing code I have an image of the code in my head and 
> the simplest thing is just to type all of those characters, not to type a 
> subset while keeping in mind which other ones the editor will type for me.

In fact - but maybe I'm saying that because "it's my baby and I'm used
to his strengths and weaknesses" :-) -, when in Strict mode, I don't
see the {, (, ", [ keys as characters anymore: they are commands for
structurally editing the code: ( means create a new block, not add the
( character. ) means jump to the end of the ancestor ) (not
necessarily the parent form). Maybe "switching" perspective to this
angle may help. But I can understand that it may resemble "dark
magic", so maybe explaining it a little bit more may help.


>If this can be made to work with auto-indenting (requiring that auto-indenting 
>works even if stuff after the insertion point is unbalanced -- and I 
>understand that's not straightforward in the current implementation), then 
>that would be best from my perspective.
>
>
> --
> Lee Spector, Professor of Computer Science
> School of Cognitive Science, Hampshire College
> 893 West Street, Amherst, MA 01002-3359
> lspec...@hampshire.edu, http://hampshire.edu/lspector/
> Phone: 413-559-5352, Fax: 413-559-5438
>
> Check out Genetic Programming and Evolvable Machines:
> http://www.springer.com/10710 - http://gpemjournal.blogspot.com/
>
> --
> You received this message because you are subscribed to the Google
> Groups "Clojure" group.
> To post to this group, send email to clojure@googlegroups.com
> Note that posts from new members are moderated - please be patient with your 
> first post.
> To unsubscribe from this group, send email to
> clojure+unsubscr...@googlegroups.com
> For more options, visit this group at
> http://groups.google.com/group/clojure?hl=en

-- 
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to clojure@googlegroups.com
Note that posts from new members are moderated - please be patient with your 
first post.
To unsubscribe from this group, send email to
clojure+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en

Reply via email to