2015-09-14 13 views
8

ho recente build di Jupyter che ha un'azione di menu che consente di Riavvia & Esegui tutti:come associare un comando a "Riavvia ed esegui tutto"?

enter image description here

vorrei aggiungere una scorciatoia da tastiera che si lega a questa azione. Ho visto lo documentation per la personalizzazione della tastiera, ma non sono ancora sicuro di come aggiungere una scorciatoia da tastiera.

Ho costruito Juypter dal sorgente, quindi in base all'aiuto, sembra che sia necessario aggiungere del codice a notebook/static/custom/custom.js.

Ho provato ad aggiungere il seguente:

IPython.keyboard_manager.command_shortcuts.add_shortcut('meta-r', function (event) { 
     IPython.notebook.restart_kernel(); 
     IPython.notebook.execute_run_all(); 
     return false; 
}); 

Tuttavia, quando si preme [Meta-r], il kernel sembra riavviare ma execute_run_all() non viene eseguita.

+0

** Nota ** Per rendere più caricare automaticamente, è necessario avvolgerlo come spettacolo [qui] (http://stackoverflow.com/a/32159304/ 776515) – Luis

risposta

2

Nel caso in cui qualcuno si imbatta in questo post cercando la stessa risposta: è necessario attendere il riavvio del kernel con un timeout prima dell'esecuzione. Vedere questo discussion on GitHub.

Nel tuo caso, si darebbe:

IPython.keyboard_manager.command_shortcuts.add_shortcut('meta-r', 
    function (event) { 
     IPython.notebook.kernel.restart(); 
     setTimeout(function(){ IPython.notebook.execute_all_cells(); }, 1000); 
     return false; 
}); 
4

Ecco quello che ho nel mio custom.js. Per farlo funzionare, l'aggiunta di collegamento deve avvenire dopo l'applicazione viene inizializzata:

$([Jupyter.events]).on("app_initialized.NotebookApp", function() { 
    Jupyter.keyboard_manager.command_shortcuts.add_shortcut('0,1', { 
    help: 'restart and run all', 
    help_index: '0,1', 
    handler: function (event) { 
     Jupyter.notebook.kernel.restart(); 
     restartTime = 2000 // decrease this if you have a fast computer 
     setTimeout(function(){ Jupyter.notebook.execute_all_cells(); }, restartTime); 
     return false; 
    }} 
); 
}); 
+0

questo non funziona per me, si riavvia ma non esegue le celle. selezionando la voce di menu "restart and run all" funziona comunque ... la voce di menu usa un meccanismo diverso? – maxymoo

+2

ah risolto ... ha dovuto aumentare il timeout a 2000 ms, ho intenzione di modificare la risposta per il beneficio di persone con computer lenti! – maxymoo

+0

Grazie! Non lo sto usando in questi giorni, quindi non ho avuto nulla di utile da suggerire. :) –

Problemi correlati