web-dev-qa-db-fra.com

Comment utiliser X Windows avec Emacs sur Windows 10 Bash?

J'utilise le programme Bash sur Ubuntu sur Windows pour utiliser Emacs pour C++ . Pour le moment, je peux tout coder à l'aide des raccourcis clavier. Cependant, je souhaite sélectionner du texte avec ma souris ou la marquer à l'aide de la souris au lieu de toujours avoir à utiliser mon clavier. 

Pour obtenir le système X Windows, je connaissais déjà Sudo apt-get install xserver -xorg mais emacs est toujours exécuté dans un éditeur de terminal. 

Je ne sais pas quelles autres commandes utiliser ou comment faire fonctionner X Windows.

18
novice

Windows bash ne prend pas en charge X Server. Cependant, l'utilisation d'un port Windows X Server tel que MobaXTerm, XMing ou vcXsrv conjointement à Windows bash fonctionne. Certaines choses ne fonctionnent pas (gvim l'a fait) emacs nécessite plus d'effort.

Voici comment je l'ai fait fonctionner:

  • Installez MobaXterm . Très probablement, vous pouvez également le faire fonctionner avec XMing, mais je n'ai testé qu'avec MobaXterm. Mise à jour: Testé avec vcXsrv et XMing (version payante.) Fonctionne essentiellement de la même façon, je vais probablement m'en tenir à MobaXTerm.

  • Installez instantané emacs 25.1. La raison: Ubuntu 14.04 est livré avec emacs 24.3, qui ne fonctionne pas avec Windows bash et le serveur MobaXTerm X (vous ne savez pas pourquoi, et il est trop vieux de toute façon.) 

Installez l'instantané à l'aide des commandes suivantes:

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

Puis courir

Sudo update-alternatives --config emacs

et sélectionnez emacs-snapshot

Assurez-vous de définir la DISPLAY

export DISPLAY=localhost:0.0

Exécutez MobaXTerm (vous n’avez besoin de rien, démarrez-le, il démarrera X Server en cas de besoin.)

Lancez emacs à bash et profitez-en.

Un problème persiste et persiste dans les trois packages que j'ai testés (MobaXTerm, XMing et vcXsrv). Emacs s'en tient à la taille initiale du cadre et ne redimensionne pas son cadre lorsque la fenêtre est redimensionnée. Même problème avec la barre de menus - lorsque la barre de menus est désactivée, emacs ne récupère pas son espace, il reste sous la forme d’un rectangle gris. Ce problème semble être propre à emacs sous Windows bash - gvim et d’autres programmes à interface graphique semblent bien fonctionner. De plus, exécuter emacs 25.1 sur Linux en utilisant n’importe quel serveur X sous Windows fonctionne bien. J'ai essayé de construire emacs avec différents paramètres d'interface graphique (GTK 2.0, etc.), mais emacs make sur Windows bash est bloqué. Si je trouve une solution de contournement, je posterai une mise à jour.

Mise à jour 24/09/2017 Selon Jarett , le code suivant dans votre init.el devrait résoudre le problème de redimensionnement de la trame:

(setq frame-resize-pixelwise t)

Je n'ai plus Windows avec bash actif, donc je ne peux pas le tester.

31
Yuri Steinschreiber

Merci pour la réponse de @ Yuri's Nice, ça marche! Après quelques tentatives supplémentaires, j'ai trouvé un moyen de résoudre le problème de la bordure blanche. Vous devrez reconstruire à partir du code source Emacs v24.5 (j'ai essayé quelques versions de la v25 dans le référentiel git, mais toutes ont échoué; si vous utilisez le référentiel git, utilisez la balise de contrôle "emacs-24.5-rc3"). Pendant la phase de configuration, vous devrez choisir "lucid" (ou "athena", même chose) x-toolkit au lieu du "gtk3" actuel. Notez que le "motif" a le même problème.

Tout d'abord, téléchargez le code source d'Emacs et installez le paquet "libxaw7-dev". Le "libncurses5-dev" est juste au cas où vous ne l'avez pas. Supposons que nous faisons tout dans le répertoire ~/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

Nous avons maintenant le répertoire "emacs-24.5" extrait. Afin d'éviter le problème de D-BUS signalé ailleurs, configurons-le sans et installons-le dans/usr/local/bin (par défaut):

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

Maintenant, nous sommes presque prêts à construire Emacs. Mais avant cela, nous devons modifier un peu le noyau, sinon la construction échouera bientôt. (Ignorons les détails, si cela vous intéresse, cela est expliqué dans "etc/PROBLEMS" dans le code source d'emacs.) Vous n'en aurez besoin que pendant la phase de construction. Une fois que votre nouvel Emacs est installé, vous n’avez plus besoin de le refaire.

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

Passons maintenant au processus de construction long, vous pourriez rencontrer un ralentissement général du système pendant la construction, vous pouvez réduire le nombre de threads utilisés dans la construction (ici, j'utilise "4" pour un processeur Intel à 2 cœurs à 4 threads, don ' t utilisez un nombre plus grand que les threads pris en charge (cat/proc/cpuinfo) ou cela deviendra encore plus lent.)

time Nice make -j 4

Prend seulement quelques minutes? Plus à venir, installez-le maintenant (souvenez-vous du "Sudo" ici):

Sudo make install 

L'ensemble de la construction et de l'installation prend moins de 10 minutes sur ma machine, pas trop mal. Nous avons maintenant un Emacs 24.5 en cours d’utilisation situé dans "/ usr/local/bin/emacs". Si vous avez tout configuré comme réponse de @ Yuri, vous devriez pouvoir le lancer maintenant:

/usr/local/bin/emacs &

Maintenant, vous pouvez le maximiser et faire les choses que vous voulez. Voici une capture d’écran, remarquée dans le coin supérieur droit, elle est maximisée:

 enter image description here

Ne vous inquiétez pas pour les couleurs, c'est ma propre sélection de thèmes. 

Il reste encore un problème. Nous allons à nouveau contourner le problème. Parfois, vous sélectionnez un élément de menu et la "bordure blanche" attaque à nouveau!

 enter image description here

Il est maintenant plus petit mais toujours agaçant. 

 enter image description here

Heureusement, cette fois, nous pouvons le laisser partir. Maximisez/restaurez la fenêtre et elle disparaîtra. Après quelques tours, cela cesse parfois de se reproduire, mais pas toujours. C'est toujours agaçant. Étant donné que le redimensionnement de la fenêtre peut résoudre ce problème, pourquoi ne pas le rendre automatique? Peut-être une solution de rechange pas trop mauvaise?

Maintenant, éditez votre fichier "~/.emacs" et ajoutez le code suivant (: utilisez votre nouvel Emacs, bien sûr;):

(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)

Le code n'est pas parfait, mais cela fonctionne. Il redimensionnera un peu votre cadre et le restaurera immédiatement lorsque vous utiliserez le menu. Cela évite également de redimensionner fréquemment.

6
Luke Lee

Le système emacs par défaut fonctionnera avec Xming et d’autres options. Le problème est que l’alternative par défaut pointe vers la commande emacs24-nox. Vous devez plutôt installer 'emacs24', ce qui supprime 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

Assurez-vous que $ DISPLAY est défini correctement.

export DISPLAY=localhost:0.0
1
Brian Whitehead