2016-08-27 26 views
15

Tôi đang sử dụng Bash trên Ubuntu trên chương trình Windows để sử dụng Emacs cho C++. Ngay bây giờ, tôi có thể mã hóa mọi thứ bằng cách sử dụng phím tắt, tuy nhiên, tôi muốn chọn văn bản bằng chuột hoặc đặt dấu bằng chuột thay vì luôn sử dụng bàn phím.Làm thế nào để sử dụng X Windows với Emacs trên Windows 10 Bash?

Để lấy Hệ thống Windows X, tôi đã thực hiện sudo apt-get install xserver -xorg nhưng các emac vẫn chạy trong trình chỉnh sửa thiết bị đầu cuối.

Tôi không biết các lệnh khác để sử dụng hoặc cách để X Windows bắt đầu chạy.

+1

Theo như tôi hiểu, Windows Bash không hỗ trợ X Server. Tuy nhiên, tôi là sự kết hợp của Windows Bash + hoặc [XMing] (https://channel9.msdn.com/Blogs/WinCoder/XMING--Bash-on-Ubuntu-on-Windows--X11-Window-System-Running- từ-Windows10-Subsystem-for-Linux) hoặc MobaXTerm có thể hoạt động cho bạn. –

+2

vcXsrv được đánh giá cao so với phiên bản Xming miễn phí. Tôi không chắc chắn nếu phiên bản đóng góp của Xming phù hợp với nó trong khả năng tương thích, nhưng Xming miễn phí là rất cũ và ngày. –

Trả lời

24

Windows bash không hỗ trợ X Server. Tuy nhiên, bằng cách sử dụng một cổng Windows X Server như MobaXTerm, XMing hoặc vcXsrv kết hợp với Windows bash hoạt động. Một số điều làm việc ra khỏi hộp (gvim đã làm,) emacs đòi hỏi nỗ lực nhiều hơn nữa.

Đây là cách tôi đã làm cho nó làm việc:

  • Install MobaXterm. Có lẽ bạn có thể làm cho nó hoạt động tốt với XMing, nhưng tôi đã thử nghiệm chỉ với MobaXterm. Cập nhật: Thử nghiệm với vcXsrvXMing (phiên bản trả tiền.) Hoạt động cơ bản giống nhau, có thể tôi sẽ gắn với MobaXTerm.

  • Cài đặt ảnh chụp emacs 25.1 ảnh chụp nhanh. Lý do: Ubuntu 14.04 đi kèm với emacs 24,3, mà không làm việc với Windows Server bash và MobaXTerm X

Cài đặt ảnh chụp bằng cách sử dụng lệnh sau đây (không biết tại sao, và nó quá cũ anyway.):

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

Sau đó chạy

sudo update-alternatives --config emacs 

và chọn emacs-snapshot

Hãy chắc chắn rằng bạn thiết lập DISPLAY

export DISPLAY=localhost:0.0 

Run MobaXTerm (bạn không cần bất cứ điều gì để làm ở trong đó, chỉ cần bắt đầu nó -. Nó sẽ bắt đầu X Server khi cần thiết)

Run emacs trong bash và thưởng thức.

Một vấn đề vẫn còn tồn tại và nó vẫn tồn tại trên tất cả ba gói mà tôi đã thử nghiệm (MobaXTerm, XMing và vcXsrv). Emacs dính vào kích thước khung hình ban đầu và không thay đổi kích thước khung hình của nó khi cửa sổ được thay đổi kích thước. Cùng một vấn đề với thanh menu - khi thanh trình đơn bị vô hiệu hóa, các emacs không đòi lại không gian của nó, nó vẫn là một hình chữ nhật màu xám. Vấn đề này dường như đặc biệt đối với các emacs trên Windows bash - gvim và các chương trình GUI khác có vẻ hoạt động tốt. Ngoài ra, chạy emacs 25.1 trên Linux sử dụng bất kỳ X Server trên Windows hoạt động tốt. Tôi đã cố gắng để xây dựng emacs với các thiết lập giao diện khác nhau (GTK 2.0 vv) nhưng emacs thực hiện trên Windows bash bị mắc kẹt. Nếu tôi tìm được giải pháp cho việc này, tôi sẽ đăng cập nhật.

Cập nhật 2017/09/24 Theo Jarett sau trong init.el bạn nên sửa chữa khung vấn đề thay đổi kích thước:

(setq frame-resize-pixelwise t) 

Tôi không có Windows với bash hoạt động nữa, vì vậy tôi không thể kiểm tra nó.

+1

Điều này đã hiệu quả! Tuy nhiên, tôi có 2 khiếu nại nhỏ: Cửa sổ emacs cực kỳ nhỏ và tôi không biết làm thế nào để thay đổi kích thước của màn hình (thay đổi kích thước cửa sổ không thực sự thay đổi kích thước của màn hình; tôi chỉ nhận được viền trắng lớn) . Ngoài ra, bất cứ khi nào tôi nhấp vào một liên kết, rất nhiều dòng trong trình chỉnh sửa trở thành màu trắng và nó không biến mất. http://tinypic.com/r/27xi5bn/9 – novice

+0

Tôi có hành vi tương tự. Tôi đang kiểm tra nếu xây dựng emacs với Gtk2.0 thay vì mặc định Gtk3.0 giúp. Lý do tôi nghĩ rằng nó có thể giúp đỡ là gvim hoạt động tốt hơn trên Windows bash với MobaXterm, và sự khác biệt đáng kể duy nhất tôi đã tìm thấy là phiên bản Gtk của build. Sẽ cập nhật ngay sau khi tôi biết nếu nó giúp. –

+1

Trong thời gian chờ đợi, bạn có thể giải quyết vấn đề đầu tiên bằng cách sử dụng tùy chọn lệnh hình học, như 'emacs -g 200x50'. Thật không may, nó không hoạt động cho 'emacsclient'. –

6

Cảm ơn câu trả lời hay của @ Yuri, nó hoạt động! Sau khi thử thêm một số lỗi & Tôi đã tìm thấy cách khắc phục sự cố viền màu trắng. Bạn sẽ cần phải xây dựng lại từ mã nguồn Emacs v24.5 (tôi đã thử một số phiên bản v25 trong kho git nhưng tất cả đều thất bại, nếu bạn đang sử dụng kho git, thẻ thanh toán "emacs-24.5-rc3"). Trong giai đoạn cấu hình, bạn sẽ cần phải chọn bộ công cụ x "rõ ràng" (hoặc "athena", cùng một thứ) thay vì "gtk3" hiện tại. Lưu ý rằng "motif" có cùng vấn đề.

Trước tiên, tải xuống mã nguồn Emacs và cài đặt gói "libxaw7-dev". "Libncurses5-dev" chỉ trong trường hợp bạn không có nó. Giả sử chúng tôi làm mọi thứ trong thư mục ~/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 

Bây giờ chúng tôi có thư mục "emacs-24.5" được trích xuất. Để ngăn chặn các vấn đề D-BUS báo cáo ở những nơi khác chúng ta hãy cấu hình mà không có nó, và cài đặt nó trong/usr/local/bin (theo mặc định):

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

Bây giờ, chúng tôi gần như đã sẵn sàng để xây dựng Emacs. Nhưng trước đó, chúng ta cần phải tinh chỉnh hạt nhân một chút hoặc xây dựng sẽ sớm thất bại. (Hãy bỏ qua các chi tiết, nếu bạn quan tâm, nó được giải thích trong "etc/PROBLEMS" trong mã nguồn emacs của bạn.) Bạn chỉ cần điều này trong giai đoạn xây dựng. Một khi các emacs mới của bạn được cài đặt, bạn không cần phải làm điều này một lần nữa.

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

Bây giờ chúng ta hãy đi vào quá trình xây dựng dài, bạn có thể trải nghiệm một sự suy giảm hệ thống tổng thể trong việc xây dựng, bạn có thể giảm số lượng các chủ đề được sử dụng trong xây dựng (ở đây tôi sử dụng "4" cho 2 lõi 4 - CPU Intel, không sử dụng số lớn hơn chủ đề được hỗ trợ (cat/proc/cpuinfo) hoặc nó sẽ trở nên chậm hơn.)

time nice make -j 4 

Chỉ mất vài phút? Hơn đến, bây giờ cài đặt nó (nhớ "sudo" ở đây):

sudo make install 

Toàn bộ xây dựng và cài đặt chỉ mất chưa đến 10 phút trên máy tính của tôi, không phải là quá xấu. Bây giờ chúng ta có một Emacs làm việc 24.5 đặt tại "/ usr/local/bin/emacs". Nếu bạn có mọi thứ được thiết lập như câu trả lời của @ Yuri, bạn sẽ có thể khởi chạy nó ngay bây giờ:

/usr/local/bin/emacs & 

Bây giờ bạn có thể tối đa hóa và làm những gì bạn muốn. Đây là một ảnh chụp màn hình, nhận thấy góc trên bên phải, nó được phóng to:

enter image description here

Đừng lo lắng về màu sắc, đó là lựa chọn chủ đề của riêng tôi.

Vẫn còn một vấn đề nữa. Hãy một lần nữa giải quyết nó. Đôi khi bạn đã chọn một mục trình đơn và các cuộc tấn công "viền trắng" một lần nữa!

enter image description here

Giờ đây nhỏ hơn nhưng vẫn gây phiền nhiễu.

enter image description here

May mắn thay lần này chúng ta có thể để nó biến mất. Phóng to/khôi phục cửa sổ và nó sẽ biến mất. Sau một vài vòng đôi khi nó lại xảy ra lần nữa, nhưng không phải lúc nào cũng vậy. Điều này vẫn còn gây phiền nhiễu. Kể từ khi thay đổi kích thước cửa sổ có thể khắc phục vấn đề này, tại sao chúng ta không làm cho nó tự động? Có lẽ một cách giải quyết không quá tệ?

Bây giờ sửa "~/emacs" tập tin của bạn và thêm đoạn mã sau (: sử dụng Emacs mới của bạn, tất nhiên;):

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

Mã này không phải là hoàn hảo, nhưng nó hoạt động. Nó sẽ thay đổi kích thước khung hình của bạn một chút và khôi phục lại ngay khi bạn sử dụng menu. Nó cũng ngăn cản việc thay đổi kích thước thường xuyên.

+0

Nhận xét của [Chihiro Fukazawa] (http://stackoverflow.com/users/7388121/chihiro-fukazawa) gợi ý rằng sau khi xây dựng thành công Emacs, '/ proc/sys/kernel/randomize_va_space' phải được hoàn nguyên về giá trị ban đầu –

+0

Thực ra '/ proc/sys/kernel/randomize_va_space' sẽ được khôi phục về giá trị ban đầu của nó khi bạn thoát khỏi bash gốc (và tất cả tiến trình con của nó). Lần tới khi bạn chạy bash bạn có thể thấy nó được khôi phục thành "2". –

+0

điều này thực sự tuyệt vời; làm thế nào bạn có phông chữ để làm việc? Tôi đã cài đặt chính xác theo các hướng dẫn này, nhưng các emacs không thể thấy bất kỳ phông chữ hệ thống nào của tôi. không phải phông chữ cửa sổ, cũng như phông chữ mà 'fclist' hiển thị, làm cho các emacs waaaaay xấu xí đối với tôi. – hal3

0

Các emacs mặc định sẽ hoạt động với Xming và các tùy chọn khác. Vấn đề là các điểm thay thế mặc định cho lệnh emacs24-nox. Bạn cần phải cài đặt 'emacs24' thay vào đó, loại bỏ 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 

Đảm bảo rằng $ DISPLAY được đặt chính xác.

export DISPLAY=localhost:0.0 
Các vấn đề liên quan