9089a2af6c
Add fetch option to just return the server if there already is one, or empty. Support calling this function with no argument after it is running, and doing a 'fetch' instead of an init. help.m: Use 'fetch' of emacsnetshell to decide if we need to send cookies to Emacs. Don't send those cookies with netshell - only if inside an Emacs buffer.
71 lines
2 KiB
Matlab
71 lines
2 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
|
|
if isempty(EMACSSERVER)
|
|
cmd = 'init';
|
|
else
|
|
cmd = 'fetch';
|
|
end
|
|
end
|
|
|
|
if strcmp(cmd, 'fetch')
|
|
% Fetch means to get the server and return it. Do not create
|
|
% the server on fetch - otherwise no way to know if a server was started
|
|
% or not.
|
|
nso = EMACSSERVER;
|
|
return;
|
|
|
|
elseif 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
|