通过Prolog.el在Emacs中选择这样或那样的Prolog系统

通过Prolog.el在Emacs中选择这样或那样的Prolog系统,emacs,prolog,Emacs,Prolog,Thierry Martinez更改了prolog.el,并提供了一个可以在微型缓冲区中获取prolog系统菜单的程序。有人向我建议(见下文),通过和,可以将这样或那样的Prolog系统的选择与给定的目录相关联。不幸的是,我没有成功地编写一个.dir-locals.el来选择目录中的SWI Prolog,并选择另一个,例如Jekejeke Prolog或GNU Prolog。因此,我回到了马丁内斯给出的解决方案。但我很高兴了解,在这种情况下,我们如何与合作伙伴合作。欢迎帮助。您的问题不再是蒂埃里

Thierry Martinez更改了prolog.el,并提供了一个可以在微型缓冲区中获取prolog系统菜单的程序。有人向我建议(见下文),通过和,可以将这样或那样的Prolog系统的选择与给定的目录相关联。不幸的是,我没有成功地编写一个.dir-locals.el来选择目录中的SWI Prolog,并选择另一个,例如Jekejeke Prolog或GNU Prolog。因此,我回到了马丁内斯给出的解决方案。但我很高兴了解,在这种情况下,我们如何与合作伙伴合作。欢迎帮助。

您的问题不再是蒂埃里·马丁内斯了吗?
对于蒂埃里·马丁内斯,我想你只需要改变一下:

(setq auto-mode-alist (append '(
                                ("\\.pro$" . prolog-mode)
                                ("\\.pl$" . prolog-or-perl-mode)
                                ("\\.chr$" . chr-mode)
                                )
         auto-mode-alist))
下面是一个示例,但我假设我的序言
系统由“jekejeke”而非“jekeprolog”标识:

我指的是Thierry Martinez的原始文件:

;; prolog-mode loader
;; Thierry.Martinez@inria.fr
;; under GPLv3


警告,我没有测试

如果要更改每个文件的prolog系统,可以在文件开头添加以下行

%% -*- prolog-system: swi -*-
用支持的任何系统替换swi

eclipse - Eclipse Prolog
mercury - Mercury
sicstus - SICStus Prolog
swi     - SWI Prolog
gnu     - GNU Prolog
现在,在使用多个prolog系统时存在一些问题:

  • 切换到其他系统后,
    模式名称
    不会改变。因此,如果以前是
    Prolog[GNU]
    ,即使
    Prolog系统的当前缓冲区本地值是
    swi
    模式名称将更改为
    Prolog[swi]
  • 无论
    prolog系统
    的缓冲区本地值是什么,当您执行
    运行prolog
    或键入
    C-C-l
    时,启动的prolog过程似乎是全局
    prolog系统
    值的过程。
    这是一个bug(有望解决)
  • 当前的
    prolog.el
    不支持同时运行不同的解释器。要运行
    gprolog
    ,必须停止
    swipl
    ,反之亦然。他们都在为控制缓冲区而斗争
  • 如果您仍然希望切换原始文件后缀类型,可以执行以下操作:

    (定义派生模式gnupolog模式prolog模式“GNU prolog”
    “这只是‘prolog模式’。”
    (setq本地prolog系统的gnu)
    (prolog模式变量)
    (添加到列表“自动模式列表”(“gnu\\.pl”.gnuprolog mode))
    
    在这里,任何带有
    gnu.pl
    后缀的文件都将在我们的
    gnuplog模式下打开,这只是一种
    prolog模式,由您选择prolog系统启动

    警告

  • 在这段代码中,由于
    prolog.el
    (最近出现)中的错误,语法高亮显示可能无法正常工作(取决于emacs的当前状态)
  • 由于仍然存在错误,启动的解释器可能不正确

  • 一个建议:(可选地)代替文件名,使用封闭目录名来选择系统之间的补充这个好的建议,我刚刚看到这个网页:你也可以考虑在这里问:谢谢。您对我的理解是正确的:我的问题不再是关于马丁内斯的设置是否确实运行良好。现在,在emacs中学习目录局部变量是一个问题。谢谢。因此,我理解,在不同的prolog系统中使用prolog.el最方便的方法可能是Martinez。我说的对吗?目前,Emacs自己的
    prolog模式
    将不支持您的用例。因此,这可能是您唯一的选择(它看起来像是emacs
    prolog模式的一个旧变体,所以我不知道它的工作情况如何)。我使用
    %-*-prolog系统:swi-*-
    在同一个
    *prolog*
    缓冲区中在swi、gnu之间切换,并在gnu-prolog和swi-prolog之间切换,以查看我的查询对两者的效果是否相同。
    eclipse - Eclipse Prolog
    mercury - Mercury
    sicstus - SICStus Prolog
    swi     - SWI Prolog
    gnu     - GNU Prolog