Подтвердить что ты не робот

Как использовать X Windows с Emacs в Windows 10 Bash?

Я использую программу Bash в Ubuntu для Windows, чтобы использовать Emacs для С++. Прямо сейчас я могу кодировать все, используя сочетания клавиш, однако я хочу выбрать текст с помощью мыши или установить метку мышью, а не всегда использовать клавиатуру.

Чтобы получить систему X Windows, я уже сделал sudo apt-get install xserver -xorg, но emacs все еще работает в редакторе терминала.

Я не знаю, какие другие команды использовать или как запустить X Windows.

4b9b3361

Ответ 1

Windows bash не поддерживает X Server. Тем не менее, используется порт Windows X Server, такой как MobaXTerm, XMing или vcXsrv в сочетании с Windows bash. Некоторые вещи работают из коробки (gvim did,) emacs требует больше усилий.

Вот как я это сделал:

  • Установите MobaXterm. Скорее всего, вы можете заставить его работать и с XMing, но я тестировал только с MobaXterm. Обновление: Протестировано с помощью vcXsrv и XMing (платная версия.) Работает практически так же, я, вероятно, буду придерживаться 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.)

Запустите emacs в bash и наслаждайтесь.

Одна проблема остается, и она сохраняется во всех трех пакетах, которые я тестировал (MobaXTerm, XMing и vcXsrv). Emacs придерживается начального размера кадра и не меняет размер его кадра при изменении размера окна. Такая же проблема с панелью меню - когда панель меню отключена, emacs не возвращает свое пространство, она остается как серый прямоугольник. Эта проблема, похоже, свойственна emacs в Windows bash - gvim и другие программы GUI, похоже, работают нормально. Кроме того, запуск emacs 25.1 в Linux с использованием любого X-сервера в Windows отлично работает. Я попытался создать emacs с разными настройками GUI (GTK 2.0 и т.д.), Но emacs make на Windows bash застрял. Если я найду обходное решение для этого, я опубликую обновление.

Обновление 09/24/2017 Согласно Jarett, следующее в вашем init.el должно исправить проблему изменения размера кадра:

(setq frame-resize-pixelwise t)

У меня больше нет Windows с bash, поэтому я не могу ее протестировать.

Ответ 2

Спасибо за @Yuri хороший ответ, он работает! После некоторых попыток и ошибок я нашел способ исправить проблему с белой рамкой. Вам нужно будет перестроить исходный код Emacs v24.5 (я попробовал некоторые версии v25 в репозитории git, но все не удалось, если вы используете репозиторий git, тег checkout "emacs-24.5-rc3" ). На этапе конфигурации вам нужно будет выбрать "ясный" (или "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. Но до этого нам нужно немного настроить ядро, или сборка скоро закончится. (Позвольте пропустить детали, если вас это интересует, они объясняются в "etc/PROBLEMS" в исходном коде emacs.) Это нужно только на этапе сборки. После установки новых emacs вам больше не нужно делать это.

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

Теперь перейдем к процессу долгой сборки, вы можете столкнуться с общим замедлением системы во время сборки, вы можете уменьшить количество потоков, используемых в сборке (здесь я использую "4" для 2-ядерных 4-потоковых процессоров Intel, не используйте число, большее, чем поддерживаемые потоки (cat/proc/cpuinfo), или оно станет еще медленнее.)

time nice make -j 4

Занимает всего несколько минут? Еще впереди, теперь установите его (помните "sudo" здесь):

sudo make install 

Вся сборка и установка занимает менее 10 минут на моей машине, не так уж плохо. Теперь у нас есть рабочий Emacs 24.5, расположенный в "/usr/local/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)

Код не идеален, но он работает. Он немного изменит размер вашего кадра и сразу восстановит его, когда вы используете меню. Это также предотвращает частое изменение размера.

Ответ 3

По умолчанию 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