Je ne suis pas trop familier avec Elisp et j'essaie d'apprendre. À Emacs, j'aimerais pouvoir faire ce qui suit:
avoir ce changement de texte en surbrillance pour être "tracé (texte en surbrillance)". C'est-à-dire que j'aimerais envelopper le texte dirigé entre parenthèses et le préciser avec le texte que je sais. P>
(defun wrap-text () )
4 Réponses :
Pour votre cas, cela devrait fonctionner:
(defun wrap-text (b e txt) "simple wrapper" (interactive "r\nMEnter text to wrap with: ") (save-restriction (narrow-to-region b e) (goto-char (point-min)) (insert txt) (insert "(") (goto-char (point-max)) (insert ")"))) (global-set-key (kbd "C-x M-w") 'wrap-text)
Aussi cette question / réponse: Stackoverflow.com/Questtions/1397113/how-a-tag-text-in-emacs / ... .
Comment vas-tu faire quelque chose comme ça avec Yasnippet? Je connais bien: 1. Tapez le mot-clé 2. Développer Cela implique l'ajout de texte au début et à la fin d'une région. Je serais intéressé d'entendre cette solution aussi. Merci.
@Vinh Bon point, vous avez besoin du texte initial pour développer YASNIPPET, je vais supprimer cela de la réponse.
Merci Trey Jackson. Je ne savais pas que tu as posté une solution alors je suis allé à #emacs sur la freenode de l'aide. Après quelques recherches, j'ai proposé ce qui suit:
(defun ess-R-wrap-content-vqn () "Wrap marked region with a specified PREFIX and closing parentheses." (interactive) (set (make-local-variable 'prefix) (read-from-minibuffer "function: ")) (set (make-local-variable 'prefix) (concat prefix "(")) (save-excursion (goto-char (region-beginning)) (insert prefix)) (save-excursion (goto-char (region-end)) (insert ")")) ) (define-key ess-mode-map "\C-c\M-w" 'ess-R-wrap-content-vqn) ;; w is for wrap
Quelque chose un peu plus proche de votre version, mais avec quelques modifications:
Voici un exemple: p>
(defun wrap-in-function () "Wrap marked region with a specified PREFIX and closing parentheses." (interactive) (let ((prefix (read-from-minibuffer "function: "))) (save-excursion (goto-char (region-beginning)) (insert (concat prefix "("))) (save-excursion (goto-char (region-end)) (insert ")"))))
La déclaration interactive de la réponse de Trey est une meilleure façon de le faire. Le 'R' indique qu'une région doit être définie et que le reste est utilisé comme une invite à lire dans le texte souhaité à l'aide des méthodes Standard EMACS. Bien que ces méthodes puissent éventuellement appeler code> lecture-from-minibuffer 'Comme vous l'avez fait ici, vous perdez d'autres comportements standard / Global Emacs que vous avez personnalisés.
Je viens d'essayer le vôtre et il n'enveloppe pas complètement le texte. Il enveloppe: envelopper () mytext.
Merci Vinh, vous avez raison, ma fonction ne fonctionne que si vous sélectionnez le texte à envelopper à partir de la fin. Je vais essayer de voir si je peux résoudre ça.
Cela nécessite 'CL mais est autrement assez minuscule. Utilisez-le depuis quelques années.
(require 'cl) ;;if you haven't elsewhere (defun decorate-region( beg end prefix suffix ) (interactive "r\nMPrefix: \nMSuffix: ") (cl-set-buffer-substring beg end (concat prefix (buffer-substring beg end) suffix)))