Jak mogę uzyskać emacsa 24. * pod Windows, aby automatycznie uzupełniać ścieżki w buforach powłoki za pomocą „\” zamiast „/”?

4

Zobacz Jak mogę uzyskać emacsa pod Windows do autouzupełniania ścieżek w buforach powłoki za pomocą „\” zamiast „/”?

Używam emacsa na Windows 7, kiedy wywołuję powłokę Mx, emacs otwiera powłokę DOS-a. Monit wyświetla bieżący katalog za pomocą ukośników odwrotnych „\”.

Wenn Wpisuję ścieżkę, mówię „C: \ Te” i naciskam [TAB], aby zakończyć, emacs kończy ścieżkę do „C: / Temp /”. Jest to odpowiednie do łączenia się z emacsem, ale nie do wywoływania poleceń DOS lub wykonywania plików binarnych lub plików wsadowych w DOS.

Przykład: polecenie C: /Temp/a.bat kończy się niepowodzeniem. C: \ Temp \ a.bat działa poprawnie.

Sytuacja w emacs 24. * wydaje się być jeszcze gorsza. Myślałem, że będę doświadczonym użytkownikiem emacsa, ale nie mogłem znaleźć sposobu na zastosowanie powyższej łaty do emacsa 24. *. Wygląda na to, że tryb komend bardzo się zmienił.

Chris
źródło
1. Być może podaj przykład oczekiwanego zachowania w porównaniu z tym, co widzisz. 2. Dlaczego chcesz używać \ jako separatora katalogów w tym kontekście? Czy to na przykład dlatego, że szarpnąłeś „ścieżkę” w stylu Windows, która ma takie separatory? Jeśli nie, dlaczego po prostu nie użyć /jako separatora, jak w pozostałych Emacsach?
Drew
@Drew Powłoka poleceń systemu Windows używa ukośnika do przodu, aby wprowadzić opcje, więc ścieżki zawierające go nie są poprawnie interpretowane.
Aaron Miller
@AaronMiller - Och, racja; głupi ja.
Drew

Odpowiedzi:

1

Spróbuj tego hacka. Wydaje się, że działa w emacs 24.5:

(defun win-file-name-completion-advice (res)
  (if (stringp res) (replace-regexp-in-string "/" "\\\\" res) res))
(advice-add 'comint-completion-file-name-table
            :filter-return #'win-file-name-completion-advice)

(defun win-command-completion-advice ()
  (let ((filename (comint-match-partial-filename)))
    (and filename (not (string-match "\\\\" filename)))))
(advice-add 'shell-command-completion
            :before-while #'win-command-completion-advice)
Andreas Persson
źródło
-1

Temat 258683 opisuje odpowiednie rozwiązanie:

  • w pliku ~\.emacs
  • dodaj linię (setq comint-completion-addsuffix (quote ("\\" . " ")))
Chris
źródło
Właściwie nie. Wyraźnie mówi, że działa dobrze tylko dla emacsa 22. To pytanie dotyczyło emacsa 24.
sandos