Восстановите настройки MATLAB на компьютере, который их не хранит, например, на рабочих компьютерах с ограниченными разрешениями.
У меня два вопроса (и ответы на них). Я мог бы задать два отдельных вопроса и ответить на них, но я не буду, потому что второй вопрос такой же, как первый, но с изюминкой. Две части ответа, которые я публикую ниже, решают обе части вопроса. Поэтому я решил оставить это в одном вопросе.
Часть 1
Изменение стандартного макета MATLAB
По умолчанию макет MATLAB (при первом запуске) является ИМХО весьма недружественным для пользователя. Это может быть хорошо для начинающих, но суперпользователи (как вы и я) не хотят постоянно видеть некоторые элементы окна MATLAB (называемые рабочим столом). Вот как по умолчанию выглядит MATLAB R2014a (и в основном новые версии):
Посмотрим, что с ним не так, ИМХО
- Окно расположено неправильно: оно не использует полный экран, а также не использует практическую часть (например, левую, верхнюю, нижнюю или правую половину) экрана. Давайте это исправим.
- Лента (верхняя часть окна MATLAB, содержащая вкладки "Главная", "Графики" и "Приложения") развернута, и мне она не нужна большую часть времени. Поэтому я хочу свернуть его, чтобы сохранить некоторые свойства экрана.
- Панель "Текущая папка" слева развернута, в которой я не нуждаюсь большую часть времени, но если она развернута, то там большую часть времени. Поэтому большую часть времени он использует драгоценный экран, например ленту.
- Правая панель, Рабочая область, очень полезна, если вы выполняете вычисления непосредственно в Командном окне (средняя панель), и вам необходимо отслеживать, какие у вас переменные и т. Д. Однако во время написания скриптов или написания функций с использованием редактора (не отображается). в окне по умолчанию). Вам не нужно так много Workspace, потому что ваши переменные могут быть довольно абстрактными. Хотя отладка Workspace может быть полезной, я обычно ее свертываю, чтобы сохранить больше экранного состояния. Вместо рабочего пространства я использую
whos
Команда в окне команд, чтобы перечислить все мои переменные. Совет от профессионала: чтобы получить список всех переменных, начинающихся, например, с символа "x", используйтеwhos x*
, - "Новичок в MATLAB? ... подсказка в верхней части окна командной строки меня раздражает, потому что я абсолютно не новичок в MATLAB. Подобные жёлтые подсказки появляются, когда вы открываете другие панели или окна.
- Текущая папка (отличающаяся для каждого по умолчанию MATLAB) не является практической папкой. Я хочу, чтобы по умолчанию это была папка, в которой я на самом деле храню свою работу.
Возможно, есть еще вещи, которые вы или я не хотели бы или хотели бы изменить, но давайте исправим эти шесть проблем, см. Часть 1 моего ответа ниже для моего решения.
Часть 2
Сохранение пользовательских настроек на компьютерах, которые их сбрасывают
Дополнительная проблема, с которой я столкнулся, была не решена в части 1 моего ответа. Я полагаю, что проблема возникает с большим количеством людей, которые используют MATLAB на компьютере, администратором которого они не являются, то есть у них, возможно, нет повышенных разрешений. Это означает, что они не могут редактировать настройки системы и, возможно, не могут редактировать настройки MATLAB, как это происходит в моем случае. Я использую MATLAB на рабочем компьютере на очень большом рабочем месте. Каждый компьютер имеет виртуальное рабочее пространство, в которое пользователи входят. Большинство дисков являются виртуальными: каталог установки MATLAB находится на одном из этих дисков. Через Windows Explorer я даже не вижу диск! Кроме того, ярлык для MATLAB указывает на другую программу, которую мое рабочее место использует для вызова любого программного обеспечения, на которое у пользователя есть лицензия, а не непосредственно на MATLAB.exe в папке установки MATLAB. Тем не менее, существует команда MATLAB, которая показывает корневую папку MATLAB, matlabroot
,
Проблема, с которой я столкнулся после установки своего рабочего стола MATLAB так, как мне нравилось (см. Скриншот в моем ответе ниже), заключалась в том, что после каждой перезагрузки макет возвращался к недружественному макету по умолчанию. Я перезагружаюсь по крайней мере один раз в день, так что это означает, что мои настройки MATLAB и макет сбрасываются каждый раз. Это может быть не проблемой для вас, но для суперпользователя, который использует некоторые пользовательские настройки, макеты и т. Д., Это проблема. Я решил это во второй части моего ответа, см. Ниже.
1 ответ
Часть 1
Изменение стандартного макета MATLAB
Мы решили шесть перечисленных проблем, изменив макет рабочего стола на тот, который нам больше нравится. Я использую макет, который выглядит так по умолчанию:
Давайте воспроизвести это.
- Просто перетащите главное окно MATLAB туда, где вы хотите, например, разверните его. Решено!
- Щелкните значок стрелки прямо под красным выходом × в верхнем правом углу окна MATLAB, чтобы свернуть ленту. Решено!
- Перетащите заголовок панели "Текущая папка" (той части, где написано "Текущая папка") в нужное место. Вы можете положить его практически в любом месте. При перетаскивании вы видите тень панели, где она будет расположена, когда вы отпустите кнопку мыши. Вы можете расположить панель в другом месте или перетащить ее в верхний левый, левый верхний, правый верхний, верхний, нижний или любой другой заголовок другой панели, чтобы создать панель текущей папки с вкладками, которая по умолчанию закрыта. MATLAB называет это минимизированным. Когда панель свернута, она занимает гораздо меньше места и может быть открыта, нажав на вкладку или наведя курсор мыши на вкладку. Другое решение - полностью закрыть панель, удалив ее с рабочего стола MATLAB. Это можно сделать, сначала отсоединив панель, щелкнув правой кнопкой мыши заголовок → щелкните "Отменить" (или нажмите Ctrl + Shift + U). Это открывает панель в отдельном окне. Закройте окно, и оно исчезнет. Если вы случайно потеряли подобное окно, вы можете восстановить его с помощью вкладки "Главная" главной ленты → нажмите "Макет" → снова включить текущую папку. Чтобы снова закрепить окно, нажмите на крошечную стрелку в верхнем правом углу окна панели → щелкните Dock (или нажмите Ctrl + Shift + D). Я поместил текущую папку на вкладке в левом верхнем углу.
- Я поместил Рабочую область рядом с вкладкой Текущая папка. Решено!
- Просто нажмите на × справа на панели желтого наконечника.
- Выберите папку, которую вы хотите использовать по умолчанию, и перейдите к ней, используя панель "Текущая папка" или адресную строку (на снимке экрана выше, это раскрывающийся список прямо под лентой с надписью ► C: ►). Чтобы установить его как путь по умолчанию, сначала скопируйте адрес. Я считаю, что в версиях MATLAB начиная с R2014b вы можете установить текущую папку по умолчанию в настройках MATLAB (найдите ее на вкладке Главная ленты → Настройки → Общие настройки → Начальная рабочая папка). Если вы используете более старую версию, вы можете установить текущую папку MATLAB по умолчанию, используя
userpath(newpath)
команда, в которой newpath - путь, который вы скопировали. Обратите внимание, чтоnewpath
должен быть строкой, т.е.'single straight apostrophes'
так что не "двойные апострофы", которые вы могли бы скопировать. Решено!
История команд (доступ к которой осуществляется нажатием ↑ в окне команд) и редактор (нажмите Ctrl + N в окне команд, чтобы открыть ее), также были перемещены.
Рекомендуется сохранить этот макет, чтобы вы могли легко переключиться на него, если что-то или кто-то изменилось (например, когда несколько пользователей используют один и тот же MATLAB с разными макетами). Сделайте это с помощью вкладки "Главная" ленты → Макет → Сохранить макет → присвойте макету имя. Он сохраняется как XML-файл с именем <your layout name>MATLABLayout.xml
в каталоге настроек MATLAB, который вы можете найти с помощью prefdir
команда. Все настройки MATLAB, история команд, макет по умолчанию и т. Д. Хранятся в этом каталоге. Это очень полезные знания для второй части этого ответа!
Большинство (если не все) другие предпочтения также хранятся там.
Теперь вторая часть моего ответа, которая отвечает на часть 2 моего вопроса.
Часть 2
Сохранение пользовательских настроек на компьютерах, которые их сбрасывают
Прежде всего: примените все свои пользовательские настройки и сохраните макет для требуемого рабочего стола MATLAB, как описано в части 1 этого ответа.
Теперь мы собираемся использовать умно startup.m
, finish.m
и несколько.bat файлов.
startup.m
это файл, который, если он присутствует в пути MATLAB, запускается при запуске, прежде чем вы получите контроль над окном MATLAB. Этот файл представляет собой скрипт, который можно использовать для любых действий. Мы настроим его так, чтобы:
- Установите текущую папку в любой каталог, который мы хотим после запуска.
- Замените настройки MATLAB по умолчанию нашими собственными, сохраненными в части 1 этого ответа.
- Восстановите наш собственный макет рабочего стола MATLAB.
Первые два шага самые простые. В моем случае (на моем рабочем компьютере (компьютерах)) путь по умолчанию просто забывался при каждом перезапуске компьютера. Итак, я сделал скрипт startup.m
и я вставил в него следующий код.
(это идет в startup.m
)
%% set path
p = 'C:\Whatever\path\you\want\as\your\default\Current Folder';
cd(p)
Достаточно просто. замещать p
с любым путем к текущей папке, которую вы хотите.
Второй шаг сложнее. Это требует как сохранения, так и восстановления всех настроек в каталоге предпочтений MATLAB, который можно найти с помощью prefdir
команда. Для этого мы используем finish.m
также. Это скрипт, который автоматически запускается перед выходом из MATLAB. Выйти из MATLAB можно несколькими способами: щелкнуть по × главного окна MATLAB или использовать exit
или же quit
команда. Полезно знать: если вы убьете MATLAB.exe с помощью диспетчера задач Windows или другой системной команды, которая убивает процесс, finish.m
не побежит. Удостовериться finish.m
находится на пути MATLAB, или вы добавляете путь к нему в путь MATLAB, используя addpath
в приведенном выше фрагменте кода для startup.m
, Иначе, finish.m
не будет работать при выходе из MATLAB.
Мы сделаем finish.m
Скопируйте все настройки, которые вы могли установить или изменить, а также свои собственные макеты в папку, к которой у вас есть разрешения. Следующий код делает это.
(это идет в finish.m
)
%% backup MATLAB preferences, etc., see also: startup.m
p = 'path\to\your\preference backup folder';
copyfile([prefdir filesep '*'], p, 'f')
Это копирует все файлы в каталоге предпочтений MATLAB в выбранную вами резервную папку. Теперь мы говорим startup.m
восстановить эти файлы. Так как startup.m
работает раньше, чем что-либо еще, он прекрасно восстанавливает все настройки, которые мы можем захотеть. Следующий код делает это для нас.
(это идет в startup.m
)
%% restore MATLAB preferences, etc., see also: finish.m
p = 'path\to\your\preference backup folder'; % end without a file separator, i.e. '/', '\' or filesep
copyfile([p filesep '*'], prefdir, 'f')
В этом фрагменте кода p
должен быть установлен в тот же каталог, что и p
в finish.m
, поэтому MATLAB знает, откуда копировать файл.
Третий пункт в нашем списке - самый сложный. Просто копирую <your layout name>MATLABLayout.xml
файла с использованием предыдущего фрагмента кода в каталог настроек MATLAB недостаточно для восстановления макета. Вам необходимо восстановить его программно. Кроме того, в моей ситуации MATLAB требовал перезапуска перед применением макета. Это будет сделано с помощью следующих шагов.
Я нашел метод на недокументированном сайте MATLAB, который описывает многие функции MATLAB, которые не документированы и не поддерживаются разработчиками MATLAB. Они не просты в использовании и могут вести себя странно, но они могут делать очень мощные вещи.
Следующий код восстанавливает макет, который вы ранее сохранили как <your layout name>MATLABLayout.xml
,
(это идет в startup.m
)
%% restore your custom layout
layoutName = '<your layout name>';
desktop = com.mathworks.mde.desk.MLDesktop.getInstance;
desktop.restoreLayout(layoutName);
Задавать layoutName
к тому, что вы назвали свой макет. Теперь к перезапускаемой части MATLAB.
Помните, что настройки MATLAB сбрасываются при каждой перезагрузке компьютера на рабочем месте. Путь к MATLAB по умолчанию (который можно найти с помощью path
команда) включает только каталоги, к которым у меня нет прав на запись. Это значит я не могу поставить startup.m
а также finish.m
на пути MATLAB, так что после перезагрузки они все еще там. Как мне это решить? Я использую аккуратный трюк командной строки MATLAB.exe для копирования startup.m
в папку на пути MATLAB, а затем я запускаю startup.m
вручную.
Ярлык MATLAB в моем меню "Пуск" также сбрасывается после перезагрузки, поэтому я использую файл.bat на рабочем столе для запуска MATLAB следующим образом.
(это идет в MATLAB.bat
, который можно разместить в любом месте, к которому у вас есть легкий доступ, например, на рабочем столе Windows или в личной папке)
@echo off
start path\to\matlab.exe -r "copyfile('path\to\startup.m', matlabroot), startup"
Это запустит MATLAB. Кроме того, -r
говорит MATLAB запустить все, что будет дальше, между "двойными апострофами" после того, как он завершил запуск (даже после запуска startup.m
, если бы он существовал, что не так в моей ситуации). Часть между апострофами - это код MATLAB, который говорит MATLAB скопировать startup.m
скрипт, который мы создали для места на пути MATLAB, в данном случае matlabroot
, Это может быть любой другой каталог по умолчанию в пути MATLAB, или вы можете использовать addpath('path\to\add')
добавить любой путь к пути MATLAB. Это может добавить путь к нашему startup.m
, Последняя команда между апострофами - это просто вызов startup.m
так оно и работает.
Теперь скрипт установит желаемый путь, настройки и макет. Одна проблема все еще сохраняется: MATLAB требуется перезагрузка, чтобы фактически изменить макет. Это делается с помощью startup.m
, finish.m
и второй файл.bat.
Второй файл.bat уничтожит MATLAB через командную строку и снова запустит MATLAB. startup.m
должен знать, что он был сначала запущен, а затем запустите этот файл.bat. finish.m
должны очистить это знание. Вот что я сделал.
(это идет в restartup.bat
)
@echo off
taskkill /f /pid %1
start path\to\matlab.exe -r "copyfile('path\to\startup.m', matlabroot)"
Как вы видете, taskkill
убьет процесс с пока неизвестным (%1
) идентификатор процесса (/pid
). Этот идентификатор будет предоставлен в вызове этого.bat файла startup.m
, Однако этот вызов не должен произойти, если MATLAB уже был перезапущен для восстановления макета и настроек. Так startup.m
должен создать память о том, что он уже запущен. Я сделал это следующим образом.
(это идет в startup.m
)
%% if startup hasn't run before, restart MATLAB
% sources:
% http://www.mathworks.com/matlabcentral/newsreader/view_thread/259557
% https://stackoverflow.com/a/92057
% this file is deleted by finish.m
name = 'hasStartedUp';
f = ['path\to\' name];
if ~exist(f,'file')
fid = fopen(f,'wt'); % create an empty file
fclose(fid);
pid = num2str(feature('getpid')); % get MATLAB's process ID
system(['path\to\restartup.bat ' pid]); % run restartup.bat
end
Память, которую я дал startup.m
это файл, который, если он существует, предотвращает перезапуск MATLAB. Этот файл называется name
, Текущий идентификатор процесса MATLAB получается с num2str(feature('getpid'))
, Это в свою очередь передается на вызов restartup.bat
, который в свою очередь убивает процесс MATLAB. Помните, что это убийство не вызывает finish.m
Таким образом, мы удаляем файл памяти в этом скрипте, поэтому, если выход из MATLAB происходит нормально, файл памяти исчезает, и MATLAB знает, что перезапустить при следующем запуске.
(это идет в finish.m
)
%% delete memory file from startup.m
f = 'path\to\hasStartedUp';
if exist(f,'file')
delete(f)
end
Бонус за долгое чтение: читайте здесь, как я редактировал startup.m
чтобы открыть цифры по умолчанию на левой половине экрана. Теперь главное окно MATLAB может удобно располагаться на правой половине экрана, и окна рисунков не перекрывают его (что они и делают по умолчанию).
Теперь я решил и поэтому ответил на два моих вопроса! Я понимаю, что это довольно сложный ответ и, следовательно, трудное чтение, поэтому не стесняйтесь задавать любые вопросы и оставлять комментарии с предложениями с дальнейшим совершенствованием моих методов.