Perché non riesco a associare Shift- <backspace>?


8

Il mio sistema è debian wheezy, ho provato a fare quanto segue

(global-set-key (kbd "S-<backspace>") 'evil-shift-left-line)
(global-set-key (kbd "<S-backspace>") 'evil-shift-left-line)
(define-key global-map [S-backspace] 'evil-shift-left-line)

Quello che voglio è nella modalità di inserimento malefica, posso eliminare una larghezza della scheda in avanti invece di premere backspace 4 volte. Il keybinding funziona sul mio laptop, ma non funziona sul mio desktop. Controllo l'associazione per evil-shift-left-line, è cambiata ma non funziona, e l'aiuto su "shift-backspace" mostra solo "backspace". Tuttavia, shift do ha effetto su "backspace", "shift-backspace" elimina la parola precedente anziché il carattere.

Quando inserisco "shift-backspace" dopo "Cq", ha la stessa notazione "^?" come "backspace" sul mio desktop, mentre sul mio laptop il primo è "^ @".

Qualche idea sul perché non funziona sul mio desktop? Grazie per l'aiuto!

Questa domanda può essere correlata a questa: Shift + Up non è riconosciuto da Emacs in un terminale


2
Stai usando Emacs su un terminale?
Malabarba,

No, sto usando gli emacs stand alone.
godblessfq,

Risposte:


6

È interessante notare che puoi provare a legare lo deletechar pseudo tasto .

Quando controllo l'associazione di backspacesulla mia macchina con C-h k [backspace], ottengo:

DEL(tradotto da <backspace>) esegue il comando ... (blah blah blah)

Quando controllo l'associazione di shift+ backspacesulla mia macchina con C-h k S-[backspace], ottengo:

<deletechar>(tradotto da <delete>) esegue il comando ... (blah blah blah)

Di conseguenza, funziona sulla mia macchina:

(global-set-key [deletechar] #'evil-shift-left-line)

Sul mio computer, quando controllo l'associazione del tasto MAIUSC + <space> è <backspace>.
godblessfq,

2

Ho questo nel mio setup:

(define-key global-map [(shift backspace)] 'backward-delete-whitespace)
(define-key global-map [(shift delete)] 'forward-delete-whitespace)

per fare shift + backspace / shift + cancella tutto lo spazio bianco.


E nel caso in cui qualcuno avesse bisogno di queste funzioni, eccole qui:

(defun backward-delete-whitespace ()
  (interactive)
  (let ((p (point)))
    (re-search-backward "[^ \t\n]+" nil t)
    (forward-char)
    (delete-region p (point))))

(defun forward-delete-whitespace ()
  (interactive)
  (re-search-forward "[ \t\n]+" nil t)
  (replace-match "" nil nil))

1

Ora sono contento di questa impostazione.

(defun my/backspace()
  (interactive)
  (if (string-match "[^[:space:]]+"
                    (buffer-substring-no-properties
     (line-beginning-position) (point))) ;; return nil no match
      (backward-kill-word 1)(evil-shift-left-line)))
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.