【问题标题】:How can I make emacs think it is using a terminal?如何让 emacs 认为它​​正在使用终端?
【发布时间】:2010-07-06 08:38:23
【问题描述】:

我想使用 Emacs 自动执行涉及字体锁定模式的工作。我想对文件进行字体化,然后使用字体锁定模式的颜色将其转换为 HTML。问题是 Emacs 拒绝对文件进行字体化,除非它认为它正在终端中运行。换句话说,它在-batch 下运行时不会字体化。有没有办法让 Emacs 认为它​​在终端内运行,即使它是以编程方式运行的?

【问题讨论】:

    标签: emacs terminal


    【解决方案1】:

    Advanced Programming in the Unix Environment为书中所有源代码提供了一个src.tar.gz; 'pty' 目录包含用于创建 pty 主/从程序的示例代码,它可以伪造 tty 的存在。我使用 cron 对此进行了测试:

    * * * * * /tmp/apue.2e/pty/pty /usr/bin/tty > /tmp/pty.out 2> /tmp/pty.err
    * * * * * /usr/bin/tty > /tmp/tty.out 2> /tmp/tty.err
    

    而且输出令人满意:

    ==> /tmp/pty.out <==
    /dev/pts/5
    
    ==> /tmp/tty.out <==
    not a tty
    

    至少足以欺骗 tty。 :)

    【讨论】:

      【解决方案2】:

      使用-batch参数怎么样?

      【讨论】:

      • 这正是问题所在;如果我用 -batch 运行它,它就不起作用。
      • 啊,真的吗?你所做的看起来与 htmlize.el 完全一样,我很确定它曾经在批处理模式下工作,没有任何问题。你能告诉我们你是怎么解决的吗?
      • 我通过使用expect 程序解决了这个问题,如上所述。不幸的是,它使整个事情有点慢。你是对的,我正在使用 htmlize.el,但除非它连接到终端(对我来说,无论如何),否则它不起作用。您需要更多详细信息吗?
      【解决方案3】:

      你可以尝试使用expect 来包装它,看看它是否足够愚弄 emacs。另一种选择是挖掘 elisp 代码并对其进行修改,以删除对 isatty 的任何检查或阻止作业运行。

      【讨论】:

      • 我尝试了“expect”,但它仍然在屏幕上打印出很多垃圾,这是我试图避免的问题之一。我会继续研究 expect 是否有办法让它不写输出。
      • 您可以将输出重定向到 /dev/null(除非您需要从 emacs 捕获标准输出)。
      • 不,我不需要捕获标准输出。谢谢,终于搞定了。
      猜你喜欢
      • 1970-01-01
      • 2023-02-01
      • 1970-01-01
      • 2015-06-08
      • 1970-01-01
      • 2023-01-12
      • 1970-01-01
      • 2020-05-29
      • 1970-01-01
      相关资源
      最近更新 更多