Почему запуск ClearAll ["Global` *"] из пользовательской палитры не обновляет цвета локальных переменных? - PullRequest
4 голосов
/ 11 августа 2011

Я создал пользовательскую палитру с ActionMenu, которая выполняет ClearAll["Global`*"]. Он выполняет желаемое действие, но интерфейс не мгновенно обновляет цвета с черного на синий (стандарт), как это происходит, когда ClearAll["Global`*"] выполняется непосредственно из ячейки ноутбука (он обновляется только после выполнения чего-то еще). Есть ли способ инициировать обновление состояния отображения внешнего интерфейса?

РЕДАКТИРОВАТЬ: Очевидно, то же самое происходит, когда я загружаю пакет из палитры (синий не сразу обновляется до черного).

1 Ответ

6 голосов
/ 11 августа 2011

Не совсем элегантно, но работает (основной цикл должен вызываться один раз после ClearAll):

ActionMenu["Clear", 
   {"Clear global variables" :> (ClearAll["Global`*"]; 
         Block[{nb}, nb = CreateDocument[ExpressionCell[42, "Input"], 
                Visible -> False]; SelectionMove[nb, All, Notebook]; 
            SelectionEvaluate[nb]; NotebookDelete[nb];])}]

Конечно, следует использовать новую функцию Mathematica 8 NotebookEvaluate, но, похоже, неработать здесь (то есть

ActionMenu["Clear", 
   {"Clear global variables" :> (ClearAll["Global`*"]; 
         Block[{nb}, nb = CreateDocument[ExpressionCell[42, "Input"], 
                Visible -> False]; NotebookEvaluate[nb]; 
     NotebookDelete[nb];])}]

выдает сообщение об ошибке

Could not process unknown packet "1".
...