Im emacs, chcę uruchomić "dotknąć" pliku wskazanego przez bieżący bufor (w szczególności chcesz zmienić czas modyfikacji). Używam guard do uruchamiania niektórych testów po zmianie plików, ale czasami chcę wywołać je ręcznie. Nie dbam o to, aby uruchamiać rzeczywiste działanie powłoki, dopóki ustawiony jest mtime."Dotknij" bieżącego pliku w emacs
Odpowiedz
Oczywiście zakłada się, że na swojej ścieżce masz polecenie o nazwie touch
.
(defun touch()
"updates mtime on the file for the current buffer"
(interactive)
(shell-command (concat "touch " (shell-quote-argument (buffer-file-name))))
(clear-visited-file-modtime))
W trybie diodowym istnieje domyślne polecenie dotykowe o numerze T
. To polecenie nie jest jednak tak łatwe w użyciu, ponieważ monituje użytkownika o znacznik czasu. Przypuszczam, że jest to bardzo ogólne, ale nie jest to bardzo wygodny sposób robienia tego, co zazwyczaj jest zamierzone przez "dotyk".
piękne, nie byłem pewien, jak uzyskać nazwę pliku do polecenia. – spike
Co się stanie, jeśli nazwa bufora zawiera spacje? Lub kończy się na "; rm -rf /"? Sugerowałbym użycie '(shell-quote-argument (nazwa-pliku-bufora))' – Nemo
Jeśli zawiera spacje, to zrobią to cytaty - dodam to. Jeśli nazywasz swoje pliki za pomocą "; rm -rf /", to zasługujesz na to, co dostałeś! :) Przypomina mi to: http://xkcd.com/327/ –
Robię to w ten sposób: wstaw spację, koniec, a następnie ponownie usuwam spację i zapisuję. To zmienia mtime.
Tak, ja też to robię, ale musi istnieć sposób emacs – spike
tak, to jest dokładnie to, co robię, ale napisałem funkcję seplenienia, która pomoże ci (zobacz moją odpowiedź na to pytanie). –
Oto emacs czysty sposób to zrobić:
(defun touch-file()
"Force modification of current file, unless already modified."
(interactive)
(if (and (verify-visited-file-modtime (current-buffer))
(not (buffer-modified-p)))
(progn
(set-buffer-modified-p t)
(save-buffer 0))))
Podoba mi się" czyste "rozwiązanie elisp, które nie wymaga wywoływania do powłoki, ale robi to po prostu zmienia znacznik czasu lub zapisuje cały bufor do pliku? Nawet polecenie dotykowe trybu diody wywołuje w powłoce polecenie wywołania dotyku. Naprawdę potrzebujemy funkcji elisp, która wywołuje utime() w C z procesu Emacsa. –
@GregMattes - w zasadzie robi odpowiednik "modyfikacji" bufora, a następnie zapisania go (bez faktycznej zmiany zawartości bufora). – jtahlborn
Tak, dokładnie. To może spowodować wiele operacji wejścia/wyjścia, jeśli wiele plików jest dotykanych, ponieważ cała zawartość jest zapisywana. Na przykład pytający pytający jest zainteresowany dotykaniem plików, aby wymusić testowanie. Mogę sobie wyobrazić, że mógłby napisać jakiś eliksir, aby automatycznie dotknąć zestawu plików, być może dużego zbioru plików. Zatem zapisanie całego pliku zamiast zwykłego mutowania mtime w i-węźle może być bardzo znaczące. Nie mówię, że twoje podejście jest złe. Właściwie to jest naprawdę fajnie mieć wszystko w niezależnym od platformy elispie bez wywoływania zewnętrznego polecenia powłoki. –
może więcej klawiszy niż niestandardowej funkcji, ale można to zrobić z pola z C-u M-~
następnie C-x C-s
.
M-~
jest związana domyślnie not-modified
, który podaje modyfikacji flagę bufora, chyba że nazywasz go z argumentem (C-u
prefiksem), w którym to przypadku nie odwrotnie. Następnie po prostu zapisz bufor.
- 1. Zaktualizuj czas modyfikacji pliku (dotknij)
- 2. Usuwanie bieżącego (nieatomowego) s-wyrażenia w Emacs
- 3. Jak wyświetlić kodowanie pliku w emacs?
- 4. Jak uzyskać dostęp do zawartości bieżącego regionu w Emacs Lisp?
- 5. Znajdź nazwę bieżącego pliku konfiguracyjnego
- 6. wyłącza przeglądarkę mobilną kliknij/dotknij/dotknij pole opinii
- 7. Lista plików w katalogu bieżącego pliku JAR
- 8. Pobranie bieżącego elementu w pliku scipy.ndimage.filters.generic_filter
- 9. Dotknij opcji UIImageView?
- 10. Nie można zaimportować pliku do pliku .emacs
- 11. Jak załadować zawartość innego pliku do bieżącego pliku w Vim?
- 12. Sposób kopiowania/dodawania pliku do bieżącego pliku WORKDIR w Dockerfile
- 13. Jak zmienić nazwę otwartego pliku w Emacs?
- 14. Ścieżka do pliku do schowka w Emacs
- 15. Dotknij i przytrzymaj (długie naciśnięcie)
- 16. Wykrywanie Dotknij i przytrzymaj w komórkach UITableView
- 17. Dotknij/Wybierz węzeł w SceneKit (Swift)
- 18. "Dotknij" updated_at kolumna w Rails 2.3.2
- 19. utworzyć ścieżkę pliku "zawsze względem bieżącego modułu"?
- 20. Uzyskaj folder macierzysty bieżącego pliku PHP
- 21. Emacs: sprawdź system bez okien w .emacs
- 22. Scala REPL w Emacs
- 23. Jak odnosić się do pliku aktualnie ładowanego do Emacs Lisp?
- 24. Emacs: wiele widoków tego samego pliku
- 25. Rozszerzenie pliku rozszerzenia Emacs - skojarzenie trybu
- 26. Jak uzyskać pełną ścieżkę do katalogu bieżącego pliku w Pythonie?
- 27. Automatyczne wyświetlanie bieżącego pliku w szufladzie projektu TextMate
- 28. Uzyskaj nazwę hosta bieżącego żądania w pliku node.js Express
- 29. Jak przejść do katalogu bieżącego użytkownika w pliku wsadowym
- 30. Porównywanie zmian w zatwierdzeniach do bieżącego pliku przez Git
To nie jest duplikat tego pytania. Nie chcę, aby plik został zapisany, chcę tylko zaktualizować plik mtime (stąd potrzeba dotyku, a nie czystego rozwiązania @jtahlborn) – spike
Chciałbym, żeby ludzie nie zamykali pytań bez uważnego ich czytania . To właściwie dobre pytanie. – Nemo