2012-01-01 14 views
9

¿Cómo puedo detectar si un front end token está disponible para ejecutarse? Alternativamente, ¿cómo puedo detectar si un token de la interfaz no se ejecutó?Detectando si un token del front-end está disponible para ejecutar

Ejemplo: el comando Editar -> Copiar no está disponible si no se selecciona nada. FrontEndTokenExecute["Copy"] sonará simplemente en este caso, pero no me da ninguna indicación (programática) de que haya fallado.

+0

Su pregunta me hizo pensar si pudiera encontrar una función Q indocumentado, así que evalúa? * '* Q y encontró NotebookTools' CellsSelectedQ. (No he intentado usarlo, no sé exactamente cómo se supone que debe evaluarse). También vea mi comentario sobre la respuesta de Sjoerd con respecto a la ocultación de la ventana del mensaje. Finalmente, también puede buscar a través de? FrontEnd * '* y? FrontEnd' *' * Q * para obtener más ideas. – telefunkenvf14

+0

@ telefunkenvf14 ¡Interesante descubrimiento! Parece que hay varias funciones útiles en '' NotebookTools' ''. No puedo usar esto porque solo devuelve 'True' si se seleccionan celdas completas (no solo texto en las celdas), pero mirar la fuente ya es una buena inspiración. Quizás pueda encontrar algo más eficiente que 'NotebookRead @ SelectedNotebook []'. – Szabolcs

Respuesta

5

He encontrado un método para hacer frente a su segunda pregunta, pero no es elegante:

  1. En Preferences > Interface > Message and Warning actions conjunto advertencias de interfaz de usuario de menor importancia a Bip e imprimir para consola de
  2. asegurarse de que hay al menos un mensaje de error en la ventana de mensajes
  3. Obtenga un identificador para el cuaderno de la ventana de mensajes (usando Notebooks[] o menos)
  4. Tienda de la última celda en el cuaderno mensaje usando NotebookGet[NotebookObject[FrontEndObject[LinkObject["55d_shm", 1, 1]], 1]]/. Notebook[{___, Cell[a___]}, ___] :> Cell[a] (el mango se verá de manera diferente, por supuesto)
  5. Su llamada: FrontEndTokenExecute [ "copia"]
  6. Consigue el último mensaje de error y comprobar si difiere de la almacenado en el paso 4.
  7. La célula de error parece 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. actuar apropiadamente
+0

Hack interesante. Sugerencia: ¿no podría también configurar la ventana del mensaje para que se oculte? No estoy seguro si esto es posible o no. (es decir, las propiedades globales pueden no permitirlo.) – telefunkenvf14

+0

Gracias Sjoerd! Estaba buscando una solución que funcione en cualquier sistema sin configuración adicional, así que finalmente me rendí y probé 'NotebookRead @ SelectedNotebook []' para probar si hay una selección. El inconveniente de este método es que es posible que la selección contenga una gran cantidad de datos y que sea lenta de recuperar (por ejemplo, cuando se genera demasiada producción y Mathematica la envuelve en esa casilla "mostrar más/menos") – Szabolcs

Cuestiones relacionadas