Pourquoi je ne peux pas lier Shift- <backspace>?


8

Mon système est Debian Wheezy, j'ai essayé de faire ce qui suit

(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)

Ce que je veux, c'est en mode d'insertion maléfique, je peux supprimer une largeur de tabulation en avant au lieu d'appuyer 4 fois en arrière. Le raccourci clavier fonctionne sur mon ordinateur portable, mais ne fonctionne pas sur mon bureau. Je vérifie la liaison pour evil-shift-left-line, elle a changé mais ne fonctionne pas, et l'aide sur "shift-backspace" n'affiche que "backspace". Cependant, shift do a un effet sur "backspace", "shift-backspace" supprime le mot précédent au lieu du caractère.

Quand j'insère "shift-backspace" après "Cq", il a la même notation "^?" comme "retour arrière" sur mon bureau, tandis que sur mon ordinateur portable, le premier est "^ @".

Des idées sur pourquoi cela ne fonctionne pas sur mon bureau? Merci de votre aide!

Cette question peut être liée à celle-ci: Shift + Up n'est pas reconnu par Emacs dans un terminal


2
Utilisez-vous Emacs sur un terminal?
Malabarba

Non, j'utilise les emacs autonomes.
godblessfq

Réponses:


6

Fait intéressant, vous pouvez essayer de lier la deletechar pseudo-clé .

Lorsque je vérifie la liaison de backspacesur ma machine avec C-h k [backspace], j'obtiens:

DEL(traduit de <backspace>) exécute la commande ... (bla bla bla)

Lorsque je vérifie la liaison de shift+ backspacesur ma machine avec C-h k S-[backspace], j'obtiens:

<deletechar>(traduit de <delete>) exécute la commande ... (bla bla bla)

Ce qui suit fonctionne donc sur ma machine:

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

Sur mon ordinateur, lorsque je vérifie la liaison de la touche Maj + <backspace> est <backspace>.
godblessfq

2

J'ai ceci dans ma configuration:

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

pour faire shift + backspace / shift + delete tuer tous les espaces.


Et juste au cas où quelqu'un aurait besoin de ces fonctions, les voici:

(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

Je suis maintenant satisfait de ce paramètre.

(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)))
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.