Francisco Borges wrote: > That does not work because both keys are bound to > self-insert-command. That's the reason I had failed to do it myself.
Yes, that's a tricky situation. > I (finally) solved the problem by doing something as ugly as: > > (defun my-four () > (interactive) > (insert-char (string-to-char "4") 1)) > > (defun my-dollar () > (interactive) > (insert-char (string-to-char "$") 1)) > > (local-set-key "$" (quote my-four)) > (local-set-key "4" (quote my-dollar)) > > Would there be a better way to do it? I don't really know Lisp... Just a few minor points: You could allow a prefix argument to insert multiple characters, provide a doc string, and avoid converting from a single-character string to the character: (defun my-four (&optional arg) "Insert \"4\" at point. With a prefix ARG, insert that many characters." (interactive "p") (insert-char ?4 (or arg 1))) (defun my-dollar () "Insert \"$\" at point. With a prefix ARG, insert that many characters." (interactive "p") (insert-char ?$ (or arg 1))) (local-set-key "$" 'my-four) (local-set-key "4" 'my-dollar) If you have many such functions, you'd want to abstract the common parts with a function-defining macro: (defmacro define-my-insert (name char) "Define the `my-NAME' command, to insert CHAR." `(defun ,(intern (format "my-%s" name)) (&optional arg) ,(format "Insert \"%c\" at point. With a prefix ARG, insert that many characters." char) (interactive "p") (insert-char ,char (or arg 1)))) (define-my-insert four ?4) (define-my-insert dollar ?$) > I think that the right thing to do is to use a function such as the one > you send and treat self-insert-command cases specially, but with my > knowledge of Lisp making these changes to the code above would take more > than the free time I have to spend on it... If the define-my-insert macro were rewritten to evalutate the NAME and CHAR arguments, you could add this to swap-keys: (when (eq binding-1 'self-insert-command) (setq binding-1 (define-my-insert (intern key-1) (string-to-char key-1)))) (when (eq binding-2 'self-insert-command) (setq binding-2 (define-my-insert (intern key-2) (string-to-char key-2)))) -- Kevin Rodgers _______________________________________________ Help-gnu-emacs mailing list Help-gnu-emacs@gnu.org http://lists.gnu.org/mailman/listinfo/help-gnu-emacs