Improve doc comments. Fix togglining of 'sendinit' so we don't send the init command twice on startup.
60 lines
1.6 KiB
Matlab
60 lines
1.6 KiB
Matlab
function nso = emacsnetshell(cmd, data)
|
|
% Create a connection to an EMACS editor server.
|
|
%
|
|
% emacsnetshell('init') - Initialize the connection with Emacs.
|
|
% emacs will send commands to MATLAB with additional connectivity
|
|
% information.
|
|
%
|
|
% emacsnetshell('ack') - Send ack to Emacs, it should echo back.
|
|
%
|
|
% emacsnetshell('output',data) - Send DATA as output to display in Emacs.
|
|
% emacsnetshell('error',data) - Send DATA as error description to Emacs.
|
|
% emacsnetshell('eval',data) - Send DATA - a string containing an Emacs
|
|
% lisp form which will be evaluated in Emacs.
|
|
|
|
|
|
EMACSSERVER = getappdata(groot, 'EmacsNetShell');
|
|
|
|
if nargin == 0
|
|
cmd = 'init';
|
|
end
|
|
|
|
if strcmp(cmd, 'shutdown')
|
|
% Shutdown our connection to emacs.
|
|
setappdata(groot, 'EmacsNetShell', []);
|
|
|
|
if ~isempty(EMACSSERVER)
|
|
delete(EMACSSERVER);
|
|
end
|
|
else
|
|
if ~isempty(EMACSSERVER) && ~isvalid(EMACSSERVER)
|
|
EMACSSERVER = [];
|
|
setappdata(groot, 'EmacsNetShell', EMACSSERVER);
|
|
end
|
|
|
|
if isempty(EMACSSERVER)
|
|
EMACSSERVER = emacs.EmacsServer();
|
|
setappdata(groot, 'EmacsNetShell', EMACSSERVER);
|
|
sendinit = false;
|
|
else
|
|
sendinit = true;
|
|
end
|
|
|
|
if ~ischar(cmd)
|
|
error('Command must be a char vector.');
|
|
end
|
|
|
|
if ~strcmp(cmd,'init') || sendinit
|
|
if nargin == 2
|
|
EMACSSERVER.SendCommand(cmd, data);
|
|
else
|
|
EMACSSERVER.SendCommand(cmd);
|
|
end
|
|
end
|
|
end
|
|
|
|
if nargout == 1
|
|
nso = EMACSSERVER;
|
|
end
|
|
|
|
end
|