您好,我最近在 Windows 10上安装了64位版本的SWI-Prolog 8.0.1.1-1 (取代了我几年前安装的7.6.4)。 机器,从本质上讲,之后我打开PCE Emacs时,所有特定于语言的功能都被破坏了。意思是,我可以正常编辑和保存文件,但是语法高亮显示,源导航等命令不起作用 ......这意味着我也可以在“基本模式”下编辑所有内容。以前,我从未遇到过PCE Emacs的任何问题,并且在升级之前没有修改与SWIPL相关的任何内容。
由于SWI-Prolog似乎可以单独正常工作,只要图片中没有与GUI相关的内容,我强烈怀疑PCE库和/或XPCE已以某种方式损坏,或者出了点问题以及应该将SWIPL定向到正确的源文件和已编译文件的注册表和/或环境变量。不幸的是,我还没有足够的PCE向导(还!)知道如何确认(或使之无效)这种怀疑……即使事实证明我的直觉是正确的,我也不知道该怎么办。它。
我真的很想解决这个问题,因为当我是真正的GNU Emacs爱好者时,我喜欢能够快速编辑Prolog源文件并利用一些精美功能而无需充分发挥自己的功能的便利。每次都需要经过微调的Emacs小工具。
话虽这么说,我确实不想完全卸载并重新安装SWI-Prolog,尽管我相当有信心那可以解决问题。 (而且我当然也不必在整个计算机上都这样做,以防万一即使我竭尽全力从中清除所有SWIPL痕迹也无法满足要求...)
您以前是否曾遇到过此类问题(下面有更多信息),和/或您知道如何解决该问题?
用于8.0.1-1的安装程序未能将SWIPL添加到PATH
中,原因是该错误与路径太长有关...我对此没有多大考虑,因为无论如何,我知道如何自己编辑系统变量。
安装完成后,我打开了新安装的8.0.1-1,以查看是否有任何异常。我执行了一些简单的测试查询,一切似乎都很好……直到我决定尝试使用PCE Emacs编辑源文件。当我选择菜单项File > Edit...
时,在SWI-Prolog崩溃之前终端中出现以下错误:
pce_error(no_home)
我立即输入了一个Google搜索,用引号引起了这个奇怪的词;几乎唯一相关的结果是Github上的PCE源代码。我查看了源代码,发现它似乎在寻找名为PCEHOME
的系统环境变量。我添加了此环境变量,将其指向C:\Program Files\swipl\xpce\
。我也将C:\Program Files\swipl\bin
和C:\Program Files\swipl\xpce\
添加到了PATH
环境变量中,以达到很好的效果。
当我重新打开swipl-win.exe
并选择File > Open
时,PCE Emacs按预期打开了文件进行编辑。但是,很快我就意识到仍然存在着严重的错误。
我注意到的第一件事是语法突出显示明显被破坏了。状态行显示了一些看起来很神秘的错误,以响应我在源代码周围单击。当我切换到CHR模式时,发生了一些语法高亮显示,但是大约一半的缓冲区在定界符(我相信是方括号)之后以洋红色背景高亮显示,并表明存在语法错误(尽管实际上,代码没有语法错误。
我在互联网上找不到关于PCE Emacs语法突出显示的信息。看来我是SWI-Prolog历史上唯一遇到这种问题的人...
看到我的困境开始与升级同时发生,我推测问题可能是8.0.1-1引入的错误。作为我具有远见的人,我认为尝试升级到最新的开发版本(8.1.0)而不是降级到7.6.4并没有什么坏处。
从该问题的原始发稿日期开始,奇异的语法突出显示行为已被完全缺少语法突出显示所取代。其他特定于语言的功能保持不变(也就是说,它们根本不起作用)。 简而言之,PCE Emacs仍然充满异常,我在下面列出了其中的几个。
我希望这是足够彻底的,但是如果我能提供更多信息,这些信息可能有助于诊断这些问题的原因和/或解决这些问题,请告诉我,我将尽力而为。在这里添加。
文件:
当包含某些CHR规则(除了普通的SWIPL代码)的缓冲区处于活动状态时,选择菜单项File > Mode > chr
会使PCE Emacs至少突出显示匹配的配对对,但是仍然不突出显示语法。
选择菜单项File > Shell
将打开一个名为*shell* [exited]
的空缓冲区,并使以下内容出现在PCE Emacs状态行中:
sh:进程退出状态为-1
选择菜单项File > Mode > prolog
(如果尚未处于Prolog模式时)将导致(按预期)在PCE Emacs状态行中显示以下内容:
切换到``序言''模式
...但是,没有激活语法突出显示或源交互功能,并且PCE Emacs的外观或功能没有改变。
浏览:
选择菜单项Browse > Prolog Navigator
不会执行任何操作。
将鼠标悬停在菜单项Browse > Source file...
上会在终端中显示以下内容:
错误:[线程pce]未处理的异常:atomic_list_concat / 2:类型错误:预期为“文本”,找到了“序言/启动”(复合)
错误:[线程pce]未处理的异常:atomic_list_concat / 2:类型错误:预期为“文本”,发现为“序言/启动”(复合)
选择菜单项Browse > Find Definition...
,然后在 Prolog谓词 字段中键入d
,然后按< kbd> TAB 键触发完成,导致以下内容出现在终端中:
错误:[线程pce]未处理的异常:sub_atom / 5:类型错误:预期为“ atom”,找到了“ C'dict”(一个reserved_symbol_reference)
错误:[线程pce]未处理的异常:sub_atom / 5:类型错误:预期为“ atom”,找到了“ C'dict”(一个reserve_symbol_reference)
比较:
Compile > Compile buffer
将在PCE Emacs窗口底部的状态栏中显示以下内容:
compile_buffer命令失败
PROLOG:
选择菜单项Prolog > Check clause
会使以下内容出现在PCE Emacs窗口底部的状态栏中:
check_clause命令失败
选择菜单项Prolog > Edit exceptions...
会导致以下情况:
标题为 SWI-Prolog warnings 的对话框的外观,其中仅包含 Quit 按钮和一个可选的列表类型字段,其中包含以下项目:
gui.pl:91:目标(指令)失败:prolog_gui:register_directives
该项目链接到文件gui.pl
中的第91行,单击该项目后,该文件将在PCE Emacs的新缓冲区中打开。
错误:[线程pce]未处理的异常:sub_atom / 5:类型错误:预期为“ atom”,找到了“ C'dict”(一个reserved_symbol_reference)
错误:[线程pce]未处理的异常:sub_atom / 5:类型错误:预期为“ atom”,找到了“ C'dict”(一个reserved_symbol_reference)
警告:c:/程序文件/swipl/xpce/prolog/lib/trace/gui.pl:91: 目标(指令)失败:prolog_gui:register_directories
%图形前端将用于后续跟踪
PCE:
选择菜单项PCE > Editpce...
,然后从 Behaviour | class 下拉菜单中选择emacs_prolog_mode
,将导致PCE Emacs打开空白缓冲区(对于emacs_prolog_mode
,标题为prolog_mode.pl
的缓冲区)。我相当确定prolog_mode.pl
(文件,而不是缓冲区)不能真正为空。
选择菜单项Pce > Spypce...
,然后从 行为|类 下拉菜单中选择emacs_mode
,>
错误:[线程pce]未处理的异常:emacs_fundamental_mode-> spypce:参数1(?):“行为*”,发现为“ @ emacs_mode_class / emacs_mode_class”
选择菜单项Pce > Tracepce...
,然后从 行为| class 下拉菜单中选择prolog_ide
出现在终端中:
错误:[线程pce]未处理的异常:emacs_fundamental_mode-> tracepce:参数1(?):“行为*”,发现为“ @ prolog_ide_class / class”
帮助:
选择菜单项Help > Help on mode
不会执行任何操作。
选择菜单项Help > Help
会导致以下情况:
[PCE警告:@ 142244788304 / hlp_buffer:插槽indent_tabs中的值非法:class_default]
选择菜单项Help > Describe function...
,然后从 Command 下拉菜单中选择colourise_buffer
只会使以下内容变为出现在终端中:
警告:[Thread pce] @ 142240619460 / send_method没有帮助。
警告:[Thread pce]使用?-apropos(query)。寻找候选人。
MISC:
我不记得是什么原因引起的,但是终端中也出现了以下错误:
错误:[线程pce] @ 142240667182 /对话框:<-模式
没有实现
我刚才做了一个make.
(在本次会议中我已经做过几次,但这是第一次这样的结果),并且在终端中出现了以下内容:< / p>
库c:/ program files / swipl / library /
的%更新索引 %设置已编译为trace_settings 0.00秒,0个子句
%堆栈被编译为prolog_ide_stack 0.02秒,0个子句
%viewterm编译为prolog_term_view 0.02秒,0个子句
警告:c:/程序文件/swipl/xpce/prolog/lib/trace/gui.pl:91:
目标(指令)失败:prolog_gui:register_directories
%c:/程序文件/ swipl / xpce / prolog / lib / trace / gui编译成prolog_gui
我猜想这与我通过Pce > Tracepce
打开的文件有关,等等...但是我没有对任何文件进行任何更改。此外,即使我连续执行两次make
,每次执行Updating index for library c:/program files/swipl/library/
的时间也比预期的要长,并且总是显示make.
。