在 Jupyter Notebook 笔记本中,将 Markdown 或标题类型分配给单元格时立即进入编辑模式

In Jupyter notebook notebook, going into editing mode immediately when assigning Markdown or headings types to cells

我想配置我的 Jupyter notebook(Firefox,OSX,尽管这应该无关紧要)的行为如下:

当单元格被分配 Markdown 或标题 class 时,它应该立即切换到编辑模式。在标题的情况下,光标应位于 之后 井号。

单元格应在失去焦点(模糊)时自动呈现。

总体思路是让笔记本以 "less modal" 方式运行;不像 vi,而更像 Emacs 和 Mathematica 笔记本。

大概这可以通过向 custom.js 添加键绑定代码来完成。

谢谢!

(假设默认配置文件和类Unix系统),以下代码进入~/.ipython/profile_default/static/custom/custom.js

$([IPython.events]).on("app_initialized.NotebookApp", function () { 

/* this is a utility function */
function set_editable_heading(event, level){
    event.notebook.command_mode();
    event.notebook.to_heading(undefined, level);
    event.notebook.edit_mode();

    var cm = event.notebook.get_selected_cell().code_mirror;
    cm.setCursor({line:0, ch: level+1 });
    cm.on("blur", function(){ 
        event.notebook.get_selected_cell().render(); 
    });
    return false;
}

/* ... and analogously for other heading levels and for the command mode 
   (... command_shortcuts.add_shortcut() )
 */
IPython.keyboard_manager.edit_shortcuts.add_shortcut('ctrl-1', {
    help: 'Set cell to Heading 1, editable',
    handler: function (event) {
        set_editable_heading(event, 1);
        return false;
    }
});

IPython.keyboard_manager.edit_shortcuts.add_shortcut('ctrl-m', {
    help: 'Set cell to markdown, editable',
    handler: function (event) {
        event.notebook.command_mode();
        event.notebook.to_markdown();

        event.notebook.get_selected_cell().code_mirror.on("blur", function(){ 
            event.notebook.get_selected_cell().render(); 
        });

        event.notebook.edit_mode();
        return false;
    }
});

return true; 
});