在不打开上一个会话的编辑器窗口的情况下启动新的MATLAB会话

时间:2016-03-03 19:32:21

标签: matlab

当我在编辑器窗口中使用一些打开的选项卡进行MATLAB会话时,我遇到了一个奇怪的问题。如果启动了另一个MATLAB会话,它会在新的编辑器窗口中自动打开相同的选项卡。如何使用MATLAB首选项禁用它?

我已经检查了首选项中的所有选项。

偏好设置>编辑/调试器 - > 已禁用'重新启动时重新打开以前MATLAB会话中的文件'

为什么此设置不会持续存在?

1 个答案:

答案 0 :(得分:2)

这是因为,当MATLAB打开时,它会跟踪加载到编辑器中的文件以及每个文件的显示参数。此信息存储在以下位置。

fullfile(prefdir, 'MATLABDesktop.xml')

当前在活动的MATLAB编辑器中打开的每个文件都有一个条目。

<Client Class="com.mathworks.mde.editor.EditorViewClient" Dock="yes" Group="Editor" Guest="no" SelectionOrder="15" Show="yes" Singleton="no" StatusBarShowing="yes" TearOff="no" Title="C:\Users\user\AppData\Roaming\MathWorks\MATLAB\R2015a\MATLABDesktop.xml">
    <Location Context="docked" Maximized="yes" Type="floating"/>
    <Location Context="floatingIn" Maximized="yes" Type="floating"/>
    <ClientData EditorFileName="C:\Users\user\AppData\Roaming\MathWorks\MATLAB\R2015a\MATLABDesktop.xml"/>
</Client>

当您选择首选项以在重新启动时不记住文件时,这会导致在应用程序退出时从该文件中删除所有这些条目。

如果一次运行多个MATLAB实例(相同版本),它们都依赖于同一个文件。因此,当您打开一个包含一个实例的文件,然后启动一个新实例时,新实例会加载该文件并从中填充编辑器状态。

就修复这种行为而言,我认为可能很难。您可以编辑编辑您的startup.m文件,以从MATLABDesktop.xml文件中删除所有这些条目。即便如此,我也不确定这会如何影响其他正在运行的实例的稳定性。

执行此清洁的脚本

如果您希望脚本能够在保留配置文件中存在的所有其他设置的同时执行此操作,则以下操作应该有效。

filename = fullfile(prefdir, 'MATLABDesktop.xml');
xml = xmlread(filename);

% Find ALL <Client> entries in the file and determine "Class" attribute
clients = xml.getElementsByTagName('Client');
clients = arrayfun(@(x)clients.item(x-1), 1:clients.getLength, 'uni', 0);
classes = cellfun(@(x)char(x.getAttribute('Class')), clients, 'uni', 0);

% Find all EditorViewClient <Client> entries
func = @(x)isempty(regexp(x, '\.EditorViewClient$', 'once'));
toremove = ~cellfun(func, classes);
clients = clients(toremove);

% Remove all client entries that need to be removed
for k = 1:numel(clients)
    parent = clients{k}.getParentNode();
    parent.removeChild(clients{k});
end

% Write the remaining data back to the file
xmlwrite(filename, xml);