Как сделать колонку пакетов на экране списка пакетов Emacs ELPA шире?

Когда я запускаю list-packages в Emacs 24, я получаю следующий экран:

ELPA

Проблема в том, что имена многих пакетов длиннее столбца пакета. Как сделать этот столбец шире, чтобы я мог видеть полные имена пакетов?


person Ana    schedule 07.02.2015    source источник


Ответы (5)


Может быть, есть более элегантное решение, но я придумал это. Вы можете определить ширину столбца, используя следующий код и изменив переменную package-menu-column-width в соответствии с вашими потребностями. Затем вам нужно включить его в свой файл инициализации (после (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))
person homeless    schedule 07.02.2015
comment
Мне пришлось сделать то же самое. Похоже, что патч к файлу package.el позволяет настраивать ширину столбцов! - person Chris McMahan; 11.02.2015

Репозиторий 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)
person Tim X    schedule 12.02.2015

Я знаю, что это старый вопрос, но я надеюсь, что мой ответ может быть полезен .... (кстати, я проверил его с помощью emacs 26.1 и диспетчера пакетов 1.1.0, работающих в Windows 8.1)

давайте найдем файл package.el - в моей системе он находится в папке:

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

откройте его в своем emacs... найдите фрагмент кода, похожий на этот: (в моей системе это строки 2553..2559 файла package.el)

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

'byte-compile' этот файл (например, выберите эту опцию в меню 'Emacs-Lisp'), вы должны получить сообщение:

"Написано \package.elc"

перезапустить Emacs

Вуаля!

PS: Конечно, это не элегантное и только временное решение; Это работает только до следующего обновления Emacs (конечно, вы можете повторить эту процедуру после обновления emacs...)

person ktp    schedule 19.07.2018

Ответ 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)
person GodEater    schedule 14.12.2018

Вот мой взгляд на это. Он добавляет хук package-menu-mode (например, решение Purcell) и изменяет 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)
person Darren Embry    schedule 26.10.2019