Creando un modo menor en Emacs
Aprovechando la versatilidad de Emacs he decidido crear un "modo menor" para poder jugar de forma más cómoda al tetris dentro del propio Emacs. Seguramente haya formas menos complicadas de hacer lo mismo, pero haciendo esto se aprende un poco mejor cómo funcionan los modos menores.
He adaptado el código de System Crafters (https://systemcrafters.cc/learning-emacs-lisp/creating-minor-modes), y he creado sendas funciones para asignar el movimiento de las piezas del tetris a las teclas "j" y "k". El modo se llama "tetritecla-basic-mode" y básicamente sólo sirve para añadir esos atajos de teclas, junto a "k" para rotar piezas y "h" para bajarlas.
Si ahora activo el modo "tetritecla-basic-mode" con un hook al iniciar el programa "tetris", ya obtengo las nuevas teclas de forma automática cada vez que quiera jugar. ¡Fácil y cómodo!
A continuación dejo el código:
(make-variable-buffer-local (defvar tetritecla-basic-mode nil "Alterna tetritecla-basic-mode.")) (defvar tetritecla-basic-mode-map (make-sparse-keymap) "El keymap para tetritecla-basic-mode") ;; Definición de las teclas para jugar. (define-key tetritecla-basic-mode-map (kbd "j") (lambda () (interactive) (tetris-move-left))) (define-key tetritecla-basic-mode-map (kbd "k") (lambda () (interactive) (tetris-rotate-prev))) (define-key tetritecla-basic-mode-map (kbd "h") (lambda () (interactive) (tetris-move-down))) (define-key tetritecla-basic-mode-map (kbd "l") (lambda () (interactive) (tetris-move-right))) (add-to-list 'minor-mode-alist '(tetritecla-basic-mode " tetritecla")) (add-to-list 'minor-mode-map-alist (cons 'tetritecla-basic-mode tetritecla-basic-mode-map)) (defun tetritecla-basic-mode (&optional ARG) (interactive (list 'toggle)) (setq tetritecla-basic-mode (if (eq ARG 'toggle) (not tetritecla-basic-mode) (> ARG 0))) ;; Aviso de activación de modo (if tetritecla-basic-mode (message "tetritecla-basic-mode activado") (message "tetritecla-basic-mode desactivado")))