2012-01-01 58 views
9

如何检测front end token是否可用于执行?或者,如何检测前端令牌执行失败?检测前端令牌是否可以执行

示例:如果未选择任何内容,则“编辑” - >“复制”命令不可用。在这种情况下,FrontEndTokenExecute["Copy"]只会发出哔哔声,但它没有给出(程序化)指示它已失败。

+0

你的问题让我想如果我能找到一个未公开的Q函数,所以我评价?*'* Q,发现NotebookTools' CellsSelectedQ。 (我没有尝试过使用它;不​​知道应该如何评估它。)另请参阅我对Sjoerd关于隐藏消息窗口的回答的评论。最后,你也可以通过FrontEnd *'*和FrontEnd * * * Q寻找更多的想法。 – telefunkenvf14 2012-01-04 05:39:33

+0

@ telefunkenvf14有趣的发现! “NotebookTools”似乎有几个有用的功能。我不能使用它,因为如果选择了完整的单元格(而不仅仅是单元格中的文本),它只返回“真”,但查看源代码已经是很好的灵感。也许我可以想出比'NotebookRead @ SelectedNotebook []'更高效的东西'。 – Szabolcs 2012-01-04 10:55:14

回答

5

我发现对付你的第二个问题的方法,但它不是优雅:

  1. Preferences > Interface > Message and Warning actions设置细微处的用户界面警告蜂鸣和打印到控制台
  2. 确保有消息窗口中至少有一条错误消息
  3. 获取消息窗口笔记本的句柄(使用Notebooks[]左右)
  4. 店使用 NotebookGet[NotebookObject[FrontEndObject[LinkObject["55d_shm", 1, 1]], 1]]/. Notebook[{___, Cell[a___]}, ___] :> Cell[a]消息笔记本的最后一个单元格(您的手柄看起来不同,当然)
  5. 您的来电:FrontEndTokenExecute [“复制”]
  6. 获取最后的错误信息,并检查它是否从一个不同存储在步骤4
  7. 错误单元格看起来像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. 法适当
+0

有趣的黑客。建议:你不能也设置消息窗口被隐藏吗?不确定这是否可行。 (即全局属性可能不允许)。 – telefunkenvf14 2012-01-04 05:09:57

+0

谢谢Sjoerd!我正在寻找一种解决方案,只需要在任何系统上工作而无需额外设置,所以最后我放弃了这一点,并且我尝试了'NotebookRead @ SelectedNotebook []'来测试是否有选择。这种方法的缺点是选择可能包含大量数据,并且检索速度可能会很慢(例如,当生成的输出过多且Mathematica将其包含在“显示更多/更少”框中时) – Szabolcs 2012-01-04 09:32:51

相关问题