Emacs selection mode

I thought about implementing operator+motion pattern keymap into emacs, but for now, i miserably failed. I still want to – later on.

However, I realized yesterday there is one context where, even with a « non modal » text editor, you should navigate without modifier. This is selecting text. While you are selecting : why should you press ^e to go end of line? Given you have a selection, typing e should be enough. Emacs knows you are extending your selection.

Thus, my first piece of lisp is a simple mode to change behaviour when mark is set. In such case, you can move without modifiers. I’ve tried to ways:

– the sort of vim way. Use ^ or $, ijkl

– sort of emacs read-only modes way. Use a e n p.

That’s a start. Seems this might be useful, at least for me =)

 

;;          KEYMAP
;; ——————————————–
(defvar devil-mode-map nil « Keymap for devil-mode »)

(defun devil-add-selection-keymap ()
  (when (not devil-mode-map)
  (setq devil-mode-map (make-sparse-keymap))

  ;; version VIM + CUA

  ;—————— moves ————————-
  ;(define-key devil-mode-map (kbd « l ») ‘forward-char)
  ;(define-key devil-mode-map (kbd « j ») ‘backward-char)
  ;(define-key devil-mode-map (kbd « k ») ‘next-line)
  ;(define-key devil-mode-map (kbd « i ») ‘previous-line)
  ;(define-key devil-mode-map (kbd « $ ») ‘end-of-line)
  ;(define-key devil-mode-map (kbd « a ») ‘beginning-of-line)
  ;(define-key devil-mode-map (kbd « ^ ») ‘back-to-indentation)
  ;(define-key devil-mode-map (kbd « w ») ‘forward-word)
  ;(define-key devil-mode-map (kbd « b ») ‘backward-word)
  ;
  ;;—————— operators ————————-
  ;(define-key devil-mode-map (kbd « c ») ‘kill-ring-save)
  ;(define-key devil-mode-map (kbd « x ») ‘kill-region)
  ;(define-key devil-mode-map (kbd « d ») ‘kill-region)
  ;(define-key devil-mode-map (kbd « z ») ‘exchange-point-and-mark)
 

  ;; version EMACS

  ;—————— moves ————————-
  (define-key devil-mode-map (kbd « f ») ‘forward-char)
  (define-key devil-mode-map (kbd « b ») ‘backward-char)
  (define-key devil-mode-map (kbd « n ») ‘next-line)
  (define-key devil-mode-map (kbd « p ») ‘previous-line)
  (define-key devil-mode-map (kbd « e ») ‘end-of-line)
  (define-key devil-mode-map (kbd « a ») ‘beginning-of-line)
  (define-key devil-mode-map (kbd « m ») ‘back-to-indentation)
  (define-key devil-mode-map (kbd « M-f ») ‘forward-word)
  (define-key devil-mode-map (kbd « M-b ») ‘backward-word)

  ;—————— operators ————————-
  (define-key devil-mode-map (kbd « w ») ‘kill-ring-save)
  (define-key devil-mode-map (kbd « k ») ‘kill-region)
  (define-key devil-mode-map (kbd « d ») ‘kill-region)
  (define-key devil-mode-map (kbd « x ») ‘exchange-point-and-mark)
  (define-key devil-mode-map (kbd « space ») ‘devil-unset-mark)
  )

  (set-temporary-overlay-map devil-mode-map t)
)

;;             toggle keymap
;; ——————————
(defun devil-activate-selection-state ()
   (devil-add-selection-keymap)
)

(defun devil-deactivate-selection-state ()

)

(add-hook ‘activate-mark-hook ‘devil-activate-selection-state)

(add-hook ‘activate-mark-hook ‘devil-deactivate-selection-state)

;;         define mode
;; ——————————

(define-minor-mode devil-mode
  « clavier bien tempéré »
 :lighter  » dev »
)

(provide ‘devil-mode)

 

Cet article a été publié dans emacs. Ajoutez ce permalien à vos favoris.

Laisser un commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion / Changer )

Image Twitter

Vous commentez à l'aide de votre compte Twitter. Déconnexion / Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion / Changer )

Photo Google+

Vous commentez à l'aide de votre compte Google+. Déconnexion / Changer )

Connexion à %s