2013-04-09 11 views
15

Ist es möglich, Emacs haben den Cursor aus dem Bildschirm verschoben werden, wie die meisten GUI-Texteditoren arbeiten? Dies ist eine der größten Dinge, die mich stört, wenn ich Emacs über einen GUI-Editor verwende. Wenn ich nach unten scrolle, wird der Cursor am oberen Rand des Puffers "vorwärts geschoben".Lassen Emacs den Cursor aus dem Bildschirm bewegen

ich vorher gedacht hatte, dass dies völlig unmöglich war, weil diese in die Architektur von Emacs festverdrahtet ist, aber dann multiple-cursors ich sah, das ist genau dies für die sekundäre Cursor tut (vorausgesetzt, Sie die Scroll-Funktionen wirken auf verhindern die sekundären Cursor). Ist es vielleicht möglich, mehrere Cursor zu verwenden, um den Hauptcursor in einem versteckten Puffer zu haben, und der effektive Cursor, mit dem ich tatsächlich bearbeite? Oder vielleicht einen anderen schlauen Trick? Oder hat mein Googeln mich enttäuscht und das ist wirklich schon ohne Magie möglich?

+0

Wahrscheinlich nicht. Dies ist die nächste, die ich empfehlen kann: http://superuser.com/questions/184340/emacs-how-to-return-to-last-position-after-scroll-page-up-down – Dmitry

+0

Beachten Sie, dass Sie immer gehen können Zurück zu ** irgendeiner ** vorherigen Cursorposition mit 'Cu C-Raum' (dh blättern Sie dorthin, wo Sie scrollen müssen, und kehren Sie dorthin zurück, wo Sie ursprünglich mit diesem Befehl waren) –

Antwort

2

Genau genommen können Sie den Cursor nicht vom Bildschirm weg bewegen, weil der zugrundeliegende C-Code es nicht erlaubt.

Dies gesagt, ich vermute, dass Ihr Problem behoben werden kann. Grundsätzlich gibt es 2 Aspekte:

  • Sie mögen nicht die Art, wie die Dinge aussehen, wenn "der Cursor vorwärts geschoben wird". Sie könnten das umgehen, indem Sie (vorübergehend) den Cursor unsichtbar machen.
  • Sie möchten zurück in die Position vor dem Scrollen springen, sobald Sie einen nicht scrollenden Befehl ausführen. Es gibt wahrscheinlich ein Paket, das es für Sie tut, aber Sie können es selbst mit einigen pre-command-hook Hacking tun.

BTW, würde ich Patches in Emacs begrüßen, die einige dieser Funktionalität bieten. Ich hasse das "automatische Rücksprung" -Verhalten anderer Editoren, aber es wäre gut, die "Vor-Scroll" -Position aufzunehmen und dann eine Möglichkeit anzubieten, zu dieser zurückzuspringen.

+0

Ja, ich denke, eine Kombination dieser beiden Aufzählungspunkte würde gib mir genau was ich will. – asmeurer

+0

Gibt es eine Möglichkeit, sich in die Funktionen einzuklinken, die den Cursor beim Scrollen bewegen? Gibt es speziell einen Haken, der mich * vor * die Position von 'Punkt' durch einen Bildlaufbefehl ändern konnte? In welchen C-Dateien aus der Emacs-Quelle finde ich auch den Code, der dieses Verhalten definiert? – nispio

+0

@nispio: Ich glaube nicht, dass es so einen Haken gibt. IIRC zu der Zeit, wenn Emacs entscheidet, dass dieser Punkt verschoben werden muss, um auf dem Bildschirm zu bleiben, können wir Elisp-Code nicht leicht ausführen, aber wir könnten wahrscheinlich die Position eines Punktes irgendwo verstecken. Könnten Sie 'M-x report-emacs-bug' eine solche Funktion anfordern? – Stefan

2

Nach dem Kontext und der Beschreibung Ihres Problems zu urteilen, möchten Sie den Puffer durchsuchen und dabei Ihren Bearbeitungsort beibehalten. Dazu gibt es mindestens zwei Tricks: Marken/Register und Aufteilung in zwei Fenster.

https://stackoverflow.com/a/3777598/308668 beschreibt die Emacs-Register, die wie Vims Zeichen wirken. Sie können Ihren Platz in der Datei mit der Kodierung C-x r SPC a einchecken (a ist ein Brief Ihrer Wahl) und Sie können immer wieder mit C-x r j a kommen.

Eine Art Automatisierung wird durch ein externes Skript (goto-last-change.el) erreicht, das hier beschrieben wird: https://superuser.com/a/184402/49046.

Alternativ teilen Sie das Fenster in zwei Teile mit C-x 2. Die neu geteilten Fenster zeigen beide denselben Standort und Sie können den anderen zum Erkunden verwenden. C-x 0 schließt ein Fenster, wenn Sie fertig sind.

+0

'goto-last-change' scheint eine vernünftige Lösung zu sein. – asmeurer

6

Es ist ein neues Paket unter GNU ELPA mit der Bezeichnung scroll-restore verfügbar, das versucht, dieses Problem zu beheben. Bis jetzt habe ich ein paar Bugs gefunden, aber das Paket scheint größtenteils zu funktionieren.

Sie können es testen, indem sie sie mit

M-x package-install RET scroll-restore RET 

Installation Nachdem das Paket installiert ist, können Sie die Moll mit

M-x scroll-restore-mode 

persönlich aktivieren, ich bin Bindung an die Scroll Sperren Sie Schlüssel, weil es so unglaublich apropos scheint! Das ist, was ich meine init Datei bin und fügte hinzu:

(require 'scroll-restore) 
(scroll-restore-mode 1) 
;; Allow scroll-restore to modify the cursor face 
(setq scroll-restore-handle-cursor t) 
;; Make the cursor invisible while POINT is off-screen 
(setq scroll-restore-cursor-type nil) 
;; Jump back to the original cursor position after scrolling 
(setq scroll-restore-jump-back t) 
;; Toggle scroll-restore-mode with the Scroll Lock key 
(global-set-key (kbd "<Scroll_Lock>") 'scroll-restore-mode) 

Dies ist eine direkte Kopie einer Antwort ist hier gepostet: https://emacs.stackexchange.com/a/2273/93

+0

Benötigt dies 24,4? Es wurde nicht in der Liste angezeigt, als ich 24.3 verwendete. – asmeurer

+0

Ich betreibe es am 24.3. Das Paket wurde am 16.10.2014 zum ersten Mal veröffentlicht. Sie müssen also sicherstellen, dass Ihre Paketliste aktualisiert wird. Ich weiß nicht, wie ELPA funktioniert, aber wenn es überhaupt Spiegel verwendet, ist es möglich, dass das Paket nicht den gesamten Spiegel erreicht hat. Sie können auch [scroll-restore.el'] (http://elpa.gnu.org/packages/scroll-restore-1.0.el) von der GNU ELPA-Website herunterladen und zu Ihrer Site-Lisp hinzufügen. – nispio

+0

mein Cursor wird nicht wieder sichtbar. Irgendwelche Vorschläge? –

Verwandte Themen