Ilekroć dzwonię fill-paragraph
, bufor jest zawsze oznaczany jako zmodyfikowany, nawet jeśli polecenie nie miało żadnego efektu (tj. Jeśli akapit był już wypełniony). Tworzy również pustą, niemożliwą do cofnięcia akcję (łatwą do wykrycia za pomocą undo-tree-mode
). Inne polecenia, które mogą potencjalnie wprowadzać zmiany, takie jak polecenia wcięcia, nie oznaczają bufora jako zmodyfikowanego ani nie powodują cofnięcia działania, jeśli nic nie zostało zmienione. Czy jest jakiś sposób na fill-paragraph
zmodyfikowanie bufora i utworzenie niemożliwej do cofnięcia akcji, tylko jeśli coś zmieniło?
fill-paragraph
Lily Chung
źródło
źródło
M-q
nie oznacza domyślnej zmiany bufora, przynajmniej z moich testów. Z jakiego trybu korzystasz? Domyślam się, że ten tryb jestfill-paragraph
w jakiś sposób nadpisywany .Odpowiedzi:
Zauważ, że zostało to naprawione dla nowszych Emacsen (v.26 w górę).
źródło
Problem polega na tym, że
fill-paragraph
(a raczejfill-region-as-paragraph
) usunie i ponownie wstawi nowe wiersze, rozkładając akapit. Nie zmodyfikuje bufora, jeśli jest tylko jedna linia. No-op na liście cofnięć, której jesteś świadkiem, to po prostufill-paragraph
usuwanie i ponowne wstawianie nowych linii.Unikanie tego nie jest trywialne. Poniżej znajduje się dość zły hack i bardzo nieefektywny dla dużych buforów, ale może to działa dla ciebie. Polecenie mimics
fill-paragraph
(M-q
) o identycznym zachowaniu, z wyjątkiem tego, że przechowuje zawartość bufora przed jego wywołaniem, a następnie, jeśli zawartość pozostała taka sama, przywróci stan modyfikacji i cofnie listę sprzed zmiany. Aby to zrobić, potrzebuje kopii (właściwie dwóch) zawartości bufora, więc tak naprawdę jest to dość nieefektywne. :-)Możesz to powiązać
M-q
.źródło
fill-paragraph
robi pewne rozróżnienie między różnymi przypadkami, tj. zachowuje się różnie w zależności od aktywnego regionu, istniejących funkcji wypełniania akapitów itp. Trzeba by było powtórzyć to zachowanie, aby dowiedzieć się, które części bufora mają zostać zmienione. Możliwe, ale trudne. :-)Późna odpowiedź, ale oto prosta wersja, która nie modyfikuje bufora, jeśli tekst się nie zmienia.
Dostosowuje niektóre pomysły zawarte w odpowiedzi @ JorgenSchäfer, ale działa tylko z bieżącym akapitem i tylko w prosty, oddzielony spacjami sposób (patrz komentarze do odpowiedzi @ JorgenSchäfer na temat komplikacji pod maską).
Chodzi o jedyny przypadek użycia, który jest odpowiedni dla moich własnych celów (tj. Interaktywne użycie z „normalną” prozą, brak aktywnego regionu), więc zamieszczam go na wypadek, gdyby ktoś chciał go użyć lub poprawić w bardziej skomplikowanych przypadkach użycia .
źródło