📄 matterm1.asv
字号:
function Matterm()
% By Kawaii 的 modeman
Version='0.129';
global Hfig;
global Hkey;
global Hchr;
global Hmod;
global Hedt;
global Htxt;
global Hedt2;
global HScr;
global bbslink; %链接
Hfig=figure('Name',['mTerm ver. ',Version],'NumberTitle','off','MenuBar','none','HitTest','off','Position',[100 100 1000 480],'Resize','off','DeleteFcn',@cleanUp);
Hkey=uicontrol('Style','ListBox','Position',[0 0 100 300]);
Hchr=uicontrol('Style','ListBox','Position',[100 0 100 300]);
Hmod=uicontrol('Style','ListBox','Position',[200 0 100 300]);
Htxt=uicontrol('Style','text','Position',[0 350 100 15],'String','英文+控制');
Hedt=uicontrol('Style','edit','KeyPressFcn',@test,'Position',[0 300 100 50]);% 下一步-----既然中文没法运作,这个Hedt其实是没有必要的,直接把focus放到一个别的东西上就行了
Htxt2=uicontrol('Style','text','Position',[200 350 100 15],'String','中文');
Hedt2=uicontrol('Style','edit','Position',[200 300 100 50],'Callback',@SendCN);
HScr=uicontrol('Style','ListBox','Position',[300 0 700 480],'FontName','新宋体','FontSize',12);
%set(Hfig,'CurrentObject',Hedt);
% setappdata(Hig,'rec',[]);
%%%Initialization
bbslink = tcpip('bbs.newsmth.org',23,'InputBufferSize',3048);% 开一个端口
fopen(bbslink);
% global pool;
% global scrBuf;
% pool=[];
% buff={};
global cursor;
global scrBuf;
global cursor_saved;
global waitingList;% 等待处理的半个字串
global refreshTimer;
cursor=[1 1];
cursor_saved=[1 1];
scrBuf={[]};
waitingList=[];
refreshTimer = timer('TimerFcn','refresh()', 'Period', 0.1,'ExecutionMode','fixedRate');
%%% for debug-----输出所有的pool和scrBuf到文件,方便我发现问题;
global counter;
counter=1;
%%%%%%%%%%%%%%debug over
start(refreshTimer);
% uicontrol(Hedt);%把Focus给Hedt,一遍干活。
function test(scr,evnt);
global Hfig Hkey Hchr Hmod Hedt Htxt bbslink;
keyIn=sprintf(' %s',evnt.Key);
if isempty(evnt.Character)
chrIn='----------';
else
chrIn=evnt.Character;
end
%
% chrIn=sprintf(' %s',evnt.Character);
modIn=' ';
for i=1:length(evnt.Modifier)
modIn=[modIn, evnt.Modifier{i}];
end
% if evnt.Character% 非纯控制字符;
% keyIn=evnt.Key;
% else
% return;
% end
% for i=1:length(evnt.Modifier)
% keyIn=sprintf('%s+%s',evnt.Modifier{i},keyIn);
% end
keys=getappdata(Hfig,'keys');
keys=strvcat(keyIn,keys);
chrs=getappdata(Hfig,'chrs');
chrs=strvcat(chrIn,chrs);
mods=getappdata(Hfig,'mods');
mods=strvcat(modIn,mods);
set(Hkey,'String',keys);
set(Hchr,'String',chrs);
set(Hmod,'String',mods);
setappdata(Hfig,'keys',keys);
setappdata(Hfig,'chrs',chrs);
setappdata(Hfig,'mods',mods);
code=translator(evnt);
% for i=code
% fwrite(bbslink,char(i));
% end
fwrite(bbslink,code,'schar');
% global refreshTimer;
% start(refreshTimer);
%把Hedt的内容删掉
uicontrol(Htxt);
uicontrol(Hedt);
set(Hedt,'String','');
uicontrol(Htxt);
uicontrol(Hedt);
set(Hedt,'String',' ');
%pa
%
function code=translator(evnt)%把内容翻译
% global Hedt;
code=[];
if isempty(evnt.Character)%表明是需要特别处理的东西
% evnt.Key是control的不用处理,因为这表示只按了一个control。
if strcmp(evnt.Key,'return')
code=13;%貌似水木return=ctrl m-----从快捷键设置来看
return;
end
if strcmp(evnt.Key,'insert')
code=[27 64];
return;
end
if strcmp(evnt.Key,'backspace')
code=8;
return;
end
if strcmp(evnt.Key,'end')
code=[27 91 52 126];
return;
end
if strcmp(evnt.Key,'pagedown')
code=22;
return;
end
if strcmp(evnt.Key,'pageup')
code=[27 118]
return;
end
if strcmp(evnt.Key,'home')
code=[27 91 49 126];
return;
end
if strcmp(evnt.Key,'escape')
code=[27];
return;
end
if strcmp(evnt.Key,'space')
code=32;
return;
end
if strcmp(evnt.Key,'capslock')
return;
end
if strcmp(evnt.Key,'f1')
code=[27 91 49 49 126];
return;
end
if strcmp(evnt.Key,'f2')
code=[27 91 49 50 126];
return;
end
if strcmp(evnt.Key,'f3')
code=[27 91 49 51 126];
return;
end
if strcmp(evnt.Key,'f4')
code=[27 91 49 52 126];
return;
end
if strcmp(evnt.Key,'f5')
code=[27 91 49 53 126];
return;
end
if strcmp(evnt.Key,'f6')
code=[27 91 49 54 126];
return;
end
if strcmp(evnt.Key,'f7')
code=[27 91 49 55 126];
return;
end
if strcmp(evnt.Key,'f8')
code=[27 91 49 56 126];
return;
end
if strcmp(evnt.Key,'f9')
code=[27 91 49 57 126];
return;
end
if strcmp(evnt.Key,'f10')
code=[27 91 50 49 126];
return;
end
if strcmp(evnt.Key,'f11')
code=[27 91 50 50 126];
return;
end
% 开始处理ctrol 与其他键的组合
if length(evnt.Key)==1
code=evnt.Key-'a' +1;
return;
end
else% 如果输入的是一个可以显示的符号,需要分两类处理:1.确实是可显示字符;2.del和方向键-----matlab认为他们是可显示的
if strcmp(evnt.Key,'delete')
code=127;
return;
end
if strcmp(evnt.Key,'rightarrow')
% code='123';
% code=regexprep(code,'123','\x1BOC');
% code=double(code);
code=[27 79 67];
return;
end
if strcmp(evnt.Key,'leftarrow')
code=[27 79 68];
return;
end
if strcmp(evnt.Key,'uparrow')
code=[27 79 65];
return;
end
if strcmp(evnt.Key,'downarrow')
code=[27 79 66];
return;
end
%如果是普通可显示字符 ----那就好办法了,但是需要删掉这个显示
code=double(evnt.Character);
%把这个字的显示删掉-----只是为了好看
% uicontrol;
% uicontrol(Hedt);
% str=get(Hedt,'String');
% str=str(1:end-1);
% str=regexpreg(str,[evnt.Character,'$'],'');
% set(Hedt,'String',str);
% msgbox(str);
end
% 【 在 emigrant (熊猫) 的大作中提到: 】
% : 晚上整理一下,发一个稍微有点可用性的版本上来-----做了个figure模式运行的,但是:
% : 1.没有上下左右键-----我不知道这几个键给水木发什么数据----做了一些尝试,都不对
% : 2.中文输入还不对
% : ...................
%
% --
% 在我的左腿右边右腿左边有一片大森林
function cleanUp(scr,evnt);
global refreshTimer Hfig;
% stop(refreshTimer);
% delete(refreshTimer);
%
out=timerfind;
if length(out)
stop(out);
delete(out);
end
% if ~isempty(out)
% msgbox(num2str(length(out)));
% end
% keyboard;
% pause(1);
% delete(Hfig);
function SendCN(scr,evnt);
global bbslink Hedt2 Htxt;
str=get(Hedt2,'String');
fwrite(bbslink,unicode2native(str));
set(Hedt2,'String','');
uicontrol(Htxt);
uicontrol(Hedt2);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -