S-Term FAQ 

S-Term主页 http://sterm.smth.edu.cn, http://www.sterm.com

 

 

Q: 我下载了控制脚本,解开后一个目录中包含了几个文件,请问怎样使用控制脚本?

A: 点击菜单 选项->系统设置,在 设置 Tab的下方,勾上使用系统控制脚本,然后按下面文本框右边的"..."按钮,选择脚本目录中的Control.vbs,这时候 文本框中应该出现了该文件的路径和文件名,文本框上方的关闭对话框时装载脚本也应该被勾上了,此时关闭对话框,如果没出现任何提示,脚本就被加载了。否则会提示文件类型错误或文件未找到。

如果是新版本的S-Term,可看到文本框中写着Script/Control.vbs,表示装载的是sterm.exe目录下的script目录中的control.vbs,如果将脚本拷贝到该目录中了,只需要勾上关闭对话框时装载脚本即可

 

 

Q: 在有scrollback的时候怎么快速滚屏?

A: 按住ctrl滚动鼠标滚轮,或者钩上 系统设置-〉设置另一种鼠标滚轮方式,滚动鼠标滚轮直接滚屏,按住ctrl发送上下键

 

 

Q: 为什么推荐在telnet环境下使用文章下载或精华区下载?

A: SSH环境中一行的数据可能被分成多个数据包,没有原子性,因此引起s-term判断什么时候算翻页完成的失误。

  当然也有办法解决,但带来的后果是速度下降,比如翻页后等到3秒没有数据送来算完成,这样考几篇文章就需要几分钟,太慢了

  在telnet环境中这种情况也有可能出现,但概率非常小,因此推荐在telnet环境中下载

 

Q: 使用SSH连接某些服务器时出现Exceeded Max Packet Length

A: 可能是因为服务器使用的是F-SSH一类的商业ssh?或者协议实现与SSH ietf draft有出入,目前s-term暂时仅支持openSSH,以后会加以改进的

 

 

Q: 启动S-Term的时候出现Engine Create Error,而且无法使用脚本?或者使用新脚本的时候报错?

A: 报告Engine Create Error是因为您的系统不支持Active Script,一般使用Ie4.0以上系统中会自动带有Windows Script Engine 。S-Term最新脚本需要5.0版本以上的Windows Script Engine,如果您安装了Ie5或以上版本,就会自动满足要求。

如果因为种种原因出现了Windows Script Engine方面的问题,一般可以通过下面两种方法解决

1、升级Ie到5.0以上

2、如果觉得升级ie太麻烦,可以去http://www.microsoft.com/downloads/details.aspx?FamilyId=C717D943-7E4B-4622-86EB-95A22B832CAA&displaylang=en 下载安装windows script。

 

 

Q: 如何用按键激活缩小到Systray中的S-Term?

A: 设置一个S-Term的快捷方式,设置其属性中的快捷键,设置成如Ctrl + Alt + S,这样以后一按这个快捷键就可以呼出S-Term

 

 

Q: 修改脚本时出错了?怎么办?

A: 1、确认打开了选项-〉系统设置-〉多样化参数-〉勾上为装入的脚本生成LST文件

   2、根据错误提示的行号和列号,察看LST文件找到对应位置,在源文件中修正错误

   可以在http://msdn.microsoft.com/scripting/ 下载脚本调试工具

 

 

Q: 我可以修改和发布Control.vbs等等脚本吗?

A: 完全可以,请保留文件最前面的作者版权信息等。欢迎来讨论区讨论,你写的有普遍意义的脚本以后将随S-Term一起发布。

 

 

Q: S-Term拖动窗口字体不变化?

A: 1、当前可能使用了固定点阵大小的字体如Fixed Sys,换个字体就可以了

   2、当前连接属性中设置了拖动窗口不改变字体

 

 

Q: Unix/Linux主机类型与BBS类型有什么不一样?

A: 

1、终端设置方面 *nix的键盘模拟是vt110、支持自动换行,而bbs是vt220,不支持自动换行,切换成bbs时自动设置屏幕大小为80*24

2、外观方面*nix拖动窗口不改变字体,而bbs默认拖动窗口改变字体

3、支持鼠标方面*nix将关闭全部选项

4、防止发呆方面*nix将关闭全部选项

5、粘贴:*nix直接将剪贴板内容送入主机,而bbs将先转换剪贴板中的esc为对应的按键

 

 

Q: 怎样设置筛选下载文章的表达式?

A:

1、输入一个逻辑表达式定义搜索,总共可以搜索No(数字, 文章号), Mark(字符串, 标记 如g, b等), Author(字符串, 文章作者), dDate(字符串, 日期), Title(字符串, 标题), lLine(字符串, 整行文本,包括文章号,标记等的一个字符串)。

可以直接使用VBscript中的Instr(串, 查找的子串)进行查找, 也可以使用各种函数如Mid, Left, Ucase等等, S-Term也提供RegExpMatch(模式,串), 帮助使用正则表达式进行查找.

示例:
如 RegExpMatch("\d{1,}", Title)查找所有标题中含有数字的文章,如 查找所有标题中含有sterm的字符串,写成

Instr(Title, "sterm") > 0 


查找所有作者为pred的文章, 写成

Lcase(Author) = "pred"

如果同时要满足多个条件,可用And, Or等连接,如

Instr(Title, "sterm") > 0 And Lcase(Author) = "pred"

默认True表示对任何文章下载筛选都返回True,因此下载所有文章

 

2、普通字符串查找Instr是区分大小写的,因此,如果需要查找所有包含STerm以及sterm的标题,可以写成
Instr(Lcase(Title), "sterm") > 0 

Instr(Ucase(Title), "STERM") > 0 

其中Lcase和Ucase分别是将字符串转换成全小写/大写,详细Vbscript脚本函数可参见Msdn中相关部分



3、因为算术或者逻辑操作符有一定优先级,因此为了保证选择的正确性,强烈建议使用括号如查找文章编号大于1000,标题中含有sterm或者脚本的文章,可写成下面这样:

(Instr(Lcase(Title), "sterm") > 0 Or Instr(Title, "脚本") > 0) And (No > 1000)

 

4、正则表达式的语法可参见Msdn->Platform SDK Documentation->Tools and Scripting->Scripting->Windows Script Technologies->VBscript->User's Guide->Introduction to Regular Expressions->Regular Expressions Syntax,或者直接在Msdn的Index中输入regular expression syntax

用正则表达式可以完成复杂的搜索:

如需要查找标题中包含有数字或者英文字母RSTUVW或rstuvw的所有文章可以写成

RegExpMatch("[R-Wr-w0-9]", Title) > 0

配合其他条件一起使用,比如在上面的情况下还要求作者为pred可以写成

(RegExpMatch("[R-Wr-w0-9]", Title) > 0) And (lcase(Author) = "pred")

 

 

Q: 怎样批量下载文章?怎样下载精华区?

A: 在文章列表时按拷贝文章的按钮即可批量下载文章,进入精华区后按拷贝文章即可下载精华区

 

 

Q: 自动登陆不会用 

A: 按工具条上的齿轮,或者点击选项->当前连接设置->Telnet设置中,选择登陆Tab,勾上自动登陆,在等待中写上等待的内容,如bbs上在要求输入用户名会提示:请输入用户名,那么可以在等待中写上 "用户名"(不要写引号),发送写上你的用户名,要送出回车请写上^M,如要送出pred加回车,写上"pred^M"(不要写引号)即可。

 

 

Q: 新版的sterm在粘贴从ansieditor中复制过来的彩色asc图片时原代码中的*[会变成**[ ?

A: 从2507开始粘贴就改成这样了,主要的目的是为了能在bbs之间拷贝和粘贴,比如在一个bbs输入esc的方法是按两下esc键,在另一个bbs上是两个^U,而另外一个bbs却是esc键1次,就造成了矛盾。因此,只好把剪贴板中的esc统一成一个,根据具体bbs的设置转换成按键从而正确的粘贴。 在新版的STerm中带有ClipboardCvt工具,运行后自动监视剪贴板,把其中的2个ESC转换成1个ESC 

 

 

Q: 怎么在自动登陆或者用户自定义按键中输入回车? 

A: 关于自动登陆,用户定义按键等说一句,回车是^M,其他的特殊的符号按照bbs地说明用如发文章^P直接写就可以了,脚本中也一样,用SendConvertedData送出即可。请参看目录下的 发送特殊字符.htm

 

 

Q: 站点显示好像有问题? 

A: 关掉当前连接设置中的自动换行。还有问题?也许是站点的问题:)   

 

 

Q: 浮动输入框中怎么换行?

A: Ctrl + Enter

 

 

Q: 怎样上big5站点?

A: 1、当前连接设置-〉远程登录设置-〉终端设置中勾上Big5站点

   2、浮动输入框中输入的内容或者粘贴的内容自动转化成Big5.

 

 

Q: 为什么笑脸变蓝了或者在闪烁?

A: 在闪烁表示来了消息或者聊天请求,变蓝表示自动回复了消息

 

 

Q: 消息来了没反应?图标不闪烁,笑脸不闪烁? 

A: 确认: 

1、BBS上的个人设置打开了收到消息发声 

2、当前Session连接设置为BBS 如果不行 

3、在系统设置中选择系统控制脚本,就用STerm带的control.vbs 如果还不行 

4、就找一个别人改好的control.vbs 找不到?动手改改control.vbs吧,见最下面的说明   

 

 

Q: BBS无法支持鼠标? 

A: 修改设置中的终端类型为BBS。 另外,确认窗口行为24,列为80,如果有必要断开bbs重新连接试试看。 

 

 

Q: 无法通过拖动屏幕改变字体大小? 

A: 更改字体,改为宋体等就可以了。 

 

 

Q: 如何设置快速连接时的屏幕显示字体的大小颜色,背景颜色等? 

A: 在选项-〉当前连接设置中中设置字体,颜色,TELNET设置即可

 

 

Q: 请问定义登陆每个主机时采用不同的字体等设置? 

A: 请采用地址薄设置 

 

 

Q: 如何防止发呆? 

A: 按下工具条上的防止发呆按钮即可,如果过了指定的时间不按动键盘也会启动防止发呆功能,您可以在选项->当前连接设置->Telnet设置中设置。 

 

 

Q: 如何才能自动回复信息? 

A: 按下工具条上的自动回复信息按钮即可。如果过了指定的时间不按动键盘也会启动防止发呆功能,您可以在选项->当前连接设置->Telnet设置中设置。 

 

 

Q: 如何指定自动回复信息的内容? 

A: 在TELNET设置中设置即可。   

 

 

其他可以参考S-Term内的英文帮助。

 

 

 

 

 

 

消息判断:

关于消息的判断,首先判断连接类型是不是BBS

然后判断这次主机送来的发声的次数,

如果大于3,应该是聊天请求,设置STerm的消息状态为STERM_STATE_TALK

如果为0,没有任何请求

否则,如果能在屏幕顶端检测出消息,那么就是STERM_STATE_MSG,如果不能,就是STERM_STATE_UNKNOWN

这里检测消息用control.vbs最后的Function RegExpMatch(patrn, strng),检测第一行中有没有如(Apr 4 2002 19:20:00):或者(19:20):的字符串,用正则表达式\(([A|Z]|[a-z]|[0-9]| |:)*\)定义,如果在你的bbs上检测不到消息,看看这里是不是有问题?

如果检测到表达式,RegExpMatch(patrn, strng)的返回值高字节为检测到的第一个位置,低字节为匹配长度,如果检测不到,返回0

 

Sub STerm_OnDataCome(ByVal ID)
    Dim obj
    Dim strLine
    Dim nType
    Dim r
    Dim regEx, Match, Matches
    Dim nIdLength, nTimeLength
    Dim strID, strTime, strMsg
    Dim i, nScreenHeight
    
    Set obj = STermControlScript.GetWindowObj(ID)
    
    If (obj.nConnectionType = STERM_CONNECTION_BBS) Then
        If obj.nMaxBeepCount > 3 Then
            obj.nMsgState = STERM_STATE_TALK
            ElseIf obj.nMaxBeepCount > 0 Then
    
                    strLine = obj.GetBuffer(0)
                    r = RegExpMatch("\(([A|Z]|[a-z]|[0-9]| |:)*\)", strLine)    '检测消息特征
        
                    If r = 0 Then
                    obj.nMsgState = STERM_STATE_UNKNOW
                Else
                    nIdLength = Int(r / 256)
                    nTimeLength = r Mod 256
    
                    If nIdLength = 0 Then 
                        obj.nMsgState = STERM_STATE_UNKNOW
                    Else
    
                    If nTimeLength < 2 Then
                        obj.nMsgState = STERM_STATE_UNKNOW
                    Else
                        obj.nMsgState = STERM_STATE_MSG 
                        strID = Left(strLine, nIdLength)
                        strTime = Mid(strLine, nIdLength + 2, nTimeLength - 2)
                        strMsg = Mid(strLine, nIdLength + nTimeLength + 1 + 1)
    
                        If (RegExpMatch("\(\^", strMsg) > 0) Then 'Normal BBS Msg?

                        Else
                        ' Smth BBS MSG?
                            strMsg = ""
                            nScreenHeight = obj.GetScreenHeight()
                            For i = 1 To nScreenHeight - 1
                                strLine = obj.GetBuffer(i)
                                If (InStr(strLine, " 第") = 1) Then
                                    Exit For
                                End If
                                strMsg = strMsg + strLine + vbCRLF
                            Next
    
                        End If
                        obj.AddMsgToLst strID, strTime, strMsg, False
                    End If
                End If
            End If
        End If
    End If

End Sub