Last active
April 1, 2021 19:48
-
-
Save hmaarrfk/8462415 to your computer and use it in GitHub Desktop.
To remove a Matlab trailing whitespace in the editorOriginal Author: Sam Roberts http://stackoverflow.com/questions/19770347/how-to-auto-remove-trailing-whitespaces-on-save-in-matlabModified by Mark Harfouche to remember cursor location
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
% To remove a Matlab trailing whitespace in the editor | |
% Original Author: Sam Roberts | |
% Improved by: Simone Gaiarin <simgunz@gmail.com> | |
% http://stackoverflow.com/questions/19770347/how-to-auto-remove-trailing-whitespaces-on-save-in-matlab | |
% Modified by Mark Harfouche to remember cursor location | |
% | |
% | |
% Temp variable for shortcut. Give it an unusual name so it's unlikely to | |
% conflict with anything in the workspace. | |
shtcutwh__ = struct; | |
% Check that the editor is available. | |
if ~matlab.desktop.editor.isEditorAvailable | |
return | |
end | |
% Check that a document exists. | |
shtcutwh__.activeDoc = matlab.desktop.editor.getActive; | |
if isempty(shtcutwh__.activeDoc) | |
return | |
end | |
% save the old cursor location | |
shtcutwh__.Selection = shtcutwh__.activeDoc.Selection; | |
% Get the current text. | |
shtcutwh__.txt = shtcutwh__.activeDoc.Text; | |
% Remove trailing whitespaces from each line. | |
shtcutwh__.allLines = regexp(shtcutwh__.txt, '[^\n]*(\n)|[^\n]*$', 'match'); | |
shtcutwh__.lines = deblank(shtcutwh__.allLines); | |
% Uncomment this block to remove trailing whitespaces only from each non-empty line. | |
% This method preserve the indentation whitespaces inserted by matlab in the empty lines. | |
%emptyLinesIdx = cellfun(@isempty, shtcutwh__.lines); | |
%onlySpacesLinesIdx = cellfun(@(x) length(x)>1, shtcutwh__.allLines); | |
%idx = emptyLinesIdx & onlySpacesLinesIdx; | |
%if any(onlySpacesLinesIdx) | |
% shtcutwh__.lines(idx) = regexprep(shtcutwh__.allLines(idx), '\n', ''); | |
%end | |
% remove the trailing blank lines | |
for n = length(shtcutwh__.lines):-1:1 | |
if isempty(regexp(shtcutwh__.lines{n}, '.*\S.*', 'once')) | |
shtcutwh__.lines(n) = []; | |
else | |
break | |
end | |
end | |
% Reconcatenate lines. | |
shtcutwh__.addNewline = @(x)sprintf('%s\n',x); | |
shtcutwh__.lines = cellfun(shtcutwh__.addNewline, shtcutwh__.lines, 'UniformOutput', false); | |
% If you always want to add a newline at the end of the file, comment this line out | |
% Remove the last newline character | |
shtcutwh__.lines{end}(end) = ''; | |
shtcutwh__.newtxt = horzcat(shtcutwh__.lines{:}); | |
% Check for changes | |
if (~strcmp(shtcutwh__.activeDoc.Text, shtcutwh__.newtxt)) | |
% Set the current text. | |
shtcutwh__.activeDoc.Text = shtcutwh__.newtxt; | |
% Place the cursor back | |
shtcutwh__.activeDoc.Selection = shtcutwh__.Selection; | |
end | |
% Place the cursor back | |
shtcutwh__.activeDoc.Selection = shtcutwh__.Selection; | |
% Delete temp variable. | |
clear shtcutwh__ | |
%{ | |
Changelog: | |
simgunz commented on Dec 4, 2014 | |
I've modified the script in order to add the possibility to keep the spaces in the lines where there are only spaces. This because matlab insert those spaces automatically to indent the code. If your collaborators aren't using this script you will end with a lot of deletion in you git diff because you'll keep deleting the indent-spaces inserted automatically by the others. | |
You can find the update version in my fork of this repository if you want to update it. This feature is disabled by default, you should uncomment a code block. | |
szapp commented on Sep 22 | |
Thanks for this helpful script. I forked it to have it replace the text only if it was changed, to prevent the "unsaved" asterisk. | |
%} |
Awsome
tried it. loved it. starred it. thanks.
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Thanks guys, I updated the text with both your changes. simgunz, I also used your new regexp