How can I add a backup an option, addSaveCallback, to save a timestamped version of my file, to the MATLAB editor?
67 visualizaciones (últimos 30 días)
Mostrar comentarios más antiguos
Mark
el 29 de Ag. de 2025
Comentada: Mark
el 1 de Oct. de 2025 a las 13:13
% I'd like to add the option to save backup files - earlier versions every time I save a file in the Matlab editor
editorObj = matlab.desktop.editor.getActive;
editorObj.addSaveCallback(@mySaveCallback);
function mySaveCallback(~, ~)
disp('File has been saved!');
% Add your custom code here
saveBackup(originalFilePath);
end
function saveBackup(originalFilePath)
% Check if the file exists
if ~isfile(originalFilePath)
error('The specified file does not exist.');
end
% Extract file parts
[filePath, fileName, fileExt] = fileparts(originalFilePath);
% Create a timestamp
timestamp = datestr(now, 'yyyymmdd_HHMMSS');
% Define the backup file name
backupFileName = sprintf('%s_backup_%s%s', fileName, timestamp, fileExt);
backupFilePath = fullfile(filePath, backupFileName);
% Copy the file to create a backup
copyfile(originalFilePath, backupFilePath);
fprintf('Backup saved as: %s\n', backupFilePath);
end
6 comentarios
dpb
el 12 de Sept. de 2025 a las 14:32
Editada: dpb
el 12 de Sept. de 2025 a las 16:40
It appears the use case here is one of making a simple roll-your-own version control system substitute based on earlier response from @Mark of "The PC I want to run this on is so heavily locked down, I can't run a local version control such as git".
Respuesta aceptada
Yair Altman
el 9 de Sept. de 2025 a las 14:02
Editada: Yair Altman
el 9 de Sept. de 2025 a las 14:03
I believe that you can use the editor object's undocumented (hidden) ContentSaved event, as follows:
documentObj = matlab.desktop.editor.getActive;
hListener = addlistener(documentObj, 'ContentSaved', @mySaveCallback);
function mySaveCallback(hDocument, hEventData)
savedFilePath = hDocument.Filename;
saveBackup(savedFilePath);
end
For the record, here is how you can see similar undocumented (hidden) events of a Matlab object:
obj = matlab.desktop.editor.getActive;
mc = metaclass(obj);
events = mc.EventList;
eventNames = {events.Name};
eventAccess = {events.ListenAccess};
eventHidden = [events.Hidden];
[{'Event name','Access','Hidden'}; ...
sortrows([eventNames; eventAccess; arrayfun(@mat2str,eventHidden,'Uniform',false)]')]
and the output in this specific case would be:
ans =
4×3 cell array
{'Event name' } {'Access'} {'Hidden'}
{'ContentDirtied' } {'public'} {'true' }
{'ContentSaved' } {'public'} {'true' }
{'ObjectBeingDestroyed'} {'public'} {'false' }
0 comentarios
Más respuestas (3)
dpb
el 29 de Ag. de 2025
Editada: dpb
el 29 de Ag. de 2025
I "know nuthink!" about using the programmatic interface but it appears it doesn't have exposed properties for callback functions as do graphics objects like axes but instead you would use addlistener similarly.
The returned handle is to the document and there are no code examples for addlisteener other than one for a figure so I'm not sure just what you would use for the events...in fact, trying this locally I find
>> editorObj = matlab.desktop.editor.getActive
editorObj =
Document with properties:
Filename: '...\MATLAB\Work\writeopeningbalance.m'
Opened: 1
Language: 'MATLAB'
Text: 'function writeopeningbalance(tD,tM,fnOB)↵...
Selection: [9.00 3.00 9.00 3.00]
SelectedText: ''
Modified: 0
ExtendedSelection: [9.00 3.00 9.00 3.00]
ExtendedSelectedText: {''}
Editable: 1
>> events(editorObj)
Events for class matlab.desktop.editor.Document:
ObjectBeingDestroyed
>>
that makes it appear there is no publicly visible event for save or saveAs
I tried Yair Altman's tool to poke at object handles for hidden/undocumented properties, but it doesn't recognize the document handle so no dice there.
2 comentarios
dpb
el 29 de Ag. de 2025
Editada: dpb
el 29 de Ag. de 2025
However, does seem like a reasonable enhancement.
Submit this to Mathworks as an official support or enhancement request at <Product Support Page>
The alternative would be to use a code repository to handle this topic instead.
Matt J
el 29 de Ag. de 2025
Editada: Matt J
el 29 de Ag. de 2025
Instead of trying to get the standard Save button to do what you want, you can make a Quick Access Toolbar button which runs your own customized save routine, as implemented in your saveBackup() code.
6 comentarios
dpb
el 31 de Ag. de 2025
Would be perfect if the keybindings would allow to overrule the present Ctrl-S
Steven Lord
el 9 de Sept. de 2025 a las 14:47
5 comentarios
Steven Lord
el 16 de Sept. de 2025 a las 19:23
Sure, sounds like a reasonable enhancement to request via Technical Support. Please be sure to describe your desired workflow (how you would use this functionality if it existed) so that the developers can take it into account when or if they design this behavior.
However, I suspect that the developers may push back on this as it seems to me like there would be significant overlap between the functionality you've described and the source control interface MATLAB already provides. So the workflow would need to provide some pretty strong motivation.
dpb
el 16 de Sept. de 2025 a las 22:25
Editada: dpb
el 17 de Sept. de 2025 a las 14:15
It's not neecessarily my particular workflow; @Mark provided the justification in that his environment doesn't give him access to the source control tool with which to use the interface.
The VMS-style version would/could simply be an additional option within the present backup selections that don't yield the same ability as is. I've missed it; I haven't put it into the editor for source files, but the workflow you hypothesized I handle by a script that saves the workplace variables to a named mat file including a desriptive comment with a companion tool to retrieve the last or a given comment match.
The version on m-files isn't at all a bad idea, however, without the extra of a full-blown vcs.
.I doubt it would ever get sufficient traction to be implemented, however, owing to that perception from the developers.
Ver también
Categorías
Más información sobre Entering Commands en Help Center y File Exchange.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!