1
votes

Comment définir une liaison de touches pour créer et passer à la ligne suivante dans emacs?

J'ai le code suivant qui tente de créer une nouvelle ligne, puis d'y accéder. L'idée est que move-end-of-line sautera à la fin de la ligne courante, et ["C-m"] agirait comme retour / entrée. Pourtant, l'exécution de cette commande donne l'erreur: "mauvais nombre d'arguments". Comment résoudre ce problème?

(global-set-key (kbd "C-.") 'new-line)

(defun new-line ()
  (interactive)
  (move-end-of-line)
  ["C-m"]
  )


0 commentaires

3 Réponses :


1
votes

Je pense que vous devez lire les manuels Emacs et elisp: ces questions sont assez faciles à répondre. Voici une façon de le faire.

(defun insert-line-after-line (&optional n)
  (interactive "p")
  (end-of-line 1)                       ;end of current line
  (open-line n)                         ;open n new lines
  (forward-line 1))                     ;go to start of first of them

Mais sérieusement: Emacs a une auto-documentation très complète, il est facile de savoir comment faire ces choses.


1 commentaires

+1 pour le conseil de consulter les manuels. Le manuel "Introduction à la programmation dans Emacs Lisp" est le point de départ - C-h i .



0
votes

Une option consiste à enregistrer une macro et à l'utiliser.

(global-set-key (kbd "C-.") 'new-line)
(fset 'new-line
   [end return])

Si vous ne vous souciez pas de la persistance de la macro, exécutez-la simplement:

M-x name-last-kbd-macro  new-line
M-x insert-kbd-macro new-line

Mais si vous voulez qu'elle persiste, enregistrez-le:

C-x e

et collez la sortie dans votre fichier d'initialisation (avec votre définition de raccourci):

M-x kmacro-start-macro
C-e
C-m
M-x kmacro-end-macro


0 commentaires

0
votes

["C-m"] est comme la façon dont vous spécifiez une clé pour faire une liaison de clé, mais ce n'est pas la même que la façon dont vous dites par programmation à Emacs d'insérer un caractère dans un document. Vous pouvez utiliser (insert-char? \ ^ M) (voir ref here ), mais cela donnerait un caractère ^ M littéral (essayez-le; une autre façon de faire la même chose de manière interactive est de Ctrl - < kbd> Q suivi de Ctrl - M ). (insérer "\ n") semble être ce que vous recherchez.

De plus, la raison pour laquelle vous recevez le message "mauvais nombre d'arguments" est que (move-end-of-line) nécessite un argument lorsqu'il est appelé hors du contexte interactif. (move-end-of-line 1) fonctionne.

Cela dit, le paramètre suivant est peut-être un moyen plus simple d'obtenir le résultat que vous recherchez:

(setq next-line-add-newlines t)

Cela vous permettra de faire simplement C-n à la fin du fichier et de ne pas vous soucier de la distinction entre déplacer et insérer.


0 commentaires