2012-01-01 8 views
9

Come posso rilevare se è disponibile un front end token da eseguire? In alternativa, come posso rilevare se un token di front-end non è stato eseguito?Rilevare se un token di front end è disponibile per l'esecuzione

Esempio: il comando Modifica -> Copia non è disponibile se non è selezionato nulla. FrontEndTokenExecute["Copy"] semplicemente emetterà un segnale acustico in questo caso, ma non fornisce alcuna indicazione (programmatica) che non sia riuscita.

+0

La tua domanda mi chiedo se sono riuscito a trovare una funzione Q non documentata, così ho valutato? * '* Q e ha trovato NotebookTools' CellsSelectedQ. (Non ho provato a usarlo, non so esattamente come questo dovrebbe essere valutato.) Vedi anche il mio commento sulla risposta di Sjoerd per nascondere la finestra del messaggio. Infine, puoi anche cacciare? FrontEnd * '* e? FrontEnd' *' * Q * per ulteriori idee. – telefunkenvf14

+0

@ telefunkenvf14 Interessante ricerca! Sembra che ci siano molte funzioni utili in '' NotebookTools' ''. Non posso usarlo perché restituisce "True" solo se sono selezionate celle complete (non solo testo nelle celle), ma guardare la fonte è già una buona fonte d'ispirazione. Forse posso inventare qualcosa di più efficiente di 'NotebookRead @ SelectedNotebook []'. – Szabolcs

risposta

5

Ho trovato un metodo per affrontare la seconda domanda, ma non è elegante:

  1. In Preferences > Interface > Message and Warning actions set avvertimenti minori all'interfaccia utente a Beep e Stampa per console
  2. assicurarsi che ci sia almeno un messaggio di errore nella finestra dei messaggi
  3. Ottenere un handle per il blocco note della finestra del notebook (utilizzando Notebooks[] o giù di lì)
  4. Conservare l'ultima cella nel notebook messaggio utilizzando NotebookGet[NotebookObject[FrontEndObject[LinkObject["55d_shm", 1, 1]], 1]]/. Notebook[{___, Cell[a___]}, ___] :> Cell[a] (il vostro maniglia sarà diverso, ovviamente)
  5. La vostra chiamata: FrontEndTokenExecute [ "Copia"]
  6. l'ultima è messaggio di errore e verificare se si differenzia da quello memorizzata al punto 4.
  7. La cella errore sembra Cell["You tried to edit a cell that is not editable. You can make the \ cell editable by choosing Cell Editable in the Cell Properties \ submenu.", "Message", "Message", "MSG", PageWidth -> WindowWidth, ShowCellLabel -> True, CellChangeTimes -> {3.534442831*10^9}, CellTags -> "cantEditLockedCell"]
  8. legge in modo appropriato
+0

Interessante mod. Suggerimento: non potresti anche impostare la finestra dei messaggi per essere nascosta? Non sono sicuro se sia possibile o meno. (Ad esempio, le proprietà globali potrebbero non consentirlo.) – telefunkenvf14

+0

Grazie Sjoerd! Stavo cercando una soluzione che funzionasse su qualsiasi sistema senza impostazioni aggiuntive, quindi alla fine ho rinunciato a questo, e ho provato a 'NotebookRead @ SelectedNotebook []' per testare solo se c'è una selezione. Lo svantaggio di questo metodo è che è possibile che la selezione contenga un'enorme quantità di dati, e potrebbe essere lenta da recuperare (ad esempio quando viene generato troppo output e Mathematica lo avvolge in quella casella "mostra più/meno") – Szabolcs