2012-01-01 41 views
9

Làm cách nào tôi có thể phát hiện xem có front end token để thực thi không? Cách khác, làm cách nào tôi có thể phát hiện xem mã thông báo giao diện người dùng có thực thi không?Phát hiện xem mã thông báo giao diện người dùng có sẵn để thực thi

Ví dụ: lệnh Chỉnh sửa -> Sao chép không khả dụng nếu không có gì được chọn. FrontEndTokenExecute["Copy"] sẽ chỉ đơn giản là bíp trong trường hợp này, nhưng nó mang lại cho tôi không có (lập trình) chỉ ra rằng nó đã thất bại.

+0

câu hỏi của bạn làm tôi tự hỏi, nếu tôi có thể tìm thấy một chức năng Q không có giấy tờ, vì vậy tôi đánh giá? * '* Q và thấy NotebookTools' CellsSelectedQ. (Tôi đã không thử sử dụng nó; dunno chính xác như thế nào này là vụ phải được đánh giá.) Cũng thấy bình luận của tôi về câu trả lời của Sjoerd liên quan đến ẩn cửa sổ tin nhắn. Cuối cùng, bạn cũng có thể săn lùng? FrontEnd * '* và? FrontEnd' *' * Q * để có thêm ý tưởng. – telefunkenvf14

+0

@ telefunkenvf14 Thú vị tìm thấy! Dường như có một số chức năng hữu ích trong '' NotebookTools' ''. Tôi không thể sử dụng điều này bởi vì nó chỉ trả về 'True' nếu các ô đầy đủ được chọn (không chỉ văn bản trong các ô), mà nhìn vào nguồn là nguồn cảm hứng tốt. Có lẽ tôi có thể tìm ra thứ gì đó hiệu quả hơn 'NotebookRead @ SelectedNotebook []'. – Szabolcs

Trả lời

5

Tôi tìm thấy một phương pháp để đối phó với câu hỏi thứ hai của bạn, nhưng nó không phải là thanh lịch:

  1. Trong Preferences > Interface > Message and Warning actions thiết cảnh báo giao diện người dùng nhỏ-Beep và Print để console
  2. Hãy chắc chắn rằng đó là ít nhất một thông báo lỗi trong cửa sổ tin nhắn
  3. Lấy tay cầm cho sổ ghi chép của sổ thông báo (sử dụng Notebooks[] hoặc hơn)
  4. Store ô cuối cùng trong máy tính xách tay thông điệp sử dụng NotebookGet[NotebookObject[FrontEndObject[LinkObject["55d_shm", 1, 1]], 1]]/. Notebook[{___, Cell[a___]}, ___] :> Cell[a] (xử lý của bạn sẽ trông khác nhau, tất nhiên)
  5. Cuộc gọi của bạn: FrontEndTokenExecute [ "Copy"]
  6. Nhận được thông báo lỗi cuối cùng và kiểm tra xem nó khác với một trong những lưu trữ trong bước 4.
  7. Các tế bào lỗi trông giống như 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. Đạo luật một cách thích hợp
+0

Hack thú vị. Đề xuất: Bạn không thể đặt cửa sổ tin nhắn bị ẩn? Không chắc chắn nếu điều này là có thể hay không. (tức là, các tài sản toàn cầu có thể không cho phép nó.) – telefunkenvf14

+0

Cảm ơn Sjoerd! Tôi đang tìm một giải pháp sẽ chỉ hoạt động trên bất kỳ hệ thống nào mà không cần thiết lập bổ sung, vì vậy cuối cùng tôi đã từ bỏ điều này, và tôi đã thử 'NotebookRead @ SelectedNotebook []' để chỉ kiểm tra nếu có lựa chọn. Hạn chế của phương pháp này là có thể lựa chọn chứa một lượng dữ liệu khổng lồ và có thể chậm để lấy lại (ví dụ: khi quá nhiều đầu ra được tạo ra và Mathematica kết thúc nó trong hộp "hiển thị thêm/ít hơn") – Szabolcs

Các vấn đề liên quan