Uruchamianie emacsa w cygwin

6

Zainstalowałem Emacsa, który pochodzi z Cygwin. Jak mogę sprawić, by Cygwin uruchamiał Emacsa we własnym oknie, a nie z okna konsoli Cygwina.

Podoba mi się, jak w Ubuntu, kiedy uruchamiam Emacsa z terminala, otworzy się GUI Emacsa.

starcorn
źródło
1
Jestem ciekawy: dlaczego nie zainstalujesz wersja Windows Emacsa ?
jgomo3
2
To z pewnością opcja, ale jeśli pracujesz głównie w środowisku Cygwin, warto mieć Emacsa, który rozumie ścieżki w stylu Cygwina ( /home/username/foo.txt vs. C:\cygwin\home\username\foo.txt ).
Keith Thompson
1
Ponieważ cygwin daje mi poczucie unixa w oknie Windows. Twoja odpowiedź powinna być raczej komentarzem niż odpowiedzią.
starcorn

Odpowiedzi:

6

Musisz mieć uruchomiony serwer X i zainstalować wersję x emacsa, cygwin zawiera oba (jeśli wybierzesz poprawne pakiety podczas instalacji).

Serwer X prawdopodobnie został uruchomiony poleceniem startx po zainstalowaniu.

Nifle
źródło
1
Czy konieczne jest zainstalowanie xemacs? najnowsza wersja xemacs to tylko v21, natomiast emacs to v23. Wersja emacs, na której uruchamiam ubuntu, to także wersja 23, która może się otworzyć w osobnym oknie
starcorn
1
@klw - Żaden xemac nie jest innym smakiem emacsa (inny bardzo podobny program). To nie jest emacs z X -biblioteki włączone. Nazewnictwo jest nieco mylące.
Nifle
@klw - Chcesz pakiety emacs-X11
Nifle
@Nifle - mam zainstalowany, ale nie mogę znaleźć pakietu dla x-serwera. czy mógłbyś również podać nazwę? btw, nie zdarza ci się wiedzieć, czy Xming może być użyty zamiast X-serwera cygwina?
starcorn
@klw - Inny serwer X jest w porządku, to jest to, czego używam przez większość czasu, ale szybkie spojrzenie na pakiety cygwin Myślę, że chcesz pakiet X11 o nazwie xorg-server
Nifle
4

Rozwiązaniem innym niż X jest pakiet emacs-w32 w Edytorze w konfiguracji cygwin. Działa emacs jako natywna aplikacja Windows, ale nadal jest czystym Cygwinem. Jeśli uruchomisz go bezpośrednio ze skrótu, możesz polubić te ustawienia w ~ / .emacs:

Dodaj cygwin do ścieżki i exec, jeśli cygwin nie znajduje się domyślnie w PATH:

(setenv "PATH" (concat "/bin:/usr/bin:/usr/local/bin:" (getenv "PATH")))
(nconc exec-path '("/bin" "/usr/bin" "/usr/local/bin"))

Jeśli kompilujesz java lub inne rzeczy, które generują nazwy plików jak C: cokolwiek, możesz najpierw edytować / etc / fstab i dodać mount z C: o / c, takie jak:

C: /c ntfs binary,user 1 1

Następnie potraktuj pliki zaczynające się od C: jako „magiczne nazwy plików”, które zostaną przetłumaczone na nazwy plików w stylu Cygwin z tym w ~ / .emacs. Tutaj po prostu wykonuję dwa zamienniki wyrażeń regularnych na pierwszym argumencie i ignoruję resztę. Ktoś prawdopodobnie powinien w tym celu utworzyć plik .el, aby był bardziej wytrzymały i opublikował go http://www.emacswiki.org/emacs/ElispArea :

; When in cygwin, allow C:\whatever to turn into /c/whatever
(defun cygwin-name-hook (operation &rest args)
  "Turn Windows filenames into Cygwin filenames."
  ;; Handle all operations the same
  (let ((first (car args))
        (inhibit-file-name-handlers
         (cons 'cygwin-name-hook
               (and (eq inhibit-file-name-operation operation)
                    inhibit-file-name-handlers)))
        (inhibit-file-name-operation operation))
    (setq first (replace-regexp-in-string "^C:" "/c" first t))
    (setq first (replace-regexp-in-string "\\\\" "/" first t))
    (apply operation (cons first (cdr args)))))

(add-to-list 'file-name-handler-alist '("^[Cc]:" . cygwin-name-hook))

Następnie, jeśli uruchomisz emacs -nw środku mięty, możesz chcieć rozpoznać więcej kluczy, umieść w ~ / .emacs:

;***** For mintty
(define-key function-key-map "\e[1;5m" [(control ?-)])
(define-key function-key-map "\e[1;5k" [(control ?=)])
(define-key function-key-map "\e[1;5q" [(control ?1)])
(define-key function-key-map "\e[1;5s" [(control ?3)])
(define-key function-key-map "\e[1;5t" [(control ?4)])
(define-key function-key-map "\e[1;5u" [(control ?5)])
(define-key function-key-map "\e[1;5w" [(control ?7)])
(define-key function-key-map "\e[1;5x" [(control ?8)])
(define-key function-key-map "\e[1;5y" [(control ?9)])
(define-key function-key-map "\e[1;5p" [(control ?0)])
maxpolk
źródło