diff --git a/IPython/html/static/notebook/js/notebook.js b/IPython/html/static/notebook/js/notebook.js
index 492793b3a..818113877 100644
--- a/IPython/html/static/notebook/js/notebook.js
+++ b/IPython/html/static/notebook/js/notebook.js
@@ -207,9 +207,18 @@ define([
});
this.events.on('spec_changed.Kernel', function(event, data) {
- that.set_kernelspec_metadata(data);
+ that.metadata.kernelspec =
+ {name: data.name, display_name: data.display_name};
+ });
+
+ this.events.on('kernel_ready.Kernel', function(event, data) {
+ var kinfo = data.kernel.info_reply
+ var langinfo = kinfo.language_info || {};
+ if (!langinfo.name) langinfo.name = kinfo.language;
+
+ that.metadata.language_info = langinfo;
// Mode 'null' should be plain, unhighlighted text.
- cm_mode = data.codemirror_mode || data.language || 'null'
+ var cm_mode = langinfo.codemirror_mode || langinfo.language || 'null'
that.set_codemirror_mode(cm_mode);
});
@@ -329,21 +338,11 @@ define([
md: this.metadata,
callback: function (md) {
that.metadata = md;
- },
+ },
name: 'Notebook',
notebook: this,
keyboard_manager: this.keyboard_manager});
};
-
- Notebook.prototype.set_kernelspec_metadata = function(ks) {
- var tostore = {};
- $.map(ks, function(value, field) {
- if (field !== 'argv' && field !== 'env') {
- tostore[field] = value;
- }
- });
- this.metadata.kernelspec = tostore;
- }
// Cell indexing, retrieval, etc.
@@ -1811,6 +1810,14 @@ define([
this.events.trigger('spec_changed.Kernel', this.metadata.kernelspec);
}
+ // Set the codemirror mode from language_info metadata
+ if (this.metadata.language_info !== undefined) {
+ var langinfo = this.metadata.language_info;
+ // Mode 'null' should be plain, unhighlighted text.
+ var cm_mode = langinfo.codemirror_mode || langinfo.language || 'null'
+ this.set_codemirror_mode(cm_mode);
+ }
+
// Only handle 1 worksheet for now.
var worksheet = content.worksheets[0];
if (worksheet !== undefined) {
diff --git a/IPython/html/static/services/kernels/kernel.js b/IPython/html/static/services/kernels/kernel.js
index 9ad4fcb00..38ac473a8 100644
--- a/IPython/html/static/services/kernels/kernel.js
+++ b/IPython/html/static/services/kernels/kernel.js
@@ -46,6 +46,7 @@ define([
this.username = "username";
this.session_id = utils.uuid();
this._msg_callbacks = {};
+ this.info_reply = {}; // kernel_info_reply stored here after starting
if (typeof(WebSocket) !== 'undefined') {
this.WebSocket = WebSocket;
@@ -398,7 +399,8 @@ define([
this.events.trigger('kernel_starting.Kernel', {kernel: this});
// get kernel info so we know what state the kernel is in
var that = this;
- this.kernel_info(function () {
+ this.kernel_info(function (reply) {
+ that.info_reply = reply.content;
that.events.trigger('kernel_ready.Kernel', {kernel: that});
});
};
@@ -925,7 +927,8 @@ define([
} else if (execution_state === 'starting') {
this.events.trigger('kernel_starting.Kernel', {kernel: this});
var that = this;
- this.kernel_info(function () {
+ this.kernel_info(function (reply) {
+ that.info_reply = reply.content;
that.events.trigger('kernel_ready.Kernel', {kernel: that});
});