¿Por qué no puedo vincular Shift- <retroceso>?

8

Mi sistema es debian wheezy, intenté hacer lo siguiente

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

Lo que quiero es en el modo de inserción malvado, puedo eliminar el ancho de una pestaña hacia adelante en lugar de presionar la tecla de retroceso 4 veces. La combinación de teclas funciona en mi computadora portátil, pero no funciona en mi escritorio. Compruebo el enlace para evil-shift-left-line, ha cambiado pero no funciona, y la ayuda en "shift-backspace" solo muestra "backspace". Sin embargo, shift do tiene efecto en "backspace", "shift-backspace" elimina la palabra anterior en lugar del carácter.

Cuando inserto "shift-backspace" después de "Cq", tiene la misma notación "^?" como "retroceso" en mi escritorio, mientras que en mi computadora portátil el primero es "^ @".

¿Alguna idea de por qué no funciona en mi escritorio? ¡Gracias por tu ayuda!

Esta pregunta puede estar relacionada con esta: Shift + Up no es reconocido por Emacs en un terminal

godblessfq
fuente
2
¿Estás usando Emacs en una terminal?
Malabarba
No, estoy usando los emacs independientes.
godblessfq

Respuestas:

6

Curiosamente, puede intentar vincular la deletechar pseudo clave .

Cuando verifico el enlace de backspacemi máquina con C-h k [backspace], obtengo:

DEL(traducido de <backspace>) ejecuta el comando ... (bla, bla, bla)

Cuando verifico el enlace de shift+ backspaceen mi máquina con C-h k S-[backspace], obtengo:

<deletechar>(traducido de <delete>) ejecuta el comando ... (bla, bla, bla)

Por lo tanto, lo siguiente funciona en mi máquina:

(global-set-key [deletechar] #'evil-shift-left-line)
Dan
fuente
En mi computadora, cuando verifico el enlace de la tecla Mayús + <Retroceso> es <Retroceso>.
godblessfq
2

Tengo esto en mi configuración:

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

para hacer shift + retroceso / shift + eliminar matar a todos los espacios en blanco.


Y en caso de que alguien necesite estas funciones, aquí están:

(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))
mishoo
fuente
1

Ahora estoy contento con esta configuración.

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