Когда я запускаю list-packages
в Emacs 24, я получаю следующий экран:
Проблема в том, что имена многих пакетов длиннее столбца пакета. Как сделать этот столбец шире, чтобы я мог видеть полные имена пакетов?
Когда я запускаю list-packages
в Emacs 24, я получаю следующий экран:
Проблема в том, что имена многих пакетов длиннее столбца пакета. Как сделать этот столбец шире, чтобы я мог видеть полные имена пакетов?
Может быть, есть более элегантное решение, но я придумал это. Вы можете определить ширину столбца, используя следующий код и изменив переменную 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))
Репозиторий 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)
Я знаю, что это старый вопрос, но я надеюсь, что мой ответ может быть полезен .... (кстати, я проверил его с помощью 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...)
Ответ 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)
Вот мой взгляд на это. Он добавляет хук 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)