Как лучше всего интегрировать Emacs и Cygwin?

Существует тонна способов интегрировать Cygwin с Emacs в Windows. EmacsWiki показывает несколько идей. Вот опции, которые я нашел:

  1. Используйте Emac, который идет с Cygwin. (Тогда найдите способ добраться до cmd.exe, если Вы хотите его.)
  2. Используйте NTEmacs и Cygwin как "иногда" оболочка. (Специальная команда для запуска Cygwin)
  3. Используйте NTEmacs и Cygwin как "всегда" оболочка. (Оболочка M-x запускает cygwin),

Дать некоторую ясность относительно "почему". Вот несколько примеров, где мне жаль, что у меня не было Cygwin с Emacs:

  1. M-x whois не работает над NTEmacs.
  2. Пакеты как Охота к перемене мест включают Make-файл, который не является дружественным Windows.
  3. Иногда мне просто нужна оболочка удара для чего-то.

Таким образом, какая опция Emacs/Cygwin работает хорошо на других? Кроме того, кто-либо попробовал интеграцию MSYS успешно?

42
задан User1 15 January 2010 в 23:50
поделиться

6 ответов

Это точно известная ошибка - см. здесь , здесь и здесь . Просто чтобы бросить несколько ссылок:

  • Этот блог предлагает обходной путь, используя метод IE.
  • Этот блог имеет мягкое объяснение обходного пути.

И тогда это решение, вероятно, другой ошибки в раннем выпуске IE8. Он решил это, увеличив изображение - может, стоит попробовать, если вы работаете с изображением 1x1.

Может быть, вы можете обойти это, используя различные png с различной непрозрачностью, и отсутствие непрозрачности CSS?

-121--4746613-

Если у вас есть NSString , вы можете сделать

NSString *myString; //Assuume the string you want to write is this
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *path = [documentsDirectory stringByAppendingPathComponent:@"myfile.txt"];
[myString writeToFile:path atomically:YES];
-121--2392160-

Мне нравится версия xemacs , которую вы получаете из программы установки Cygwin. Работает в нестандартном режиме, клавиша Alt соответствует Meta , и буфер оболочки bash находится там, где вам это нужно.

1
ответ дан 26 November 2019 в 23:57
поделиться

Я установил Cygwin в корне. Это явно предупреждает вас против этого, но я не видел больных последствий. (Я нашел этот совет от Стива Егге).

Я также установил Cygwin-Mount , что помогает кучу. Кроме того, мне пришлось переключиться с Ispell в Assell. Наконец, немного настраивает, и мне было хорошо пойти:

;;;;;;;;;;;;;;;;;;;;;;
;;CygForTheWin
;;*cygwin
(when (equal system-type 'windows-nt) 
(message "Setting up Cygwin...")
(let* ((cygwin-root "c:")
       (cygwin-bin (concat cygwin-root "/bin"))
       (gambit-bin "/usr/local/Gambit-C/4.0b22/bin/")
       (snow-bin "/usr/local/snow/current/bin")
       (mysql-bin "/wamp/bin/mysql/mysql5.0.51a/bin/"))
   (setenv "PATH" (concat cygwin-bin ";" ;
                          snow-bin ";" 
                          gambit-bin ";"
                          mysql-bin ";"
                          "c:/usr/local/jdk1.60_03/bin/"
                          ".;")  
           (getenv "PATH"))
   (setq exec-path (cons cygwin-bin exec-path)))

(require 'cygwin-mount)
(cygwin-mount-activate)

(setq shell-file-name "bash")
(setq explicit-shell-file-name "bash")

(defun jonnay-cygwin-shell ()
  "Wrapper around cygwin-shell so that it doesn't throw an error"
  (interactive)
  (condition-case e
   (cygwin-shell)
   (message "There was an error trying to launch the shell: %s" e)))

(message "Setting up Cygwin...Done")


;; found from the manual, check, use and make go?
 (defun my-shell-setup ()
   "For Cygwin bash under Emacs 20"
   (setq comint-scroll-show-maximum-output 'this)
   (setq comint-completion-addsuffix t)
   (setq comint-eol-on-send t)
   (setq w32-quote-process-args ?\")
   (make-variable-buffer-local 'comint-completion-addsuffix))

(setq shell-mode-hook 'my-shell-setup)
(add-hook 'emacs-startup-hook 'jonnay-cygwin-shell)
)
4
ответ дан 26 November 2019 в 23:57
поделиться

Я склонен использовать нативную версию emacs на windows в сочетании с (также нативными) портами gnu utils, которые намного быстрее, хотя и менее полны, чем Cygwin.

Тогда я просто использую окно cygwin для оболочки bash и тех вещей, которых не хватает.

7
ответ дан 26 November 2019 в 23:57
поделиться

Третий вариант. Я использую NTemacs + Emacsw32 + Cygwin. Таким образом, у меня есть нативное приложение Windows с Unix Утилиты и Bash Shell. Работа Makefiles, я никогда не использовал M-X WHOIS , хотя. Я не могу думать о каких-либо непосредственных недостатках этой настройки.

Вот интересные биты моей установки, в основном очень похоже на http://www.emacswiki.org/emacs/ntemacswithcygwin :

(setq cygwin-root "c:/cygwin/")
(setq private-bin (concat home-dir "/usr/bin"))
(setq exec-path (cons private-bin exec-path))
(setenv "PATH" (concat private-bin ";" (getenv "PATH")))
; Add Cygwin Emacs stuff
(add-to-load-path "/usr/share/emacs/site-lisp")
; Add Cygwin Info pages
(add-to-list 'Info-default-directory-list
             (concat cygwin-root "usr/share/info/"))

(setq shell-file-name "bash")
(setenv "SHELL" shell-file-name)
(setq explicit-shell-file-name shell-file-name)

(setq w32shell-cygwin-bin "c:\\cygwin\\bin")
(require 'w32shell)
(w32shell-add-emacs)
(w32shell-set-shell "cygwin")
1
ответ дан 26 November 2019 в 23:57
поделиться

Четвертый вариант - запустить эмаки в одном из альтернативных терминалов Cygwin: (u)rxvt, mintty, xterm. Все они предлагают намного лучшую эмуляцию терминала, чем консоль, что означает значительно улучшенный опыт работы с эмаками.

8
ответ дан 26 November 2019 в 23:57
поделиться

Как и @justinhj, я использую собственную версию emacs в Windows вместе с (также родными) портами gnu utils (например, binutils для «строк» ​​и т. Д.) .

И я всегда использую cygwin в качестве оболочки внутри Emacs или независимо от Emacs. Таким образом, я сохраняю внешний вид моей рабочей среды, когда я переключаюсь с Windows на Linux / AIX / Solaris и обратно.

К сожалению, когда я обновил свой Emacs с 21.2 до 23.2, Emacs потерял способность распознавать '/ cygwin / c' по умолчанию. Я должен исследовать это сейчас, чтобы понять, почему это больше не работает, и что я могу сделать, чтобы это исправить. Я только что нашел следующую информацию и проверю, насколько она полезна. Кажется странным, что теперь мне нужен внешний пакет для чего-то, что раньше всегда было там по умолчанию:

Я предпочитаю, однако, чтобы свести к минимуму использование дополнительных пакетов. Итак, я только что проверил, как ведет себя мой «новый» Emacs + Cygwin, и мне кажется, что я могу получить доступ к диску C:, просто набрав '/'.

Это круто - только один символ (косая черта) вместо / cygdrive / c. Однако оболочка в Emacs предлагает ввести '/ cygdrive / c', что несколько сбивает с толку.

1
ответ дан 26 November 2019 в 23:57
поделиться
Другие вопросы по тегам:

Похожие вопросы: