%SCHEMER_EXPORT Export current MATLAB color scheme to text file % If this is your first time using SCHEMER_EXPORT, please ensure you % read the IMPORTANT NOTE at the bottom of the help section before using % this function. % % SCHEMER_EXPORT() with no input will prompt the user to locate a % destination file via the GUI, and will save the current color scheme % to this location. Please read the IMORTANT NOTE below % before running this script or it may not work correctly. % The MATLAB preference options which are exported are: % - All settings in the Color pane of Preferences % - All settings in the Color > Programming Tools pane % - From Editor/Debugger > Display pane, the following: % - Highlight current line (whether to highlight, and the colour) % - Right-hand text limit (colour and thickness, whether on/off) % The output format is the same as used in MATLAB's preferences file, % which is found at FULLFILE(PREFDIR,'matlab.prf'). % % SCHEMER_EXPORT(FILENAME) exports the relevant MATLAB preferences % to the file FILENAME. % % SCHEMER_EXPORT(FILENAME, FLAG_MODE) controls which settings are output % into the preference file FILENAME. Along with the colour settings for % MATLAB syntax highlighting, one can also export the boolean preferences % (such as whether cells and non-local variables, etc, should be coloured % differently to the regular backgound and text); and one can also export % the colour settings for syntax highlighting in other languages % supported by MATLAB. % % The FLAG_MODE settings available are: % 0 - neither booleans, nor additional languages are exported % 1 - boolean settings are exported, but not additional languages % 2 - additional language colours are exported, but not boolean settings % 3 - both booleans and additional languages are exported % % By default FLAG_MODE is set to 1, so boolean settings will be % exported, but the settings for syntax highlighting in additional % languages will not be. % % The colour settings for all MATLAB syntax highlighting will always be % exported, even for syntax options which are currently disabled, and % regardless of whether the boolean settings are being exported. This is % because users loading your exported color scheme may want syntax % options highlighted which you are not currently using. Consequently, % when designing a color scheme, it is advisable to set colours for all % possisble MATLAB colour settings, even if you don't usually use them. % By default, SCHEMER_IMPORT will not import boolean settings, so users % will keep their syntax options enabled or disabled as they prefer even % after importing your color scheme. % % Colours for highlighting syntax in other languages supported by MATLAB % (MuPAD, TLC, VRML, C++, Java, VHDL, Verilog, XML) can be set in the % preferences panel Editor/Debugger > Language. If you have not set any % of these colours yourself, you should not export them. If SCHEMER_IMPORT % loads a color scheme without additional language syntax included, the % MATLAB colours are extended to highlight syntax in the other languages % consistent with the MATLAB scheme. % % SCHEMER_EXPORT(FLAG_MODE, FILENAME), with a numeric input followed by a % string, will also work as above because the input order is reversible. % % SCHEMER_EXPORT(FLAG_MODE) with a single numeric input will open the GUI % to pick the filename and will save the output according to FLAG_MODE. % % RET = SCHEMER_EXPORT(...) returns 1 on success, 0 on user % cancellation at the output file selection screen, -1 on fopen error, % and -2 on any other error. % % [RET, NAMES, PREFS] = SCHEMER_EXPORT(...) also returns two cell % arrays listing the names and preferences which were saved to file. % % For more details on how to get and set MATLAB preferences with % commands, see the following URL. % http://undocumentedmatlab.com/blog/changing-system-preferences-programmatically % % IMPORTANT NOTE: % You must have, at any point since installing MATLAB, visited the % Color, Color>Programming Tools and Editor/Debugger>Display panes of % the Preferences diaglogue within MATLAB and then clicked OK in order % for all the settings to be exported correctly. You will obviously have % done this for any settings you have changed but, for example, you may % have left the Editor/Debugger>Display settings unchanged. If this % preference pane has not been set its entries will not have been % defined, and when trying to export these they will be incorrectly saved % as off (for booleans) or black (for colours). % % Example 1: User is not sure if they have OK'd all the relevent % Preferences panes (or sure they haven't). % - Open File>Preferences % - On the left-hand side % - Click Colors % - Click Programming Tools (underneath "Colors" as a subsection) % - Click Editor/Debugger (a different panel to Colors) % - Click Display (underneath "Editor/Debugger" as a subsection) % - Click OK % (Yes, that is literally all you need to do to make sure you can % export correctly. There is no need to click anywhere which was % not mentioned. You just have to have each pane appear, and then % click OK at the end.) % - Go to your command window and execute SCHEMER_EXPORT % - The GUI appears, and you pick where to save the file. % % Example 2: User is sure they have OK'd all the relevent Preferences % panes already. % schemer_export % % Example 3: User is sure they have OK'd all the relevent Preferences % panes already, knows the path they wish to save to, and doesn't want % to export their boolean settings. % schemer_export('some/path/schemeName.prf', 0) % % Example 4: User has set some colour preferences for C/C++ syntax % highlighting in addition to MATLAB syntax highlighting, and wants to % output this along with their boolean settings % schemer_export(3) % % See also SCHEMER_IMPORT, PREFDIR, COLOR2JAVARGBINT. % Copyright (c) 2013-2016, Scott C. Lowe % All rights reserved. % % Redistribution and use in source and binary forms, with or without % modification, are permitted provided that the following conditions are % met: % * Redistributions of source code must retain the above copyright % notice, this list of conditions and the following disclaimer. % * Redistributions in binary form must reproduce the above copyright % notice, this list of conditions and the following disclaimer in % the documentation and/or other materials provided with the distribution % % THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" % AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE % IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE % ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE % LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR % CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF % SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS % INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN % CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) % ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE % POSSIBILITY OF SUCH DAMAGE. function varargout = schemer_export(fname, flag_mode) % ------------------------ Parameters ------------------------------------- SCHEMER_VERSION = 'v1.4.0'; SCHEMER_URLGIT = 'https://github.com/scottclowe/matlab-schemer'; SCHEMER_URLFEX = 'https://www.mathworks.com/matlabcentral/fileexchange/53862-matlab-schemer'; DEFOUTNAME = 'ColorSchemeForMATLAB.prf'; % ------------------------ Input handling --------------------------------- % Default inputs if nargin<2 % Default is on. Recipient can pick themselves whether to import. flag_mode = 1; end if nargin<1 fname = []; end % Input switching if nargin>=1 && ~ischar(fname) && ~isempty(fname) if ~isnumeric(fname) error('Invalid input argument 1'); end if nargin==1 % First input omitted flag_mode = fname; fname = []; elseif ischar(flag_mode) % Inputs switched tmp = fname; fname = flag_mode; flag_mode = tmp; clear tmp; else error('Invalid combination of inputs'); end end % Mode handling if ~isnumeric(flag_mode) error('Export mode flag must be numeric.'); elseif flag_mode < 0 || flag_mode > 3 error('Bad mode specified: %s', num2str(flag_mode)); end inc_bools = mod(flag_mode, 2); inc_otherlangs = flag_mode >= 2; % 0: no bools, no other languages % 1: yes bools, no other languages % 2: no bools, yes other languages % 3: yes bools, yes other languages % ------------------------ Settings --------------------------------------- % Names of boolean preferences which should always be output names_boolean = { ... 'ColorsUseSystem' ; ... % Color: Desktop: Use system colors }; % Names of boolean preferences which the user can choose whether to output names_boolextra = { ... 'ColorsUseMLintAutoFixBackground' ; ... % Color>PT: Analyser: autofix highlight 'Editor.VariableHighlighting.Automatic' ; ... % Color>PT: Var&fn: auto highlight 'Editor.NonlocalVariableHighlighting' ; ... % Color>PT: Var&fn: with shared scope 'EditorCodepadHighVisible' ; ... % Color>PT: CellDisp: highlight cells 'EditorCodeBlockDividers' ; ... % Color>PT: CellDisp: show lines between cells 'Editorhighlight-caret-row-boolean' ; ... % Editor>Display: Highlight current line 'EditorRightTextLineVisible' ; ... % Editor>Display: Show Right-hand text limit }; % Names of preferences for which the values are integers names_integer = { ... 'EditorRightTextLimitLineWidth' ; ... % Editor>Display: Right-hand text limit Width }; % The names of the main colour panels, so we can let the user know by name % if there is an issue with any of them panels_main = { ... 'Color' ; ... 'Color > Programming Tools' ; ... 'Editor/Debugger > Display' ; ... }; % Names of colour preferences which are in the main panels and used in % MATLAB syntax highlighting names_color_main = { ... { ... % Color panel 'ColorsText' ; ... % Color: Desktop: main text colour 'ColorsBackground' ; ... % Color: Desktop: main background 'Colors_M_Keywords' ; ... % Color: Syntax: keywords 'Colors_M_Comments' ; ... % Color: Syntax: comments 'Colors_M_Strings' ; ... % Color: Syntax: strings 'Colors_M_UnterminatedStrings' ; ... % Color: Syntax: unterminated strings 'Colors_M_SystemCommands' ; ... % Color: Syntax: system commands 'Colors_M_Errors' ; ... % Color: Syntax: errors 'Colors_HTML_HTMLLinks' ; ... % Color: Other: hyperlinks } ... { ... % Color > Programming Tools 'Colors_M_Warnings' ; ... % Color>PT: Analyser: warnings 'ColorsMLintAutoFixBackground' ; ... % Color>PT: Analyser: autofix 'Editor.VariableHighlighting.Color' ; ... % Color>PT: Var&fn: highlight 'Editor.NonlocalVariableHighlighting.TextColor' ; ... % Color>PT: Var&fn: with shared scope 'Editorhighlight-lines' ; ... % Color>PT: CellDisp: highlight } ... { ... % Editor/Debugger > Display 'Editorhighlight-caret-row-boolean-color' ; ... % Editor>Display: Highlight current line Color 'EditorRightTextLimitLineColor' ; ... % Editor>Display: Right-hand text limit line Color } }; % Names of colour preferences which are known to have been added since the % year 2011, and so their presence in the preferences is not guaranteed % column 1: name of setting % column 2: first version in which preference might have been implemented % column 3: first version in which preference has been observed to exist names_color_versioned = { ... 'Color_CmdWinWarnings' , ... % Color: Command Window Warning messages '7.13' , ... % Known to NOT be in 2011a (7.12) '8.2' ; ... % Known to be in 2013b 'Color_CmdWinErrors' , ... % Color: Command Window Error messages '8.3' , ... % Known to NOT be in 2013b (8.2) '8.4' ; ... % Known to be in 2014b }; % Names of colour preferences for syntax highlighting in languages other % than MATLAB names_color_otherlangs = { ... { ... % MuPAD 'Editor.Language.MuPAD.Color.keyword' ; ... 'Editor.Language.MuPAD.Color.operator' ; ... 'Editor.Language.MuPAD.Color.block-comment' ; ... 'Editor.Language.MuPAD.Color.option' ; ... 'Editor.Language.MuPAD.Color.string' ; ... 'Editor.Language.MuPAD.Color.function' ; ... 'Editor.Language.MuPAD.Color.constant' ; ... } ... { ... % TLC 'Editor.Language.TLC.Color.Colors_M_SystemCommands' ; ... 'Editor.Language.TLC.Color.Colors_M_Keywords' ; ... 'Editor.Language.TLC.Color.Colors_M_Comments' ; ... 'Editor.Language.TLC.Color.string-literal' ; ... } ... { ... % C/C++ 'Editor.Language.C.Color.keywords' ; ... 'Editor.Language.C.Color.line-comment' ; ... 'Editor.Language.C.Color.string-literal' ; ... 'Editor.Language.C.Color.preprocessor' ; ... 'Editor.Language.C.Color.char-literal' ; ... 'Editor.Language.C.Color.errors' ; ... } ... { ... % Java 'Editor.Language.Java.Color.keywords' ; ... 'Editor.Language.Java.Color.line-comment' ; ... 'Editor.Language.Java.Color.string-literal' ; ... 'Editor.Language.Java.Color.char-literal' ; ... } ... { ... % VHDL 'Editor.Language.VHDL.Color.Colors_M_Keywords' ; ... 'Editor.Language.VHDL.Color.operator' ; ... 'Editor.Language.VHDL.Color.Colors_M_Comments' ; ... 'Editor.Language.VHDL.Color.string-literal' ; ... } ... { ... % Verilog 'Editor.Language.Verilog.Color.Colors_M_Comments' ; ... 'Editor.Language.Verilog.Color.operator' ; ... 'Editor.Language.Verilog.Color.Colors_M_Keywords' ; ... 'Editor.Language.Verilog.Color.string-literal' ; ... } ... { ... % XML 'Editor.Language.XML.Color.error' ; ... 'Editor.Language.XML.Color.tag' ; ... 'Editor.Language.XML.Color.attribute' ; ... 'Editor.Language.XML.Color.operator' ; ... 'Editor.Language.XML.Color.value' ; ... 'Editor.Language.XML.Color.comment' ; ... 'Editor.Language.XML.Color.doctype' ; ... 'Editor.Language.XML.Color.ref' ; ... 'Editor.Language.XML.Color.pi-content' ; ... 'Editor.Language.XML.Color.cdata-section' ; ... } }; % Names of colour preferences for syntax highlighting in languages other % than MATLAB names_color_vrml = { ... % VRML 'Editor.Language.VRML.Color.keyword' ; ... 'Editor.Language.VRML.Color.node-keyword' ; ... 'Editor.Language.VRML.Color.field-keyword' ; ... 'Editor.Language.VRML.Color.data-type-keyword' ; ... 'Editor.Language.VRML.Color.terminal-symbol' ; ... 'Editor.Language.VRML.Color.comment' ; ... 'Editor.Language.VRML.Color.string' ; ... }; % First version of matlab which uses VRMLX3DV instead of VRML version_vrmlx3dv = '9.0'; % Names of preferences for other language syntax and where setting value % is a string % column 1: name of preference % column 2: a regex which the string must match if it is to be exported % use '.' or '.+' to allow any non-empty string to be output % use '' or '.*' for anything, including empty strings % use '\S' for anything except empty or whitespace-only strings % use '^str1|str2|str3$' to allow only a finite set of strings names_string_otherlang = { ... 'Editor.Language.Java.method' , ... % Java: Show methods '^(none|bold|italic)$' ; ... }; % ------------------------ Setup ------------------------------------------ % Initialise output if nargout==0 % Empty if no output requested varargout = {}; else % -2 to signify unknown error otherwise varargout = {-2}; end % If we are outputting all the bools, add them to the list to do if inc_bools names_boolean = [names_boolean; names_boolextra]; end % ------------------------ Check ------------------------------------- % Check the user is not exporting without having visited any of the % preference panels, or has otherwise set text and background to match if isequal(com.mathworks.services.Prefs.getColorPref('ColorsText').getRGB, ... com.mathworks.services.Prefs.getColorPref('ColorsBackground').getRGB) % Define the base error message. We will add to it depending on the % exact set up. msg = 'Colour for text and background appear to be the same.'; % The values match, so give an error if com.mathworks.services.Prefs.getColorPref('ColorsText').getRGB ... == -16777216 % Since the colour is black, it seems the user hasn't visited the % colour preference panes at all msg = [msg, 10, ... 'Are you sure you have visited all the preference panels,'... ' as per the instructions in the function description?']; elseif com.mathworks.services.Prefs.getBooleanPref('ColorsUseSystem') % The colour is something else, but both text and background match. % The user is managing to use the colours by overriding them with % the system colours. msg = [msg, 10, ... 'Although you have enabled system colors, the underlying ', ... 'colour settings match. This is not permitted because the ', ... 'text would be illegible if system colours were disabled.']; else % The colour is something else, but both text and background match. % Presumably the text is currently illegible to the user right now. msg = [msg, 10, ... 'This is not permitted because the text is illegible.']; end % Raise the error with the completed message error(msg); end % Go through all the main color preference panels, checking their settings % are available to us % Initialise outer level of holding variables cprefs_main = cell(size(names_color_main)); colors_main = cell(size(names_color_main)); % Loop over every one of the main colour preference panels for iPanel = 1:numel(names_color_main) % Fetch the colours for this panel [cprefs_main{iPanel}, colors_main{iPanel}] = ... fetch_colors(names_color_main{iPanel}); % Only give the error on the Color and Programming Tools pages, because % there are only two colours set in the Editor > Display and they could % plausibly both be black. We instead check this panel seperately below. if iPanel <= 2 && all(colors_main{iPanel} == -16777216) % This panel appears to all be black, so we make an error error(... ['Colours for all of %1$s panel appear to be black. ' 10 ... 'This will be because you have never set the preferences ' ... 'in this panel. You can do so by visiting the %1$s ' ... 'Preferences page and clicking OK, as detailed in the ' ... 'description of this function.'], panels_main{iPanel}); end end % Check the Editor > Display panel has been initialised. % If it hasn't, the line width will appear to be 0, which is not a possible % setting. if com.mathworks.services.Prefs.getIntegerPref(... 'EditorRightTextLimitLineWidth') == 0 % It hasn't been set, so we generate an error error(... ['Properties from the %1$s preference panel could not be loaded. ' ... 10 ... 'This will be because you have never set the preferences in '... 'this panel. You can do so by visiting the %1$s ' ... 'Preferences page and clicking OK, as detailed in the ' ... 'description of this function.'], panels_main{3}); end % Let the user know they are doing a stupid thing if they export when using % the default settings if com.mathworks.services.Prefs.getBooleanPref('ColorsUseSystem') warning(... ['You are exporting with system colors for main text and background.'... 10, 'The exported theme will look different on different systems.']); end % ------------------------ File stuff ------------------------------------- if isempty(fname) % Get user's name username = java.lang.System.getProperty('user.name'); % Prepend username to default filename outFileName = [char(username) DEFOUTNAME]; % Dialog asking for savename, with smart default output filename [filename, pathname] = uiputfile(outFileName, ... 'Select file to write MATLAB color scheme'); % End if user cancels if isequal(filename, 0); if nargout>0; varargout{1} = 0; end; return; end fname = fullfile(pathname, filename); end % Open for write access of text file, create if necessary fid = fopen(fname, 'w+t', 'n'); if isequal(fid, -1); if nargout>0; varargout{1} = -1; end; return; end % Add a cleanup object incase of failure finishup = onCleanup(@() fclose(fid)); % Find the name of the color scheme based on the filename [~, schemename] = fileparts(fname); % Write a few comments to the start of the file fprintf(fid, '# %s - MATLAB color scheme\n', schemename); fprintf(fid, '# Generated with schemer_export %s, on MATLAB %s\n', ... SCHEMER_VERSION, version); fprintf(fid, '# %s\n', char(java.util.Date)); fprintf(fid, '# To enable this color scheme in MATLAB use schemer_import, available at:\n'); fprintf(fid, '# %s\n', SCHEMER_URLGIT); fprintf(fid, '# %s\n', SCHEMER_URLFEX); % ------------------------ Read and Write --------------------------------- % Loop through the boolean type settings prefs_boolean = cell(size(names_boolean)); for i=1:length(names_boolean) % Check the name of this preference nm = names_boolean{i}; % Get the value of this boolean preference prefs_boolean{i} = com.mathworks.services.Prefs.getBooleanPref(nm); % Construct the string to output outstr = [nm '=B']; if prefs_boolean{i} outstr = [outstr 'true']; else outstr = [outstr 'false']; end outstr = [outstr '\n']; % Write this boolean value to the output file fprintf(fid, outstr); end % Loop through the integer type settings prefs_integer = cell(size(names_integer)); for i=1:length(names_integer) % Check the name of this preference nm = names_integer{i}; % Get the integer value for this preference prefs_integer{i} = com.mathworks.services.Prefs.getIntegerPref(nm); % Write this integer value to the output file fprintf(fid, '%s=I%d\n', nm, prefs_integer{i}); end % Loop through the colour type settings for MATLAB syntax highlighting for iPanel=1:numel(names_color_main) for iPref=1:numel(names_color_main{iPanel}) % Check the name of this preference nm = names_color_main{iPanel}{iPref}; % Write its colour value to the output file fprintf(fid, '%s=C%d\n', nm, colors_main{iPanel}(iPref)); end end % Loop over colours which may or may not be available % Initialise cell arrays for successful fields onames_versioned = {}; cprefs_versioned = {}; % Loop over the colours for iPref=1:size(names_color_versioned, 1) % Check the name of this preference nm = names_color_versioned{iPref, 1}; % Try to get the colour for this preference prf = com.mathworks.services.Prefs.getColorPref(nm); % If the current MATLAB version is less the first version where it is % not known whether it has implemented this preference feature % Or if the MATLAB version is less than the first version known to have % implemented the feature and the colour appears to be black % Then we skip this preference if verLessThan('matlab', names_color_versioned{iPref, 2}) ... || ( ... verLessThan('matlab', names_color_versioned{iPref, 3}) ... && prf.getRGB==-16777216 ... ) % It appears that this version of MATLAB does not include this % preference. So we skip it. continue; end % Otherwise, we write its colour value to the output file fprintf(fid, '%s=C%d\n', nm, prf.getRGB); % And we add the values to the list to output onames_versioned{end+1} = nm; cprefs_versioned{end+1} = prf; end % Initialise a cell array to output for other language syntax onames_langs = {}; cprefs_langs = {}; % Loop through the colour type settings for other language syntax, only if % it is requested if inc_otherlangs % Go through all the language color syntax preference panels, checking % their settings are available to us % Loop over every one of the main colour preference panels for iPanel = 1:numel(names_color_otherlangs) [panel_prefs, panel_colors] = fetch_colors(... names_color_otherlangs{iPanel}); if all(panel_colors==-16777216) % All the colours in this panel are black, so we assume the % color settings have not loaded because they have not been set continue; end % Not all the colours are black, so we assume we have loaded the % values for this language panel. % Loop again over every colour setting in the panel for iPref = 1:numel(names_color_otherlangs{iPanel}) % Get the name for the color setting we are interested in nm = names_color_otherlangs{iPanel}{iPref}; % Write its colour value to the output file fprintf(fid, '%s=C%d\n', nm, panel_colors(iPref)); end % Remember the prefences so we can return them onames_langs = [onames_langs; names_color_otherlangs{iPanel}]; cprefs_langs = [cprefs_langs; panel_prefs]; end end % We have to do special handling for VRML because in R2016a, MathWorks % changed the encoding name from VRML to VRMLX3DV. Aside from this, nothing % else was changed. The rest of the preference name is the same, and the % default values are unchanged. if inc_otherlangs % Deal with VRML and VRMLX3DV possibilities if verLessThan('matlab', version_vrmlx3dv) names_color_vrml_usable = names_color_vrml; else names_color_vrml_usable = strrep(names_color_vrml, ... '.VRML.', '.VRMLX3DV.'); end % Get the colours from the appropriate preference names [panel_prefs, panel_colors] = fetch_colors(names_color_vrml_usable); % If all the colours in this panel are black, we assume the color % settings have not loaded because they have not been set. if ~all(panel_colors==-16777216) for iPref = 1:numel(names_color_vrml) % Get the name for the color setting we are interested in nm = names_color_vrml{iPref}; % Write its colour value to the output file fprintf(fid, '%s=C%d\n', nm, panel_colors(iPref)); end % Remember the prefences so we can return them onames_langs = [onames_langs; names_color_otherlangs{iPanel}]; cprefs_langs = [cprefs_langs; panel_prefs]; end end % Do strings for other languages if inc_otherlangs for iPref=1:size(names_string_otherlang, 1) % Get the name for the string preference we are interested in nm = names_string_otherlang{iPref, 1}; % Read the string str = com.mathworks.services.Prefs.getStringPref(nm); % Turn it from a java.lang.String object to a regular char object str = char(str); % Check it is okay if isempty(regexp(str, names_string_otherlang{iPref, 2}, ... 'start', 'emptymatch')) % It did not have any matches for the regex, so we will not use % this setting. We will assume its value is not available. continue; end % It matched the regex for acceptable values, so we will export it fprintf(fid, '%s=S%s\n', nm, str); % Remember the prefence so we can return it onames_langs = [onames_langs; nm]; cprefs_langs = [cprefs_langs; str]; end end % ------------------------ Tidy up ---------------------------------------- % fclose(fid); % Don't need to close as it will autoclose if nargout>0; varargout{1} = 1; end; fprintf('Exported color scheme to %s\n', fname); if nargout>1; varargout{2} = cat(1, ... names_boolean , ... names_integer , ... names_color_main{:} , ... onames_versioned , ... onames_langs ); varargout{3} = cat(1, ... prefs_boolean , ... prefs_integer , ... cprefs_main{:} , ... cprefs_versioned , ... cprefs_langs ); end end function [prefs, colors] = fetch_colors(names) % Initialise holding variable for settings in this panel prefs = cell(size(names)); colors = nan(size(names)); % Loop over every colour setting in the panel for iName = 1:numel(names) % Read the preference for this colour and get a Java color object prefs{iName} = com.mathworks.services.Prefs.getColorPref(... names{iName}); % Turn this into an integer colour value colors(iName) = prefs{iName}.getRGB; end end