@@ -26,7 +26,7 @@ define([
2626 IPython . kernelselector = this ;
2727 this . _finish_load = null ;
2828 this . _loaded = false ;
29- this . loaded = new Promise ( function ( resolve , reject ) {
29+ this . loaded = new Promise ( function ( resolve ) {
3030 that . _finish_load = resolve ;
3131 } ) ;
3232
@@ -38,16 +38,12 @@ define([
3838 utils . promising_ajax ( url ) . then ( $ . proxy ( this . _got_kernelspecs , this ) ) ;
3939 } ;
4040
41- KernelSelector . prototype . _got_kernelspecs = function ( data ) {
42- var that = this ;
43- this . kernelspecs = data . kernelspecs ;
44- var change_kernel_submenu = $ ( "#menu-change-kernel-submenu" ) ;
45- var new_notebook_submenu = $ ( "#menu-new-notebook-submenu" ) ;
46-
47- var keys = Object . keys ( data . kernelspecs ) . sort ( function ( a , b ) {
41+ var _sorted_names = function ( kernelspecs ) {
42+ // sort kernel names
43+ return Object . keys ( kernelspecs ) . sort ( function ( a , b ) {
4844 // sort by display_name
49- var da = data . kernelspecs [ a ] . spec . display_name ;
50- var db = data . kernelspecs [ b ] . spec . display_name ;
45+ var da = kernelspecs [ a ] . spec . display_name ;
46+ var db = kernelspecs [ b ] . spec . display_name ;
5147 if ( da === db ) {
5248 return 0 ;
5349 } else if ( da > db ) {
@@ -56,6 +52,14 @@ define([
5652 return - 1 ;
5753 }
5854 } ) ;
55+ } ;
56+
57+ KernelSelector . prototype . _got_kernelspecs = function ( data ) {
58+ var that = this ;
59+ this . kernelspecs = data . kernelspecs ;
60+ var change_kernel_submenu = $ ( "#menu-change-kernel-submenu" ) ;
61+ var new_notebook_submenu = $ ( "#menu-new-notebook-submenu" ) ;
62+ var keys = _sorted_names ( data . kernelspecs ) ;
5963
6064 keys . map ( function ( key ) {
6165 // Create the Kernel > Change kernel submenu
@@ -160,7 +164,7 @@ define([
160164 /** set the kernel by name, ensuring kernelspecs have been loaded, first
161165
162166 kernel can be just a kernel name, or a notebook kernelspec metadata
163- (name, project_name , display_name).
167+ (name, language_name , display_name).
164168 */
165169 var that = this ;
166170 if ( typeof selected === 'string' ) {
@@ -183,18 +187,28 @@ define([
183187 // only trigger event if value changed
184188 return ;
185189 }
186- var ks = this . kernelspecs [ selected . name ] ;
190+ var kernelspecs = this . kernelspecs ;
191+ var ks = kernelspecs [ selected . name ] ;
187192 if ( ks === undefined ) {
188- if ( selected . project_name && selected . project_name . length > 0 ) {
189- $ . map ( this . kernelspecs , function ( k ) {
190- if ( k . spec . project_name === selected . project_name ) {
191- ks = k ;
193+ var available = _sorted_names ( kernelspecs ) ;
194+ var matches = [ ] ;
195+ if ( selected . language_name && selected . language_name . length > 0 ) {
196+ $ . map ( available , function ( name ) {
197+ if ( kernelspecs [ name ] . spec . language_name . toLowerCase ( ) === selected . language_name . toLowerCase ( ) ) {
198+ matches . push ( name ) ;
192199 }
193200 } ) ;
194201 }
202+ if ( matches . length === 1 ) {
203+ ks = kernelspecs [ matches [ 0 ] ] ;
204+ }
195205 // if still undefined, trigger failure event
196206 if ( ks === undefined ) {
197- this . events . trigger ( "spec_not_found.Kernel" , selected ) ;
207+ this . events . trigger ( "spec_not_found.Kernel" , {
208+ selected : selected ,
209+ matches : matches ,
210+ available : available ,
211+ } ) ;
198212 return ;
199213 }
200214 }
@@ -210,15 +224,22 @@ define([
210224 var that = this ;
211225 var select = $ ( "<select>" ) . addClass ( 'form-control' ) ;
212226 console . warn ( "Kernelspec not found:" , data ) ;
213- $ . map ( this . kernelspecs , function ( ks ) {
227+ var names ;
228+ if ( data . matches . length > 1 ) {
229+ names = data . matches ;
230+ } else {
231+ names = data . available ;
232+ }
233+ $ . map ( names , function ( name ) {
234+ var ks = that . kernelspecs [ name ] ;
214235 select . append (
215- $ ( '<option/>' ) . attr ( 'value' , ks . name ) . text ( ks . spec . display_name )
236+ $ ( '<option/>' ) . attr ( 'value' , ks . name ) . text ( ks . spec . display_name || ks . name )
216237 ) ;
217238 } ) ;
218239
219240 var body = $ ( "<form>" ) . addClass ( "form-inline" ) . append (
220241 $ ( "<span>" ) . text (
221- "I couldn't find a kernel matching " + ( data . display_name || data . name ) + "." +
242+ "I couldn't find a kernel matching " + ( data . selected . display_name || data . name ) + "." +
222243 " Please select a kernel:"
223244 )
224245 ) . append ( select ) ;
0 commit comments