Zdefiniowałem niektóre funkcje do uruchamiania procesu asynchronicznego w tle przy użyciu async-shell-command
.emacs, ale za każdym razem, gdy uruchamiam polecenia, tworzone jest nowe okno (nie ramka) i tam wyświetlany jest bufor procesu. Jak mogę uruchomić polecenie bez bufora „pop-up”?
23
start-process
polecenia sudo? Próbowałem owijając moje wezwanie, abystart-process
w(let ((default-directory "/sudo::")) ... )
ale to nie dla mnie."program"
w tym przypadku jest to tylko nazwa programu (np. nautilus, caja, firefox) i"arg1 arg2 ..."
powinna znajdować się w czwartym argumencie pozycyjnymstart-process
. Dowiedziałem się tego, czytając dokumentację :)Jak wspomniał Tikhon,
(start-process)
jest to najlepsza droga. Jeśli nie chcesz tworzyć bufora, ale nadal chcesz reagować na status procesu w tle, możesz również zastosować(set-process-sentinel)
. Oto zmodyfikowany przykład, który biorę z mojejprojector
paczki:Z opisu funkcji Emacsa:
GNU stron podręcznika na Procesów jest dość dobry, aby uzyskać więcej informacji.
źródło
set-process-sentinel
robi nieco dokładniej? Mam ogólną ideę posiadania funkcji, która zarządza procesem, ale nie do końca rozumiem wszystkie szczegóły. Dzięki!M-x describe-function
i wejdzieszset-process-sentinel
, otrzymasz krótką odpowiedź z dokumentacji Emacsa: (set-process-sentinel PROCESS SENTINEL) Podaj PROCESS wartownika SENTINEL; zero dla wartości domyślnej. Wartownik jest wywoływany jako funkcja, gdy proces zmienia stan. Otrzymuje dwa argumenty: proces i ciąg opisujący zmianę.C-h f
Nie trzeba zmieniać sposobu uruchamiania polecenia asynchronicznego. Emacs ma ogólną zdolność pozwalającą ci kontrolować, gdzie lub czy pojawi się jakiś bufor, modyfikując pojedynczą strukturę danych
display-buffer-alist
.W poniższym rozwiązaniu możesz zobaczyć, że funkcja akcji
display-buffer-no-window
(tj. Brak wyskakującego okienka) jest skonfigurowana do powiązania z dowolnym buforem o nazwie rozpoczynającej się od nazwy*Asynchronous Shell Command*
(emacs dodaje przyrostowy przyrostek, gdy zostanie poproszony o utworzenie więcej niż jednego).Aby zobaczyć listę innych dostępnych opcji wyświetlania, wpisz
C-h f display-buffer
i poszukaj listy „funkcji akcji”.źródło