Подтвердить что ты не робот

Как создать представление столбца в Emacs Lisp?

Я пишу свой собственный режим в Elisp. Это в основном простое приложение crud, показывающее строки данных, которые можно манипулировать с помощью минибуфера. Я хотел бы создать представление для этих строк, которое выглядит как менеджер пакетов emacs: столбцы данных хорошо выровнены. Какой лучший способ реализовать такое представление?

4b9b3361

Ответ 1

Ответ от phils заставил меня идти в путь. В любом случае нет учебников или простых примеров, поэтому я создал один. Ниже приведен пример производной таблицы с табулированным списком, которая имеет статические данные и может печатать идентификатор текущего столбца:

(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))

Ответ 2

Если вы посмотрите на код для функции перечисления пакетов, которую вы упомянули, вы увидите, что в ней используется package-menu-mode, которая происходит от tabulated-list-mode.

  • M-x find-function RET package-menu-mode RET
  • C-h f tabulated-list-mode RET

Ответ 3

Я использую org-mode для такого рода задач все время.

Это должно быть отправной точкой для вашей разработки, потому что у вас уже есть красивые таблицы.