20

我正在使用 Bash on Ubuntu on Windows 程序将 Emacs 用于 C++。现在,我可以使用键盘快捷键对所有内容进行编码,但是,我想用鼠标选择文本或用鼠标设置标记,而不必总是使用键盘。

为了获得 X Windows 系统,我已经这样做了,sudo apt-get install xserver -xorg但 emacs 仍然在终端编辑器中运行。

我不知道要使用哪些其他命令或如何让 X Windows 开始运行。

4

3 回答 3

38

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

这是我如何使它工作的:

  • 安装MobaXterm。很可能您也可以使其与 XMing 一起使用,但我仅使用 MobaXterm 进行了测试。更新:使用vcXsrvXMing(付费版)进行测试。工作原理基本相同,我可能会坚持使用 MobaXTerm。

  • 安装 emacs 25.1 快照。原因:Ubuntu 14.04 带有 emacs 24.3,它不适用于 Windows bash 和 MobaXTerm X 服务器(不知道为什么,反正它太旧了。)

使用以下命令安装快照:

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

然后运行

sudo update-alternatives --config emacs

并选择emacs-snapshot

确保您设置DISPLAY

export DISPLAY=localhost:0.0

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

在 bash 中运行 emacs 并享受。

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

更新2017 年 9 月 24 日根据Jarett的说法,您init.el应该修复框架大小调整问题:

(setq frame-resize-pixelwise t)

我没有激活 bash 的 Windows,所以我无法测试它。

于 2016-08-28T07:04:28.717 回答
7

感谢@Yuri 的好回答,它有效!经过进一步的尝试和错误,我找到了解决白色边框问题的方法。您将需要从 Emacs v24.5 源代码重新构建(我在 git 存储库中尝试了一些 v25 版本,但都失败了,如果您使用的是 git 存储库,请签出标签“emacs-24.5-rc3”)。在配置阶段,您需要选择“lucid”(或“athena”,同样的东西)x-toolkit 而不是当前的“gtk3”。请注意,“主题”有同样的问题。

首先,下载 Emacs 源代码并安装“libxaw7-dev”包。“libncurses5-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"

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

time nice make -j 4

只需要几分钟?更多内容,现在安装它(记住这里的“sudo”):

sudo make install 

在我的机器上,整个构建和安装不到 10 分钟,还不错。现在我们在“/usr/local/bin/emacs”中有一个工作的 Emacs 24.5。如果您将所有设置都设置为@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)

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

于 2016-12-09T09:45:41.080 回答
1

默认的 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
于 2017-11-15T04:29:50.590 回答