Wie konfiguriere ich Strg-Umschalttaste-Links / Rechts, um Text in Emacs auszuwählen?

1530
Pushpendre

Das grundlegende Problem, das ich habe, ist, dass der Markierungsmodus wie ein Umschaltknopf funktioniert. Jedes Mal set-mark-command, "C-Space"wenn Sie anrufen, wechseln Sie in den Markierungsmodus. Ich könnte jede Tastenkombination dazu binden

(defun foo () "" (progn (set-mark-command) (left-word))) 

Aber beim nächsten Aufruf foomeiner Auswahl würde ich die Auswahl aufheben.

Gibt es eine Funktion, die nur in den Auswahlmodus wechselt, anstatt sie umzuschalten? Dann könnte ich Text frei auswählen, den ich wirklich brauche, da ich einen großen Textkorpus kommentiere.

1
Das ist ziemlich verwirrend. `set-mark-command` geht nicht in einen Markierungsmodus (da es keinen Markierungsmodus gibt), sondern setzt die Markierung an der Cursorposition. Wenn Sie es aufrufen und den Cursor bewegen, vorausgesetzt, Sie haben den Transientenmarkierungsmodus aktiviert, wird Ihre temporäre Auswahl hervorgehoben. Wenn Sie es erneut aufrufen, befindet sich die Marke an der neuen Position des Cursors. Wenn Sie den Cursor erneut bewegen, wird die neue Auswahl (beginnend an der neuen Markenposition) hervorgehoben. Was versuchst du eigentlich zu tun? Da Sie Ihren Befehl an die Maus binden möchten, können Sie die Maus nicht einfach zur Auswahl verwenden? m4573r vor 11 Jahren 0
danke m4. Was ich tun möchte, ist eine Funktion zu erstellen, die nur ** die Marke setzen würde, wenn sie nicht bereits gesetzt ist **, so dass selbst wenn ich sie erneut anrufe, die Marke nicht zurückgesetzt wird. Wenn ich jetzt 'Strg-Leertaste' drücke, erhalte ich die Nachricht 'mark-enabled'. Wenn ich erneut 'Strg-Leertaste' drücke, erhalte ich die Nachricht 'mark-disabled'. Und Ctrl-Space ist an den Set-Mark-Befehl gebunden Pushpendre vor 11 Jahren 0
Außerdem möchte ich meinen Befehl nicht an die Maus binden. Ich meinte die linke / rechte Pfeiltaste. Entschuldigung für die Verwirrung. Pushpendre vor 11 Jahren 0

1 Antwort auf die Frage

2
Francesco

Ich bin nicht sicher, ob ich Ihre Frage richtig verstehe, aber dazu ein paar Gedanken:

1) Wenn die shift-select-modeVariable auf festgelegt ist, twird der Bereich durch alle Kombinationen von Shiftund einem Bewegungspunkt des Befehls temporär aktiviert und erweitert:

  • S-C-<right>: erweitern Sie die Region um ein Wort auf der rechten Seite
  • S-<right>: erweitern Sie die Region um ein Zeichen auf der rechten Seite

Sie können shift-select-modeentweder die customizeInfrastruktur einstellen :

M-xcustomize-variableRETshift-select-modeRET

oder in deiner init-Datei:

(setq shift-select-mode t) 

2) Ausgehend von Ihrem Beispielcode können Sie einen Befehl schreiben, der die Region aktiviert und auf folgende Weise erweitert:

(defun foo () "" (interactive) ;; this is a command (i.e. can be interactively used)  (when (not (region-active-p)) ;; if the region is not active... (push-mark (point) t t)) ;; ... set the mark and activate it  (backward-word)) ;; move point  ;; Bind the command to a key (global-set-key (kbd "C-S-<left>") 'foo) 
Oh ja!! Region-aktiv-p ist das Geheimnis. Danke dir. Und der Shift-Select-Modus funktioniert auch einwandfrei. Vielen Dank Pushpendre vor 11 Jahren 0