2010-08-30 14 views
11

No puedo encontrar la configuración que impide la eliminación de una región completa cuando la tiene resaltada y pulsa la tecla de retroceso ... (Solo quiero borrar un carácter incluso si una región está resaltada .) ya tengoeliminar solo un carácter cuando la región está resaltada

(delete-selection-mode 0) 

y personalizados-set-variables (he cua-modo habilitado para sus funciones de rectángulo),

'(cua-delete-selection nil) 

pero eso es el comportamiento que consigo. ¿Me estoy perdiendo de algo?

+1

Creo que es un comportamiento estándar que emacs solo borre un carácter, incluso si la región está resaltada. Así que buscaría en mi '.emacs' para encontrar algo que lo deshabilite. – phimuemue

+0

Hmm. Pensé que ese era el caso también. La tecla de retroceso está ligada a 'delete-backward-char', así que no sé qué está pasando. No puedo encontrar nada en mi archivo .emacs que apunte a ello, pero sucede en todos los modos, así que tiene que ser algo grande. – hatmatrix

+0

¿Has probado a iniciar emacs a través de 'emacs -Q' (que deshabilita la carga de' .emacs 'para que pueda verificar si es efectivamente el comportamiento predeterminado)? – phimuemue

Respuesta

5

encontrado que es:

(setq delete-active-region nil) 

es la respuesta. ¡Gracias a todos por resistirme!

+0

Para esto tuve que dar vuelta cua-modo fuera también, ya que cuando la marca está activa la '' backspace' y C-d' está obligado a 'cua-delete-region'. Inesperado, ya que 'cua-cua-enable-keys' se establece en' las negativas, pero supongo que voy a hacer sin cua-modo ... – hatmatrix

+1

eso no resuelve el problema de vainilla Emacs ('emacs -q') –

+0

¡Interesante! Ni siquiera tengo esa variable ... una búsqueda rápida en Google hace que parezca que solo existe en delsel.el, que está incluido en GNU Emacs, pero aparentemente tiene que ser 'requerido' antes de su uso. Nunca lo supe lo siento, no pude haber sido más ayuda! –

1

En ELisp, 0 se considera cierto.

Try estableciendo

(setq delete-selection-mode nil) 
+0

No sabía que eliminar-seleccionar- el modo también era una variable ... pero tu sugerencia no funcionó, por desgracia ... – hatmatrix

+0

qué extraño también - sobre el cero - gracias por ese consejo. – hatmatrix

+0

Desde su búfer actual, intente con 'Control ESC ESC' e ingrese Lisp arriba' (setq delete-selection-mode nil) '(Enter). Debería cambiar el comportamiento local. Luego intente configurando la línea en '.emacs' (puede funcionar para todos los buffers). Finalmente puede usar la 'descripción-variable'' M-x' (Alt-x) 'y entrar (completar)' delete-selection-mode'. El menú le ofrecerá la primera 'personalización', en la que puede guardar el valor permanentemente. –

2

Emacs tiene un comportamiento diferente en función de si el resaltado se hizo con el ratón o el teclado.

Incluso en transient-mark-mode, si establece la marca y mueve el punto, usar el retroceso no eliminará la región. delete-selection-mode es un modo menor que cambia este comportamiento.

Al usar el mouse para resaltar una región, independientemente de delete-selection-mode, utilizando el retroceso se eliminará la región que se resaltó con el mouse. De la Sección 25.1.1 del manual:

"Mientras que la región sigue siendo activa, mecanografía o elimina el texto que región y desactiva la marca; este comportamiento sigue una convención establecida por otros programas gráficos, y lo hace no se aplica cuando configura la región de otra manera, incluyendo selección de desplazamiento (* nota Shift Selection: :). "

En base a esto, parece que está seleccionando la región con el mouse. ¿Es eso correcto? ¿Se produce el mismo comportamiento cuando se usa shift-select-mode o simplemente usando la marca y el punto?

+0

Hola, en realidad solo estoy usando el teclado, con punto y marca (no cambio) ... shift-selection-mode es nil. – hatmatrix

+0

Bueno, entonces algo está torcido. Estoy usando GNU Emacs 23.2.1 en OS X y cuando uso el teclado de alguna manera para resaltar una región ('transient-mark-mode' o no), y retrocedo mientras la región está resaltada, no lo hago obtener este comportamiento Volveré a publicar si puedo encontrar alguna configuración que pueda estar causando el problema que estás teniendo. –

+0

Gracias. Sí, muy extraño. ¡Ahora encontré que 'delete-forward-char' también está" roto "de la misma manera! – hatmatrix

1

Como se ha observado, cua-mode no lo maneja bien. La forma más sencilla de retener ese modo sin este problema parece ser que redefinir el mapa de teclas cua (ver cua--init-keymaps) después de inicializar el modo, para desenlazar las distintas teclas de borrado de cua-delete-region:

(add-hook 'cua-mode-hook 'my-cua-mode-hook) 
(defun my-cua-mode-hook() 
    (define-key cua--region-keymap [remap delete-backward-char] 'delete-backward-char) 
    (define-key cua--region-keymap [remap backward-delete-char] 'backward-delete-char) 
    (define-key cua--region-keymap [remap backward-delete-char-untabify] 'backward-delete-char-untabify) 
    (define-key cua--region-keymap [remap delete-char] 'delete-char)) 
+0

Esto impide CUA desde pisando fuerte en en modo normal, pero no puedo conseguirlo todavía para borrar región cuando en realidad * * en el modo CUA. –

1

Al parecer, esto hace que funcione bien por el retroceso. Incluso en el modo cua:

;; Let backspace and delete be defined as usual if 
;; nothing is highlighted, otherwise the marked region is deleted 
(defun kill-something() (interactive) 
    (if (and mark-active transient-mark-mode) 
     (kill-region (point) (mark)) 
    (backward-delete-char-untabify 1))) 
;;(global-set-key [delete] 'kill-something) 
(global-set-key [backspace] 'kill-something) 

This code was found here.

1

Añadir (delete-selection-mode nil) al archivo de configuración.

De la documentación dentro de Emacs:

-selección del modo de borrado es una función Lisp compilado interactiva en `delsel.el'.

(delete-selección del modo de & opcional ARG)

Alternar modo de eliminación de Selección. Con el prefijo ARG, active el modo Eliminar selección si ARG es positivo, desactívelo si ARG no es positivo.

Cuando se activa el modo de selección de eliminación, el modo Transient Mark es también habilitada y texto tecleado sustituye a la selección si la selección es activo. De lo contrario, el texto mecanografiado simplemente se inserta en el punto independientemente de cualquier selección.

Cuestiones relacionadas