Запуск Emacs в Cygwin

6

Я установил Emacs, который поставляется с Cygwin. Как я могу заставить Cygwin запускать Emacs в своем собственном окне вместо окна консоли Cygwin.

Мне нравится, как в Ubuntu, когда я запускаю Emacs из терминала, он открывает графический интерфейс Emacs.

starcorn
источник
1
Мне любопытно: почему бы вам не установить версию Emacs для Windows ?
jgomo3
2
Это, безусловно, вариант, но если вы работаете в основном в среде Cygwin, полезно иметь Emacs, который понимает пути в стиле Cygwin ( /home/username/foo.txtпротив C:\cygwin\home\username\foo.txt).
Кит Томпсон
1
Потому что Cygwin дает мне ощущение Unix в Windows Box. И ваш ответ должен быть комментарием, а не ответом.
звездная кукуруза

Ответы:

6

Требуется запустить X-сервер и установить x-версию emacs, Cygwin включает оба (если вы выбираете правильные пакеты во время установки).

X-сервер, вероятно, запускается командой startxпосле установки.

Nifle
источник
1
Нужно ли устанавливать xemacs? последняя версия xemacs - только v21, а emacs - v23. Версия emacs, которую я использую на Ubuntu, также v23, которая может открываться в отдельном окне
starcorn
1
@klw - xemacs - это не совсем другая разновидность emacs (еще одна очень похожая программа). Это не emacs с Xвключенным -libraries. Namning немного сбивает с толку.
Nifle
@klw - Вы хотите пакеты emacs-X11
Nifle
@Nifle - я установил его, но не могу найти пакет для x-сервера. Можно ли дать мне имя для этого? Кстати, вы случайно не знаете, можно ли использовать Xming вместо этого для X-сервера Cygwin?
звездная кукуруза
@klw - Другой x-сервер отлично работает, именно этим я и пользуюсь большую часть времени, но бегло взглянем на пакеты cygwin. Думаю, вам нужен пакет X11 под названиемxorg-server
Nifle
4

Решением, отличным от X, является пакет emacs-w32 под Editors в настройке cygwin. Он запускает emacs как собственное приложение Windows, но все еще является чистым Cygwin. Если вы запустите его прямо из ярлыка, вам могут понравиться эти настройки в ~ / .emacs:

Добавьте cygwin в path и exec path, если cygwin по умолчанию отсутствует в вашей переменной PATH:

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

Если вы компилируете java или другие вещи, которые генерируют имена файлов, такие как C: \ what, вы можете сначала отредактировать / etc / fstab и добавить монтирование из C: \ в / c, например:

C: / c двоичный файл ntfs, пользователь 1 1

А затем обрабатывайте файлы, начинающиеся с C: как «магические имена файлов», которые переводятся в имена файлов в стиле Cygwin с этим в ~ / .emacs. Здесь я просто делаю две замены регулярного выражения в первом аргументе и игнорирую остальные. Кто-то, вероятно, должен создать .el для этого, сделать его более надежным и опубликовать его на http://www.emacswiki.org/emacs/ElispArea :

; Находясь в cygwin, разрешите C: \ what превратиться в / c / what
(defun cygwin-name-hook (операция и остальные аргументы)
  Msgstr "Превратить имена файлов Windows в имена файлов Cygwin."
  ;; Обрабатывать все операции одинаково
  (пусть ((сначала (автомобильные аргументы))
        (Блокировка-имя-файла-обработчики
         (минусы "cygwin-name-hook"
               (и (например, операция-запрет-имя-файла-операция)
                    ингибирующие-имя-файла-обработчики)))
        (операция запрета имени файла операции))
    (setq first (replace-regexp-in-string "^ C:" "/ c" first t))
    (setq first (replace-regexp-in-string "\\\\" "/" first t))
    (применить операцию (сначала минусы (cdr args)))))

(добавить в список 'file-name-handler-alist' ("^ [Cc]:". cygwin-name-hook))

Затем, если вы запустите emacs -nw внутри mintty, вам может понадобиться распознать больше ключей, поместив их в ~ / .emacs:

***** Для мяты
(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
источник