当前位置: 首页 > 知识库问答 >
问题:

如何在Windows 10 Bash上使用带有Emacs的X Windows?

马飞
2023-03-14

我正在使用Windows上Ubuntu上的Bash程序来使用Emacs for C。现在,我可以使用键盘快捷键编写所有代码,但是,我想用鼠标选择文本或用鼠标设置标记,而不必总是使用键盘。

为了得到XWindows系统,我已经做了sudo apt-get安装xserver-xorg,但是emacs仍然在终端编辑器中运行。

我不知道要使用什么其他命令,也不知道如何让X Windows开始运行。

共有3个答案

鲁俊友
2023-03-14

默认的emacs将与Xming和其他选项一起工作。问题是默认的替代选项指向emacs24-nox命令。您需要安装emacs24,这将删除emacs24-nox。

$ sudo update-alternatives --query emacs
Name: emacs
Link: /usr/bin/emacs
....
Status: auto
Best: /usr/bin/emacs24-nox
Value: /usr/bin/emacs24-nox

$ sudo apt install emacs24

$ sudo update-alternatives --query emacs
Name: emacs
Link: /usr/bin/emacs
...
Status: auto
Best: /usr/bin/emacs24-x
Value: /usr/bin/emacs24-x

确保$DISPLAY设置正确。

export DISPLAY=localhost:0.0
郑晗日
2023-03-14

感谢@尤里的漂亮回答,很管用!经过进一步的尝试

首先,下载Emacs源代码并安装“libxaw7-dev”包。“libncurse5 dev”只是为了防止您没有它。假设我们在目录~/build-emacs24中执行所有操作:

mkdir ~/build-emacs24
cd ~/build-emacs24
wget https://ftp.gnu.org/gnu/emacs/emacs-24.5.tar.xz
sudo apt-get install libxaw7-dev libncurses5-dev
tar xvf emacs-24.5.tar.xz

现在我们提取了“emacs-24.5”目录。为了防止其他地方报告的D-BUS问题,让我们在没有它的情况下进行配置,并将其安装在/usr/local/bin中(默认情况下):

cd emacs-24.5
./configure --without-dbus --without-gconf --without-gsettings --with-x-toolkit=athena 

现在,我们几乎可以构建Emacs了。但在此之前,我们需要稍微调整一下内核,否则构建很快就会失败。(如果您感兴趣,让我们跳过细节,在您的emacs源代码中的“etc/PROBLEMS”中对此进行了解释。)您只需要在构建阶段使用它。一旦安装了新的emacs,就不需要再这样做了。

sudo sh -c "echo 0 > /proc/sys/kernel/randomize_va_space"

现在,让我们进入漫长的构建过程,在构建过程中,您可能会遇到整体系统减速,您可以减少构建中使用的线程数(这里我对2核4线程Intel CPU使用“4”,不要使用大于支持的线程数(cat/proc/cpuinfo),否则它将变得更慢。)

time nice make -j 4

只需要几分钟?接下来,现在安装它(记住这里的sudo):

sudo make install 

在我的机器上,整个构建和安装只需要不到10分钟,还不错。现在我们有一个工作的Emacs 24.5位于"/usr/本地/bin/emacs"。如果你已经把一切都设置为@Yuri的答案,你现在应该可以启动它了:

/usr/local/bin/emacs &

现在你可以最大化它,做你想做的事情。这是一个屏幕截图,注意到右上角,它最大化了:

不要担心颜色,这是我自己的主题选择。

还有一个问题。让我们再次解决它。有时你选择了一个菜单项,“白色边框”再次攻击!

它现在变小了,但仍然很烦人。

幸运的是,这次我们可以让它消失。最大化/恢复窗口,它将消失。在几轮之后,它有时会停止再次发生,但并非总是如此。这仍然令人讨厌。既然调整窗口大小可以解决这个问题,为什么我们不让它成为自动的呢?也许是个不错的解决办法?

现在编辑“~/.emacs”文件并添加以下代码(:当然,使用新的emacs;):

(defvar fix-frame-white-border-last-check 0)

(defun current-sec ()
  (let ((currtime (current-time)))
    (logior (lsh (car currtime) 16) (cadr currtime))))

(defun fix-frame-white-border-uow (&optional frame)
  (when (> (- (current-sec) fix-frame-white-border-last-check) 2)
    (setf frame (or frame (selected-frame)))
    (let ((width  (frame-width frame))
          (height (frame-height frame)))
      (set-frame-size frame (1- width) height)
      (set-frame-size frame width height))
    (setq fix-frame-white-border-last-check (current-sec))))

(advice-add 'menu-bar-open :after #'fix-frame-white-border-uow)
(add-hook 'menu-bar-update-hook #'fix-frame-white-border-uow)

代码并不完美,但它是有效的。当你使用菜单时,它会稍微调整你的框架并立即恢复它。它还可以防止自己频繁调整大小。

卞坚成
2023-03-14

Windows bash不支持X服务器。但是,将Windows X服务器端口(如MobaXTerm、XMing或vcXsrv)与Windows bash结合使用是可行的。有些事情是开箱即用的(gvim做到了),emacs需要更多的努力。

以下是我如何让它工作的:

>

  • 安装MobaX术语。最有可能的是,您也可以让它与XMing一起工作,但我只使用MobaXterm进行了测试。更新:用vcXsrv和XMing(付费版本)测试。)工作原理基本相同,我可能会坚持使用MobaXTerm。

    安装emacs 25.1快照。原因:Ubuntu14.04附带了Emacs24.3,它不适用于WindowsBash和MobaxTermX服务器(不知道为什么,而且它太旧了)

    使用以下命令安装快照:

    sudo add-apt-repository ppa:ubuntu-elisp/ppa
    sudo apt-get update
    sudo apt-get install emacs-snapshot
    

    那就跑啊

    sudo update-alternatives --config emacs
    

    然后选择emacs快照

    确保设置了显示

    export DISPLAY=localhost:0.0
    

    运行MobaXTerm(您不需要在其中做任何事情,只需启动它-它将在需要时启动X Server。)

    在bash中运行emacs并享受。

    仍然存在一个问题,它在我测试的所有三个包(MobaXTerm、XMing和vcXsrv)中都存在。Emacs坚持初始框架大小,当窗口调整大小时不会调整其框架大小。菜单栏也有同样的问题——当菜单栏被禁用时,emacs不会回收它的空间,它仍然是一个灰色矩形。这个问题似乎是Windows bash上的emacs特有的-gvim和其他GUI程序似乎运行良好。此外,在Linux上运行emacs 25.1使用Windows上的任何X服务器工作正常。我试图用不同的图形用户界面设置(GTK 2.0等)来构建emacs。)但是在视窗bash上制作的emacs卡住了。如果我找到一个解决办法,我将发布更新。

    根据Jarett在您的init中更新2017年9月24日。el应修复帧大小调整问题:

    (setq frame-resize-pixelwise t)
    

    我不再有带bash活动的窗口,所以我不能测试它。

  •  类似资料:
    • 问题内容: 这有些奇怪。 这返回 并不是 如何获得保留空格,以便文件路径正确? 问题答案: 可以通过几种方式完成此操作,但我发现这样做更好:

    • 我正在尝试在Mac上使用带有IntelliJ的SceneBuilder。所以我下载了。dmg文件http://gluonhq.com/products/downloads/ 现在,我为IntelliJ中的SceneBuilder提供了以下路径: 当我试图打开一个,我得到了错误 看起来IntelliJ正在寻找这个sh脚本,但老实说,我不知道它在哪里。我在网上浏览了好几个网页,但实际上没有人帮我。。。

    • 在 Emacs 配置文件中加入以下代码 (global-set-key (kbd "C-c d") 'kid-sdcv-to-buffer) (defun kid-sdcv-to-buffer () (interactive) (let ((word (if mark-active (buffer-substring-no-properties (region-beginning) (r

    • 问题内容: 我正在尝试使用其中带有* 的URL在iPhone上发起呼叫。它会正确地调出呼叫对话框,但在您单击呼叫时又返回到野生动物园。 问题答案: 苹果公司的这份文档应该会有所帮助: 为防止用户恶意重定向电话或更改电话或帐户的行为,“电话”应用程序支持tel方案中的大多数(但不是全部)特殊字符。 具体来说,如果URL包含*或#字符,则“电话”应用程序不会尝试拨打相应的电话号码。

    • 问题内容: 我在React中使用Typescript。我在理解如何使用refs方面遇到麻烦,以便相对于refs引用的react节点获得静态类型和智能感知。我的代码如下。 问题答案: 如果您使用的是React 16.3+,建议的创建引用的方法是使用。 组件安装后,属性的属性将分配给引用的组件/ DOM元素,并在卸载时分配回该属性。因此,例如,您可以使用进行访问。 有关更多信息,请参见@apieceo

    • 给定以下具有Lombok注释的类和 在中的注释上出现以下错误: 隐式超级构造函数Parent()未定义。必须显式调用另一个构造函数。 我在子类和父类上尝试了、、注释与注释的几种不同组合,但还没有找到一个有效的解决方案。我使用的是Lombok 1.18.10。 供参考,这个问题是相关的 编辑