<p>I&#39;d also really like a way to cat cells. I&#39;m always adding small cells together as I get further into a hack. No biggie, but it&#39;d be handy.</p>
<div class="gmail_quote">On Aug 6, 2012 12:20 AM, &quot;Brian Granger&quot; &lt;<a href="mailto:ellisonbg@gmail.com">ellisonbg@gmail.com</a>&gt; wrote:<br type="attribution"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
On Sun, Aug 5, 2012 at 4:03 PM, Michael McNeil Forbes<br>
&lt;<a href="mailto:michael.forbes%2Bipython@gmail.com">michael.forbes+ipython@gmail.com</a>&gt; wrote:<br>
&gt; On 2 Aug 2012, at 5:23 PM, Michael McNeil Forbes wrote:<br>
&gt; &lt;some code and instructions to swap enter and shift-enter (included<br>
&gt; below)&gt;<br>
&gt;<br>
&gt; Hi everyone. Please don&#39;t take my &quot;solution&quot; seriously.  I Tricked<br>
&gt; myself<br>
&gt; into thinking it worked, but it has some problems:<br>
&gt;<br>
&gt; 1) You need to modify files in your ~/.ipython directory on the server<br>
&gt; machine.<br>
&gt;     (You do not need to modify the server, but I don&#39;t yet see how to<br>
&gt; inject js<br>
&gt;      code from the client... but I virtually no js experience so maybe<br>
&gt; there is a<br>
&gt;      way).<br>
&gt; 2) My solution of negating the shift flag is not a complete solution:<br>
&gt; in particular<br>
&gt;     after swapping, pressing &quot;enter&quot; will indeed execute the block,<br>
&gt; but it will also<br>
&gt;     insert a newline (I don&#39;t know how to suppress that yet).<br>
<br>
This is a perfect example of the fragility that I mentioned.  The<br>
short answer is that the enter event is handled in multiple places and<br>
you will have to track all of those down and deal with their<br>
interactions.<br>
<br>
&gt; I probably need to do the swap earlier (in cellmirror maybe?) but in<br>
&gt; any case, this<br>
&gt; needs more work... Suggestions welcome:-)  I will drop a note if I<br>
&gt; make progress<br>
&gt; and/or a Pull Request when I get a chance to delve deep into javascript<br>
&gt; (won&#39;t happen in the near future though).<br>
<br>
You will definitely have to modify the code mirror event handling as well.<br>
<br>
&gt; Thanks for the suggestions.  With some tweaks, I think notebook will<br>
&gt; be a<br>
&gt; killer addition to the python arsenal. (I have yet to play with the<br>
&gt; parallel<br>
&gt; features but am very excited.)<br>
&gt;<br>
&gt; Michael.<br>
&gt;<br>
&gt;&gt; Le 3 août 2012 à 02:23, Michael McNeil Forbes a écrit :<br>
&gt;&gt;<br>
&gt;&gt;&gt; On 2 Aug 2012, at 12:39 AM, Matthias Bussonnier wrote:<br>
&gt;&gt;&gt;&gt; Sorry for the brievty, answer from my phone.<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; If you use 0.14 dev. you can overwrite ipython file without touching<br>
&gt;&gt;&gt;&gt; the server.<br>
&gt;&gt;&gt;&gt; Just add them into .ipython/profile/profile_xxx/<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; This seems to work fine:<br>
&gt;&gt;&gt; 1) Install IPython 0.14-dev from github on server.<br>
&gt;&gt;&gt; 2) Copy notebook.js and codecell.js to ~/.ipython/profile/<br>
&gt;&gt;&gt; profile_xxx/<br>
&gt;&gt;&gt; static/js/ from<br>
&gt;&gt;&gt;   <a href="https://raw.github.com/ipython/ipython/master/IPython/" target="_blank">https://raw.github.com/ipython/ipython/master/IPython/</a><br>
&gt;&gt;&gt;   Note: this profile name must match the name of the profile on the<br>
&gt;&gt;&gt; server. This is a<br>
&gt;&gt;&gt;   little strange in terms of UI since the name of this profile is<br>
&gt;&gt;&gt; not even visible<br>
&gt;&gt;<br>
&gt;&gt; usually you start your notebook with --profile=whatever<br>
&gt;&gt; if you don&#39;t say anything it will use…default<br>
&gt;&gt;<br>
&gt;&gt;<br>
&gt;&gt;&gt;   from the web interface, but probably makes sense from a dev.<br>
&gt;&gt;&gt; perspective to localize<br>
&gt;&gt;&gt;   the effects.<br>
&gt;&gt;&gt; 3) Swap the shift-flag near as follows<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt;        if (event.which == key.ENTER) {<br>
&gt;&gt;&gt;            // MMF Customization: swap enter and shift-enter<br>
&gt;&gt;&gt;            event.shiftKey = !event.shiftKey;<br>
&gt;&gt;&gt;        }<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt;    Do this near the start of the following function in codecell.js<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt;       CodeCell.prototype.handle_codemirror_keyevent = function<br>
&gt;&gt;&gt; (editor, event) {<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt;    and near the start of the following block in notebook.js<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt;       $(document).keydown(function (event) {<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; While I am at it I might add a sequence for joining two adjacent<br>
&gt;&gt;&gt; blocks.  Is there<br>
&gt;&gt;&gt; a function that will do this simply?<br>
&gt;&gt;<br>
&gt;&gt; IPython.notebook.merge_cell_above();<br>
&gt;&gt; IPython.notebook.merge_cell_below();<br>
&gt;&gt;<br>
&gt;&gt; is IMHO what you want.<br>
&gt; Thanks.  Will try.<br>
&gt;<br>
&gt;&gt; if you ever want to refactor the javascript and<br>
&gt;&gt; make something that allows to easily configure the keybindings (dict<br>
&gt;&gt; of {key:function}) for example<br>
&gt;&gt; we love Pull requests.<br>
&gt;<br>
&gt; This will require some javascript retooling on my part, so won&#39;t<br>
&gt; happen in the near future, but when<br>
&gt; I have some time, I will attempt this.  I love github&#39;s code review<br>
&gt; feature for PR&#39;s which is a<br>
&gt; strong motivation to contribute:-)<br>
&gt;<br>
&gt; _______________________________________________<br>
&gt; IPython-User mailing list<br>
&gt; <a href="mailto:IPython-User@scipy.org">IPython-User@scipy.org</a><br>
&gt; <a href="http://mail.scipy.org/mailman/listinfo/ipython-user" target="_blank">http://mail.scipy.org/mailman/listinfo/ipython-user</a><br>
<br>
<br>
<br>
--<br>
Brian E. Granger<br>
Cal Poly State University, San Luis Obispo<br>
<a href="mailto:bgranger@calpoly.edu">bgranger@calpoly.edu</a> and <a href="mailto:ellisonbg@gmail.com">ellisonbg@gmail.com</a><br>
_______________________________________________<br>
IPython-User mailing list<br>
<a href="mailto:IPython-User@scipy.org">IPython-User@scipy.org</a><br>
<a href="http://mail.scipy.org/mailman/listinfo/ipython-user" target="_blank">http://mail.scipy.org/mailman/listinfo/ipython-user</a><br>
</blockquote></div>