[IPython-User] Swap enter and shift-enter in notebook?

Brian Granger ellisonbg@gmail....
Sun Aug 5 18:17:22 CDT 2012


The only problem is that at points, the logic is much more complex
that simple key->function bindings.  We often have to test multiple
things before triggering a handler.  There are also multiple layers of
event handlers that defer to one another in different situations.  I
have said this before: the keybindings were one of the most difficult
things to get right and are extremely fragile wrt to binding different
keys to different actions.

On Sun, Aug 5, 2012 at 4:07 PM, MinRK <benjaminrk@gmail.com> wrote:
>
>
> On Sun, Aug 5, 2012 at 4:03 PM, Michael McNeil Forbes
> <michael.forbes+ipython@gmail.com> wrote:
>>
>> On 2 Aug 2012, at 5:23 PM, Michael McNeil Forbes wrote:
>> <some code and instructions to swap enter and shift-enter (included
>> below)>
>>
>> Hi everyone. Please don't take my "solution" seriously.  I Tricked
>> myself
>> into thinking it worked, but it has some problems:
>>
>> 1) You need to modify files in your ~/.ipython directory on the server
>> machine.
>>     (You do not need to modify the server, but I don't yet see how to
>> inject js
>>      code from the client... but I virtually no js experience so maybe
>> there is a
>>      way).
>> 2) My solution of negating the shift flag is not a complete solution:
>> in particular
>>     after swapping, pressing "enter" will indeed execute the block,
>> but it will also
>>     insert a newline (I don't know how to suppress that yet).
>>
>> I probably need to do the swap earlier (in cellmirror maybe?) but in
>> any case, this
>> needs more work... Suggestions welcome:-)  I will drop a note if I
>> make progress
>> and/or a Pull Request when I get a chance to delve deep into javascript
>> (won't happen in the near future though).
>
>
> Indeed, and someone at SciPy had proposed to sprint on exactly this, though
> I don't know what kind of progress they made.  It is *definitely* the right
> approach, and a giant if/elif tree we have now is really never the way to
> go.
>
>>
>>
>> Thanks for the suggestions.  With some tweaks, I think notebook will
>> be a
>> killer addition to the python arsenal. (I have yet to play with the
>> parallel
>> features but am very excited.)
>>
>> Michael.
>>
>> > Le 3 août 2012 à 02:23, Michael McNeil Forbes a écrit :
>> >
>> >> On 2 Aug 2012, at 12:39 AM, Matthias Bussonnier wrote:
>> >>> Sorry for the brievty, answer from my phone.
>> >>>
>> >>> If you use 0.14 dev. you can overwrite ipython file without touching
>> >>> the server.
>> >>> Just add them into .ipython/profile/profile_xxx/
>> >>>
>> >>
>> >> This seems to work fine:
>> >> 1) Install IPython 0.14-dev from github on server.
>> >> 2) Copy notebook.js and codecell.js to ~/.ipython/profile/
>> >> profile_xxx/
>> >> static/js/ from
>> >>   https://raw.github.com/ipython/ipython/master/IPython/
>> >>   Note: this profile name must match the name of the profile on the
>> >> server. This is a
>> >>   little strange in terms of UI since the name of this profile is
>> >> not even visible
>> >
>> > usually you start your notebook with --profile=whatever
>> > if you don't say anything it will use…default
>> >
>> >
>> >>   from the web interface, but probably makes sense from a dev.
>> >> perspective to localize
>> >>   the effects.
>> >> 3) Swap the shift-flag near as follows
>> >>
>> >>        if (event.which == key.ENTER) {
>> >>            // MMF Customization: swap enter and shift-enter
>> >>            event.shiftKey = !event.shiftKey;
>> >>        }
>> >>
>> >>    Do this near the start of the following function in codecell.js
>> >>
>> >>       CodeCell.prototype.handle_codemirror_keyevent = function
>> >> (editor, event) {
>> >>
>> >>    and near the start of the following block in notebook.js
>> >>
>> >>       $(document).keydown(function (event) {
>> >>
>> >> While I am at it I might add a sequence for joining two adjacent
>> >> blocks.  Is there
>> >> a function that will do this simply?
>> >
>> > IPython.notebook.merge_cell_above();
>> > IPython.notebook.merge_cell_below();
>> >
>> > is IMHO what you want.
>> Thanks.  Will try.
>>
>> > if you ever want to refactor the javascript and
>> > make something that allows to easily configure the keybindings (dict
>> > of {key:function}) for example
>> > we love Pull requests.
>>
>> This will require some javascript retooling on my part, so won't
>> happen in the near future, but when
>> I have some time, I will attempt this.  I love github's code review
>> feature for PR's which is a
>> strong motivation to contribute:-)
>>
>> _______________________________________________
>> IPython-User mailing list
>> IPython-User@scipy.org
>> http://mail.scipy.org/mailman/listinfo/ipython-user
>
>
>
> _______________________________________________
> IPython-User mailing list
> IPython-User@scipy.org
> http://mail.scipy.org/mailman/listinfo/ipython-user
>



-- 
Brian E. Granger
Cal Poly State University, San Luis Obispo
bgranger@calpoly.edu and ellisonbg@gmail.com


More information about the IPython-User mailing list