如何将Emacs ELPA列表页面上的“package”列变宽?

8
当我在Emacs 24上运行list-packages时,我会看到以下屏幕:

ELPA

问题是许多软件包的名称长于软件包列。如何使该列变宽以便我可以看到完整的软件包名称?
5个回答

3
也许有更优雅的解决方案,但我想到了这个方法。您可以使用以下代码定义列的宽度,并将变量package-menu-column-width更改为您的需要。然后,您需要将其包含在您的init文件中(在(require 'package)之后)。这是从package.el文件中定义表格格式的。请参见代码内部的第一个注释,您需要修改列的宽度。您可以以类似的方式处理其他列。
;; <<<< here you have to adapt the number to your needs >>>>
(defcustom package-menu-column-width 18
  "Width of the package column."
  :type 'number
  :group 'package)

(define-derived-mode package-menu-mode tabulated-list-mode "Package Menu"
  "Major mode for browsing a list of packages.
Letters do not insert themselves; instead, they are commands.
\\<package-menu-mode-map>
\\{package-menu-mode-map}"
  (setq tabulated-list-format
        `[("Package" ,package-menu-column-width package-menu--name-predicate)
          ("Version" 12 nil)
          ("Status"  10 package-menu--status-predicate)
          ,@(if (cdr package-archives)
                '(("Archive" 10 package-menu--archive-predicate)))
          ("Description" 0 nil)])
  (setq tabulated-list-padding 2)
  (setq tabulated-list-sort-key (cons "Status" nil))
  (add-hook 'tabulated-list-revert-hook 'package-menu--refresh nil t)
  (tabulated-list-init-header))

1
我也不得不做同样的事情。似乎需要对package.el文件进行补丁,以允许自定义列宽! - Chris McMahan

0

http://www.github.com/purcell/emacs.d 存储库包括在 lisp/init-elpa.el 设置文件中的以下内容,看起来可以解决您的问题。

(require-package 'cl-lib)
(require 'cl-lib)

(defun sanityinc/set-tabulated-list-column-width (col-name width)
  "Set any column with name COL-NAME to the given WIDTH."
  (cl-loop for column across tabulated-list-format
           when (string= col-name (car column))
           do (setf (elt column 1) width)))

(defun sanityinc/maybe-widen-package-menu-columns ()
  "Widen some columns of the package menu table to avoid truncation."
  (when (boundp 'tabulated-list-format)
    (sanityinc/set-tabulated-list-column-width "Version" 13)
    (let ((longest-archive-name (apply 'max (mapcar 'length (mapcar 'car package-archives)))))
      (sanityinc/set-tabulated-list-column-width "Archive" longest-archive-name))))

(add-hook 'package-menu-mode-hook 'sanityinc/maybe-widen-package-menu-columns)

0

我知道这是一个老问题,但我希望我的答案可能有用......(顺便说一句,我已经在运行Windows 8.1上检查过使用emacs 26.1和package manager 1.1.0)

让我们找到'package.el'文件 - 在我的系统中它在文件夹中:

d:\Program Files2\emacs\share\emacs\26.1\lisp\emacs-lisp\

在你的emacs中打开它...找到一个类似这样的代码片段: (在我的系统中,这些是'package.el'文件的2553..2559行)

(setq tabulated-list-format
    `[("Package" 18 package-menu--name-predicate)
      ("Version" 13 nil)
      ("Status"  10 package-menu--status-predicate)
      ,@(if (cdr package-archives)
            '(("Archive" 13 package-menu--archive-predicate)))
      ("Description" 0 nil)])                                 

您可以在这里看到包管理器列宽的定义。 根据您的需求更改相应列的宽度... (在我的情况下,18->25,13->15,10->10,13->15就足够了)。

“字节编译”此文件(例如,在“Emacs-Lisp”菜单中选择此选项),您应该会收到以下消息:

“已写入\package.elc”

重新启动Emacs

完成!

附注:当然,这不是一种优雅且永久的解决方案; 它仅适用于下一次Emacs更新之前(当然,您可以在emacs更新后重复此过程...)


0

Tim X 的答案是最接近我认为所需的 - 然而,在设置相关列宽度之前,该函数计算“存档”列中最大项的长度。为了使“包”列大小适合其中的最大项,我发现以下内容适用于我:

(require 'cl-lib)
(defun godeater/set-tabulated-list-column-width (col-name width)
  "Set any column with the name COL-NAME to the given WIDTH."
  (cl-loop for column across tabulated-list-format
       when (string= col-name (car column))
       do (setf (elt column 1) width)))

(defun godeater/maybe-widen-package-menu-columns ()
  "Widen some columns of the package menu table to avoid truncation."
  (when (boundp 'tabulated-list-format)
    (godeater/set-tabulated-list-column-width "Version" 13 )
    (let ((longest-package-name (apply 'max (mapcar 'length (mapcar 'symbol-name (mapcar 'car package-archive-contents))))))
      (godeater/set-tabulated-list-column-width "Package" longest-package-name))))

(add-hook 'package-menu-mode-hook 'godeater/maybe-widen-package-menu-columns)

0
这是我的看法。它添加了一个类似于Purcell解决方案的package-menu-mode钩子,并以比其他解决方案更简洁的方式修改了tabulated-list-format。 它还扩大了“归档”列的宽度,因为我讨厌看到melpa-s...而不是melpa-stable。(是的,该列有省略号。)我没有费心去计算列宽的某些函数,因为它不会经常改变,几乎每个包名称都小于或等于它。
(defcustom dse/package-menu/package-column-width 32
  "Column width of package name in list-packages menu."
  :type 'number :group 'package)
(defcustom dse/package-menu/archive-column-width 12
  "Column width of archive name in list-packages menu."
  :type 'number :group 'package)
(defun dse/package-menu/fix-column-widths ()
  (let ((tlf (append tabulated-list-format nil)))
    (setf (cadr (assoc "Package" tlf)) dse/package-menu/package-column-width)
    (setf (cadr (assoc "Archive" tlf)) dse/package-menu/archive-column-width)
    (setq tabulated-list-format (vconcat tlf))))

(add-hook 'package-menu-mode-hook #'dse/package-menu/fix-column-widths)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接