131738 发表于 2021-3-17 12:29:31

afan 发表于 2021-3-17 11:49
这个历史遗留问题提问者不知道遇到多少了,由于我未使用该版,不能重现问题,也就无法建议。前天前辈提供了 ...

关于"发现是 FirstWord 函数中的 WordStartPosition 造成的 (定义在 Common.lua)",
JSO 也给了解决代码, 但我测试仍然存在输入一行 If xxx Then 回车挂起问题.

关于 " 因此就简单添加了 if line + 3 >= editor.LineCount then 的修复方式 ",
这个JSO 认为会停用某些功能,但没有详细描述停用那些功能.

" 当然也可以直接修改 FirstWord 之类的函数(我已完成) " 未见发布啊.

gyp2000 发表于 2021-3-17 12:24:34

131738 发表于 2021-3-17 12:19
这个关联到 SciTE 源码(这就是询问你是否会 VS c++ 的原因).
而这个源码不是 AutoIt3 团队编写的,解决这 ...

我也是昨天看全局配置发现有这句参数 NewFileEncoding=
以前用编辑器也未使用过菜单新建文档。
所以也从未发现这种BUG和需要考虑新建文档的编码方式。

gyp2000 发表于 2021-3-17 12:22:20

afan 发表于 2021-3-17 11:49
这个历史遗留问题提问者不知道遇到多少了,由于我未使用该版,不能重现问题,也就无法建议。前天前辈提供了 ...

第一次接触lua脚本,没想到过居然是封装函数。我以为这些函数都是SCITE的API。
如果可以从源头解决,那自然是最佳方案。

131738 发表于 2021-3-17 12:19:38

gyp2000 发表于 2021-3-17 11:50
虽然问题是解决了,但是我发现编辑器默认设置存在一个问题。
AU3 和编辑器安装完毕后,创建文件的编码方式 ...

这个关联到 SciTE 源码(这就是询问你是否会 VS c++ 的原因).
而这个源码不是 AutoIt3 团队编写的,解决这个问题必须修改 SciTE 源码.
至于 SciTE 源码的官网, 我不得而知.

我曾经尝试修改源码的新建的处理直接打开 Template.au3 文件,无奈知识不足!

gyp2000 发表于 2021-3-17 11:57:05

afan 发表于 2021-3-17 11:49
这个历史遗留问题提问者不知道遇到多少了,由于我未使用该版,不能重现问题,也就无法建议。前天前辈提供了 ...

说的没错,测试后发现,
这堆代码最终效果就是回车后是否会将自动缩进的TAB删除掉,实际体验差别不大。
没有这段代码,仅仅会保留TAB缩进

gyp2000 发表于 2021-3-17 11:50:01

虽然问题是解决了,但是我发现编辑器默认设置存在一个问题。
AU3 和编辑器安装完毕后,创建文件的编码方式不统一。
鼠标右键创建新文件的编码方式是UTF8
编辑器文件菜单新建文件的编码是系统内码。
我感觉 有必要在全局配置中使用 NewFileEncoding= 参数来统一新建文件的编码方式。

afan 发表于 2021-3-17 11:49:41

这个历史遗留问题提问者不知道遇到多少了,由于我未使用该版,不能重现问题,也就无法建议。前天前辈提供了一条信息可重现问题,那就有修复的动力了。
很快查到是 AutoItIndentFix.lua 造成的,故查看了该功能描述,是弥补SciTE自身对缩进的两处不足而进行的修正,但说实话这修正其实真没多大用处……
你可以直接在 SciTE\lua\SciTEStartup.lua 文件中注释该行,一了百了,这是最容易的解决方式。如下:
-- LoadLuaFile("AutoItIndentFix.lua")

如果还是想用,那就继续……
经过简单测试,发现是 FirstWord 函数中的 WordStartPosition 造成的 (定义在 Common.lua),由于这个是SciTE的命令,因此我说这应该是SciTE版本的问题,没有对错误进行处理,而直接造成停止响应。
因此就简单添加了 if line + 3 >= editor.LineCount then 的修复方式,该方式仅对脚本的最末两行不检测(非Jos所述的3行…),而先敲几个空行是很多人的好习惯,所以最末两行也可以说没影响。
要说是完整保留不痛不痒的功能,还是崩溃停止响应,这个选择题太容易。

当然也可以直接修改 FirstWord 之类的函数(我已完成),或者 gyp2000 的方式,条条道路通罗马。

以上。

redapple2008 发表于 2021-3-17 11:47:42

131738 发表于 2021-3-17 11:44
OK.
官方已昨以发布正式 4.4.6 版 SciTE4AutoIt3.exe,
你能否做一个 4.4.6 版 & 3.3.14.5 的中文安装 ...

赞成你的想法,你们说的我好像没太明白。辛苦各位了。

131738 发表于 2021-3-17 11:44:12

gyp2000 发表于 2021-3-17 11:27
这段代码在编辑ANSI编码文件的时候而且全局配置的编码不是utf8,才会启用BUG修复。
在UTF8编码设置下, ...

OK.
官方已昨以发布正式 4.4.6 版 SciTE4AutoIt3.exe,
你能否做一个 4.4.6 版 & 3.3.14.5 的中文安装包,
并按你的方式修改 AutoItIndentFix.lua , 在这里发布出来,
以供更多人应用和测试.....

gyp2000 发表于 2021-3-17 11:34:59

本帖最后由 gyp2000 于 2021-3-17 11:37 编辑

测试发现 BUG 只有在编辑 ANSI编码文件(也不能算是ANSI编码,是指系统内码方式打开,系统内码是全局配置中指定的),
而且编码方式 不是UTF8 或者0的时候发生。

添加的这些语句不会影响到全局配置中的代码页设置。


gyp2000 发表于 2021-3-17 11:27:01

131738 发表于 2021-3-17 11:11
你这段代码中设置的关于 CodePage 的判断条件,
会否影响 SciTE 用户配置中的 CodePage 设置?
也即不回 ...

这段代码在编辑ANSI编码文件的时候而且全局配置的编码不是utf8,才会启用BUG修复。
在UTF8编码设置下,将会沿用原有的处理方式。

131738 发表于 2021-3-17 11:11:48

gyp2000 发表于 2021-3-17 00:39
原代码:
                local Next_firstword = self:FirstWord(line+1)
          ...

你这段代码中设置的关于 CodePage 的判断条件,
会否影响 SciTE 用户配置中的 CodePage 设置?
也即不回限制用户自由设置 SciTEUser.properties 中的 CodePage 配置.

测试这段代码与你修改此贴前的代码效果视乎一样.   

gyp2000 发表于 2021-3-17 00:39:42

本帖最后由 gyp2000 于 2021-3-17 03:51 编辑

131738 发表于 2021-3-17 00:00
测试可以解决 afan " 输入一行 If xxx Then 回车会挂起 " 的问题
            
原代码:
                local Next_firstword = self:FirstWord(line+1)
                local Next2_firstword = self:FirstWord(line+2)

替换成:

                local Next_firstword = ""
                local Next2_firstword = ""
                if line+1 ~= editor.LineCount-1 or editor.CodePage == 65001 or editor.CodePage == 0 then
                        Next_firstword = self:FirstWord(line+1)
                end
                if line+2 < editor.LineCount-1 or editor.CodePage == 65001 or editor.CodePage == 0 then
                        Next2_firstword = self:FirstWord(line+2)
                end

以上代码测试可以解决问题。
;SciTE全局配置中的CodePage设置项就是ANSI文件(系统内码)的字符集设置。
;文件如果以系统内码方式打开,代码页就是全局配置CodePage指定的值。
当前文件代码页值是 65001(UTF8BOM/UTF8/UTF16BE/UTF16LE) 或 0 ,正常执行语句。
否则就检查是否是最后一行,如果是则忽略执行。





131738 发表于 2021-3-17 00:00:11

gyp2000 发表于 2021-3-16 23:35
问题已找到。
导致修复失败的原因是自动缩进导致的。
回车后,正常新行是0个字符。


测试可以解决 afan " 输入一行 If xxx Then 回车会挂起 " 的问题

gyp2000 发表于 2021-3-16 23:35:44

本帖最后由 gyp2000 于 2021-3-16 23:46 编辑

问题已找到。
导致修复失败的原因是自动缩进导致的。
回车后,正常新行是0个字符。
如果上一行有代码,那么自动缩进就会添加一个TAB字符。
目前就存在个问题。查询行必须要有换行回车。才不会卡住。那么最后一行肯定是不可能有回车的,所以用行长度的方案不可行,还是需要用查询最后一行行号的办法避免


页: 1 2 3 [4] 5 6 7 8 9 10 11 12 13
查看完整版本: 更新 AutoIt v3.3.14.5 (2) 中文安装包