python - 突出显示 Jupyter 单元中的部分代码
问题描述
有没有办法突出显示 Jupyter 细胞的某些行?类似于下图的东西(我用照片编辑器创建的):
我的意思不是用光标进行选择,而是永久性的。例如,当您想要突出显示新添加的代码时,这对于演示很有用。
解决方案
下面提供的 Jupyter 笔记本扩展允许您突出显示代码单元中的行范围。按如下方式安装并启用它:
$ jupyter nbextension install codehighlighter.js --user
$ jupyter nbextension enable codehighlighter --user
然后一个带有灯泡图标的按钮将出现在您的 Jupyter 笔记本工具栏上。按下该按钮将突出显示当前代码单元格中的选定行(或者,如果没有选择,则为当前行)。
亮点将与笔记本一起保存(作为单元元数据),但不会在笔记本(重新)打开时自动启用。为了显示保存的亮点,您必须按下恢复亮点按钮(带有条形图标的按钮)。
codehighlighter.js
define([
'base/js/namespace'
], function(
Jupyter
) {
function load_ipython_extension() {
var style = document.createElement('style');
style.type = 'text/css';
style.innerHTML = '.codehighlighter { background: yellow; }';
document.getElementsByTagName('head')[0].appendChild(style);
var highlight_code_in_cell = function (cell, from, to) {
var cm = cell.code_mirror;
for ( var lineno = from; lineno < to ; ++lineno )
cm.addLineClass(lineno, 'background', 'codehighlighter');
}
var highlight_selected_code = function () {
var cell = Jupyter.notebook.get_selected_cell();
var cm = cell.code_mirror;
var from = cm.getCursor('from');
var to = cm.getCursor('to');
var endLine = (to.ch > 0 ? to.line + 1 : to.line);
highlight_code_in_cell(cell, from.line, endLine);
if ( ! cell.metadata.codehighlighter )
cell.metadata.codehighlighter = [];
cell.metadata.codehighlighter.push([from.line, endLine]);
};
var highlight_from_metadata = function() {
Jupyter.notebook.get_cells().forEach(function(cell) {
if (cell.metadata.codehighlighter) {
cell.metadata.codehighlighter.forEach(function(range) {
highlight_code_in_cell(cell, range[0], range[1]);
});
}
});
}
function registerAction(action_name, action) {
var prefix = 'codehighlighter';
return Jupyter.actions.register(action, action_name, prefix);
}
var hilite_code = registerAction('highlight-code', {
icon: 'fa-lightbulb-o',
help : 'Highlight selected code',
help_index : 'zz',
handler : highlight_selected_code
});
var restore_hilites = registerAction('restore-highlights', {
icon: 'fa-bars',
help : 'Restore highlights',
help_index : 'zz',
handler : highlight_from_metadata
});
Jupyter.toolbar.add_buttons_group([hilite_code, restore_hilites]);
}
return {
load_ipython_extension: load_ipython_extension
};
});
推荐阅读
- java - 为生成的 HeapDumpOnOutOfMemoryError 文件 .hprof 授予其他人读取权限
- node.js - 快速等待数据库连接
- python - 网页刮花重音和美丽汤中的其他特殊字符
- javascript - 如何在 jquery 中解析 JSON 对象数组
- c++ - C++向量默认成一个成员参数
- vim - 如何替换vim中的第二个相同的单词
- while-loop - SSIS - 如何从平面文件插入到具有日期范围的 OLE DB?
- spring-boot - spring安全登录时如何将密码大写?
- ios - 如何检查 iPhone XR 上是否存在“Haptic Touch”?
- bokeh - 如何构建一个简单的 django 实时仪表板