2012-06-30 3 views
13

Escribo mi propio modo en Elisp. Básicamente es una aplicación simple crud mostrando filas de datos que pueden ser manipulados a través del minibúfer. Me gustaría crear una vista para estas filas que se parece al administrador de paquetes de emacs: columnas de datos bien alineadas. ¿Cuál es la mejor manera de implementar una vista así?¿Cómo crear una vista de columna en Emacs Lisp?

Respuesta

18

La respuesta de phils me consiguió en la pista. Sin embargo, no hay tutoriales ni ejemplos sencillos en ninguna parte, así que creé uno. Aquí está un ejemplo de un derivado modo de lista tabulada que tiene datos estáticos y puede imprimir el ID de la columna actual:

(define-derived-mode mymode tabulated-list-mode "mymode" "Major mode My Mode, just a test" 
    (setq tabulated-list-format [("Col1" 18 t) 
           ("Col2" 12 nil) 
           ("Col3" 10 t) 
           ("Col4" 0 nil)]) 
    (setq tabulated-list-padding 2) 
    (setq tabulated-list-sort-key (cons "Col3" nil)) 
    (tabulated-list-init-header)) 

(defun print-current-line-id() 
    (interactive) 
    (message (concat "current line ID is: " (tabulated-list-get-id)))) 

(defun my-listing-command() 
    (interactive) 
    (pop-to-buffer "*MY MODE*" nil) 
    (mymode) 
    (setq tabulated-list-entries (list 
       (list "1" ["1" "2" "3" "4"]) 
       (list "2" ["a" "b" "c" "d"]))) 
    (tabulated-list-print t)) 
1

Si observa el código para la función de listado de paquetes que menciona, verá que emplea package-menu-mode que deriva de tabulated-list-mode.

  • M-xfind-functionRETpackage-menu-modeRET
  • C-hftabulated-list-modeRET
0

utilizo org-mode para este tipo de tarea todo el tiempo.

Esto debería ser un punto de partida para su desarrollo, porque ya tiene buenas tablas.