找回密码
 加入
搜索
楼主: 131738

[原创] 更新 AutoIt v3.3.14.5 (2) 中文安装包

 火...   [复制链接]
发表于 2021-3-16 03:41:50 | 显示全部楼层
本帖最后由 gyp2000 于 2021-3-16 06:43 编辑

经过测试,可以容易重现这个BUG了,而不是仅限 Directives.au3
打开 AutoIt 脚本编辑器,然后文件菜单新建。
在新文档中 只要敲入回车就会程序无响应。

如果新建文档后修改文件编码到UTF-8,这时候敲入回车将不会出现无响应的问题。
这个问题的起因应该是self:FirstWord() 这个指令在ANSI编码的文件中,如果查询不存在的行(或者本行没有换行符)将会导致 SciTE.exe 程序无响应。
但是在UTF-8 编码的文件中 FirstWord() 指令查询不存在的行,将会返回空。
所以前面的修改会失去功能,部分功能缺失。

目前比较靠谱的修复BUG的方案是这样的:

原代码:
                local Next_firstword = self:FirstWord(line+1)
                local Next2_firstword = self:FirstWord(line+2)

替换成:

                local Next_firstword = ""
                local Next2_firstword = ""
                if editor:LineLength(line+1) ~= 0 then
                Next_firstword = self:FirstWord(line+1)
                end
                if editor:LineLength(line+2) ~= 0 then
                Next2_firstword = self:FirstWord(line+2)
                end

editor:LineLength 这个函数可以正常返回行的字节长度(包含换行符),遇到不存在的行可以返回0。

经过行字节长度判断后  SciTE.exe 程序无响应问题可以彻底解决

既避免了功能失效,也解决了程序未响应的问题。



发表于 2021-3-16 01:37:15 | 显示全部楼层
本帖最后由 gyp2000 于 2021-3-16 01:38 编辑

AutoItIndentFix.lua 出现问题是这几句:
-- subtract 1 from current line since we do this after the detected Enter was processed.;从当前行中减去1,因为我们是在处理检测到的Enter之后执行此操作的
local line = editor:LineFromPosition(editor.CurrentPos) -1    ;获取当前行号
local Curr_firstword = self:FirstWord(line)    ;获取当前行首单词
local Next_firstword = self:FirstWord(line+1)   ;获取下一行首单词,如果你是在最后一行回车,那么就会导致程序无响应。
local Next2_firstword = self:FirstWord(line+2)


处理办法,检查到在末行回车就跳过缩进FIX,在函数 AutoItIndentFix:OnKey(code) 中修改代码
原代码:45行
        if code == self.VK_RETURN and self:IsLexer(SCLEX_AU3) and not editor:AutoCActive() then
修改后:
        if code == self.VK_RETURN and self:IsLexer(SCLEX_AU3) and not editor:AutoCActive() and editor:LineFromPosition(editor.CurrentPos)+1 ~= editor.LineCount  then

修改后,在最后一行按回车将跳过 缩进FIX

发表于 2021-3-15 20:54:47 | 显示全部楼层
本帖最后由 afan 于 2021-3-15 20:59 编辑
131738 发表于 2021-3-15 20:43
那么我发到官网看看...............

ok~
其实你以前发的帖子直接同样用 Directives.au3 为例就行了,那样应该Jos也能重现问题。当然你也可以现在提,看他们是如何解决的~ 或者你可以直接说是ANSI编码的au3文件。
我的方法只是基于简单的lua语法,并未学习了解及深层次去修改,没有必要。觉得源头还是SciTE版本原因,没有做相应错误处理~
不知道你测试没有?没见你反馈。
 楼主| 发表于 2021-3-15 20:43:53 | 显示全部楼层
afan 发表于 2021-3-15 20:29
关键是添加的5行,其它的没动。math.modf 的区别估计是版本差异,我是在 3.3.14.5 修正的。
英文网没注 ...

那么我发到官网看看...............
发表于 2021-3-15 20:29:17 | 显示全部楼层
131738 发表于 2021-3-15 20:22
经文件对比, 共 6 处差异
你添加:
                if line + 3 >= editor.LineCount then

关键是添加的5行,其它的没动。math.modf 的区别估计是版本差异,我是在 3.3.14.5 修正的。
英文网没注册,网速令人崩溃,很少去。鸟语更捉急~
 楼主| 发表于 2021-3-15 20:22:40 | 显示全部楼层
afan 发表于 2021-3-15 19:54
应该已修正,替换该文件试试~

经文件对比, 共 6 处差异
你添加:
                if line + 3 >= editor.LineCount then
                        editor:EndUndoAction()
                        self.Check_Indent_inProgress = false
                        return return_value
                end
===========================
其余 5 处差异都是 math.modf( 与 math.mod( 的差异:
你的为 math.mod(
源码位 math.modf(
源码有 f 字母结尾; 你的去掉这个 f 字母

是这样吗? 如是, 则你可否自己提供到官网?
发表于 2021-3-15 19:54:46 | 显示全部楼层
131738 发表于 2021-3-15 16:56
你在 SciTE 中打开 \SciTE\AutoIt3Wrapper\Directives.au3
在此脚本最后行回车试试......

应该已修正,替换该文件试试~

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?加入

×
发表于 2021-3-15 19:21:53 | 显示全部楼层
131738 发表于 2021-3-15 16:56
你在 SciTE 中打开 \SciTE\AutoIt3Wrapper\Directives.au3
在此脚本最后行回车试试......

找到了问题文件,是 AutoItIndentFix.lua 这个 lua 脚本造成的
发表于 2021-3-15 19:03:59 | 显示全部楼层
131738 发表于 2021-3-15 16:56
你在 SciTE 中打开 \SciTE\AutoIt3Wrapper\Directives.au3
在此脚本最后行回车试试......

终于在前辈的版本重现了,只要脚本是 ANSI 编码,最末行回车就会僵死。
正在查找问题……
 楼主| 发表于 2021-3-15 16:56:26 | 显示全部楼层
afan 发表于 2021-3-15 16:48
谷歌翻译确实很尴尬~ 沟通太困难…
我这从没遇到过这种问题,重现不了问题徒有兴趣也没辙~

你在 SciTE 中打开 \SciTE\AutoIt3Wrapper\Directives.au3
在此脚本最后行回车试试......
发表于 2021-3-15 16:48:48 | 显示全部楼层
131738 发表于 2021-3-15 16:44
这其实是我发的提问贴, 经过谷歌翻译,难免相互意思表达含糊不清,最后我只好放弃了....

谷歌翻译确实很尴尬~ 沟通太困难…
我这从没遇到过这种问题,重现不了问题徒有兴趣也没辙~
 楼主| 发表于 2021-3-15 16:44:19 | 显示全部楼层
afan 发表于 2021-3-15 15:58
这个以前就看过了,我都替 Jos 急… 答非所问,跟这边论坛一样 _ _||

这其实是我发的提问贴, 经过谷歌翻译,难免相互意思表达含糊不清,最后我只好放弃了....
发表于 2021-3-15 16:35:35 | 显示全部楼层
131738 发表于 2021-3-15 15:41
1. 不使用菜单/新建 或 工具栏/新建,2. 新建的空脚本先保存.

我使用改变编码解决了
发表于 2021-3-15 16:35:08 | 显示全部楼层
afan 发表于 2021-3-15 11:49
有可能是某个lua脚本死循环了。
备份 ...\SciTE\lua\SciTEStartup.lua
每次注释一行 LoadLuaFile(...) ...


我改变下编码解决了
发表于 2021-3-15 15:58:01 | 显示全部楼层
本帖最后由 afan 于 2021-3-15 16:00 编辑

这个以前就看过了,我都替 Jos 急… 答非所问,跟这边论坛一样 _ _||
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-12-22 20:49 , Processed in 0.078835 second(s), 15 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表