如何在Emacs Lisp中创建列视图?

如何在Emacs Lisp中创建列视图?,emacs,lisp,elisp,Emacs,Lisp,Elisp,我正在用Elisp编写自己的模式。它基本上是一个简单的crud应用程序,显示可以通过minibuffer操作的数据行。我想为这些行创建一个类似于emacs包管理器的视图:数据列很好地对齐。实现这种观点的最佳方式是什么 如果您查看您提到的软件包列表函数的代码,您会发现它采用了软件包菜单模式,该模式源自列表模式 M-xfind功能RETpackage菜单模式RET C-hf列表模式RET 费城人的回答让我走上了正轨。虽然没有教程或简单的示例,但我还是创建了一个。以下是列表模式衍生工具的示例,该衍生

我正在用Elisp编写自己的模式。它基本上是一个简单的crud应用程序,显示可以通过minibuffer操作的数据行。我想为这些行创建一个类似于emacs包管理器的视图:数据列很好地对齐。实现这种观点的最佳方式是什么

如果您查看您提到的软件包列表函数的代码,您会发现它采用了
软件包菜单模式
,该模式源自
列表模式

  • M-x
    find功能
    RET
    package菜单模式
    RET
  • C-hf
    列表模式
    RET

    • 费城人的回答让我走上了正轨。虽然没有教程或简单的示例,但我还是创建了一个。以下是列表模式衍生工具的示例,该衍生工具具有静态数据,并且可以打印当前列的ID:

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

      我一直使用组织模式来完成这类任务

      这应该是您开发的起点,因为您已经有了很好的表