Emacs: Kombiniere jeweils einen Vorwärts- und einen neuen Rezerter-Top-Bottom

8

Vielen Dank im Voraus für die Hilfe.

In Emacs verwende ich gerne iseach-forward (C-s), aber ich würde es immer mehr mögen, wenn die hervorgehobenen Wortworte in der Mitte des Bildschirms zentriert wären anstatt ganz unten.

Ich finde mich ständig dabei:

C-s foo C-s C-s C-s ... Oh! Das ist das "Foo", nach dem ich gesucht habe! C-l

Gibt es eine Möglichkeit, die Suchergebnisse in der Mitte des Bildschirms zu zentrieren?

Prost

    
RafaelGP 15.06.2012, 14:29
quelle

3 Antworten

5

Am besten wäre es, den folgenden Hook hinzuzufügen:

%Vor%

Dies führt den Befehl recenter-top-bottom nach Abschluss jeder erfolgreichen inkrementellen Suche aus.

Edit: Ich habe ein wenig untersucht, und die Funktionen, die bei wiederholten Suchen nach der gleichen Zeichenfolge (dh mit sukzessiver Eingabe von C-s oder C-r während einer aktiven Suche) ausgeführt werden, scheinen isearch-repeat-forward zu sein. und / oder isearch-repeat-backward . Wenn Sie also bei jeder Wiederholung neu zentrieren möchten, müssen Sie diese Funktionen zusätzlich zur Definition des obigen Hooks angeben:

%Vor%

Persönlich finde ich das resultierende Verhalten extrem nervig und desorientierend, aber de gustibus non est disputandum . Vielleicht wäre die Reservierung von recenter-top-bottom für die Verwendung in der ursprünglichen isearch-mode-end-hook und die Verwendung von recenter allein im Ratschlag für die Funktionen repeat weniger anstößig.

Das Beraten von isearch-forward an sich ist gleichbedeutend mit dem Hinzufügen des Hooks, den ich ursprünglich vorgeschlagen habe, und hat scheinbar keinen Effekt auf wiederholte Suchen. Hinzufügen des Hooks ist einfacher und ich denke mehr idiomatisch, also sollte es wahrscheinlich vor der Empfehlung der Funktion bevorzugt werden.

    
Greg E. 15.06.2012 15:08
quelle
3

Danke Nicolas und Greg.

Ihre Vorschläge wiesen mich auf die richtige Richtung hin. Dies ist der Code, um das zu erreichen, wonach ich gefragt habe:

%Vor%

Erläuterung:

Ich wollte die Dinge nicht komplizierter machen, indem ich hinzufüge, dass ich das Böse benutze (vim mode in Emacs), also habe ich das in meiner Frage weggelassen.

Ich benutze defadvice, um vorwärts zu suchen, um zum nächsten gesuchten Gegenstand zu gehen und zum vorherigen gesuchten Gegenstand zu gehen.

Etwas Erwähnenswertes ist, dass ich die Funktion (recenter-top-bottom) nicht verwendet habe. Das Verhalten war verrückt, als es den ersten gesuchten Gegenstand in der Mitte des Bildschirms zentrierte, den zweiten nach oben und den dritten nach unten zentrierte. Ich habe gerade die Funktion 'recenter' benutzt, um sie immer in der Mitte des Bildschirms zu zentrieren.

Für nicht böse Benutzer würde der Code so aussehen: (Nicht getestet!)

%Vor%

Prost!

    
RafaelGP 20.06.2012 16:24
quelle
1

Sie könnten defadvice verwenden, um recenter-top-bottom nach isearch-forward auszuführen.

    
Nicolas Dudebout 15.06.2012 15:07
quelle

Tags und Links