2012-01-01 62 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

相關問題