emacs themes melpa
ActualizaciĆ³n de paquetes en Emacs (4)
Yo uso lo siguiente:
(when (not package-archive-contents) (package-refresh-contents))
Hacer
package-list-packages
también actualizará la lista de paquetes.
Puede actualizar todos los paquetes instalados con U x en el búfer *Packages*
.
ELPA es el original. No creo que ya se haya mantenido, pero no estoy seguro. Yo no lo uso
GNU es "oficial". Se mantiene junto con Emacs, lo que significa que las cosas siempre deberían funcionar, pero las actualizaciones y los nuevos paquetes no se reciben con mucha frecuencia.
Marmalade es básicamente un sitio web donde puede cargar un paquete completo, y se agregará al repositorio de mermelada. No solo envía un enlace al paquete en sentido ascendente, y no automatiza del todo la creación del paquete. Creo que esto es lo correcto, porque no necesariamente quieres rastrear en sentido ascendente. Desafortunadamente, no se ha mantenido durante un tiempo, pero alguien lo tomó recientemente, por lo que debería estar de vuelta y mejor en algún momento.
Melpa toma una URL para, por ejemplo, el área de lisp de EmacsWiki o un repositorio github, y crea un paquete automáticamente a partir de ella. Por lo general, es como máximo un día detrás de lo que sea que esté rastreando. Aunque rastrea en sentido ascendente, nunca he tenido un problema en la práctica, y aquí es de donde provienen la mayoría de mis paquetes. También está Melpa Stable , que es como Melpa pero agarra revisiones etiquetadas del repositorio upstream en lugar de la última revisión. Melpa estable tiene menos paquetes que Melpa.
El modo Org tiene su propio repositorio
package.el
( http://orgmode.org/elpa/ ).Todos los repos de paquetes funcionan igual, solo agréguelos a sus
package-archives
.Aquí hay un blog más detallado sobre este tema, con el que estoy de acuerdo en su mayoría.
No estoy seguro, pero creo que si un paquete está duplicado en repositorios diferentes, el orden en que aparecen los repos en
package-archives
determina la precedencia. No sé si una precedencia más alta está al principio o al final de la lista.Actualización: en Emacs 25, hay un
package-archive-priorities
variablepackage-archive-priorities
que puede usar para priorizar sus repositorios de paquetes (por ejemplo, prefiere ELPA sobre MELPA).
Aquí está la sección relevante de mi init.el
, si estás interesado:
(setq jpk-packages
''(
ac-dabbrev
...
yasnippet
))
(package-initialize)
(add-to-list ''package-archives
''("melpa" . "http://melpa.org/packages/"))
(add-to-list ''package-archives
''("org" . "http://orgmode.org/elpa/"))
;; install any packages in jpk-packages, if they are not installed already
(let ((refreshed nil))
(when (not package-archive-contents)
(package-refresh-contents)
(setq refreshed t))
(dolist (pkg jpk-packages)
(when (and (not (package-installed-p pkg))
(assoc pkg package-archive-contents))
(unless refreshed
(package-refresh-contents)
(setq refreshed t))
(package-install pkg))))
(defun package-list-unaccounted-packages ()
"Like `package-list-packages'', but shows only the packages that
are installed and are not in `jpk-packages''. Useful for
cleaning out unwanted packages."
(interactive)
(package-show-package-list
(remove-if-not (lambda (x) (and (not (memq x jpk-packages))
(not (package-built-in-p x))
(package-installed-p x)))
(mapcar ''car package-archive-contents))))
Tengo la siguiente configuración para los paquetes (no estoy seguro de si hay uno mejor recomendado):
(require ''package)
(setq package-archives ''(("ELPA" . "http://tromey.com/elpa/")
("gnu" . "http://elpa.gnu.org/packages/")
("marmalade" . "http://marmalade-repo.org/packages/")))
; Apparently needed for the package auto-complete (why?)
(add-to-list ''package-archives
''("melpa" . "http://melpa.milkbox.net/packages/") t)
(package-initialize)
(setq url-http-attempt-keepalives nil)
Tengo tres preguntas relacionadas con la instalación y actualización de paquetes.
Q1. ¿Hay alguna forma de actualizar la lista de paquetes disponibles (y las versiones más recientes) y actualizar un paquete específico?
Q.2 ¿Cuál es la diferencia entre las siguientes fuentes de paquete ?:
- ELPA,
- ÑU
- mermelada
- Melpa
Q.3 ¿Importa el orden en que se agregan a package-archives
?
Dentro de Emacs, utilice Mx list-packages
para enumerar todos los paquetes que actualizarán automáticamente el contenido del archivo. Luego use U
para marcar todos los paquetes actualizables que se actualizarán, x
para realizar las nuevas actualizaciones. Emacs luego buscará e instalará todas las actualizaciones, y le preguntará si desea eliminar las versiones antiguas y obsoletas después.
También puede consultar Carton que proporciona una manera más conveniente de administrar sus paquetes al declararlos en un archivo dedicado, e incluye un conveniente cliente de línea de comando para instalar y actualizar automáticamente los paquetes declarados de esta manera.
El orden de package-archives
del package-archives
no importa. Emacs agrega el contenido de todos los archivos en una única lista coherente de paquetes disponibles y sus versiones, almacenadas en package-archive-contents
.
Tras package-install
, Emacs simplemente elegirá la versión más nueva de un paquete, independientemente del archivo de origen. Para obtener más control sobre el origen del paquete, MELPA proporciona el paquete melpa que permite ennegrecer los paquetes de archivos especificados.
En la terminal:
emacs
M-x list-packages
esto te pone en el buffer * packages *
shift-u x
emacs le preguntará (y / n), espere las actualizaciones
C-x k <ret>
esto matará al búfer * packages * y te devolverá a * scratch *
C-x-C-c
esto saldrá de emacs, y te permitirá relanzar a través de, pero es posible que debas depurar :(
emacs
mis 2 ¢
Esto es más un comentario extendido sobre la respuesta de jpkotta.
Este es un ajuste con el que estoy experimentando para la respuesta de jpkotta:
(setq n 0) ; set n as 0
(dolist (pkg pkgs-2b-present) ; for each pkg in list
(unless (or ; unless
(package-installed-p pkg) ; pkg is installed or
(assoc pkg ; pkg is in the archive list
package-archive-contents))
(setq n (+ n 1)))) ; add one to n
(when (> n 0) ; if n > 0,
(package-refresh-contents)) ; refresh packages
(reemplazando (when (not package-archive-contents) (package-refresh-contents))
).
La lista de paquetes no era refrescante con suficiente frecuencia para mi caso de uso.
No he considerado si hay una solución más eficiente a mi problema; primero, tengo que ver si el problema desaparece con este ajuste.