Cuando abro Emacs, evalúa mi archivo de inicio, que incluye la actualización de mis archivos de paquetes a través de una conexión a Internet. Esto es problemático cuando no tengo una conexión a Internet, por lo tanto, necesito evitar la ejecución de ese código al iniciar Emacs sin una conexión a Internet. Para resolver este problema, me pregunto si hay una manera de hacer que Emacs ignore el código de actualización del paquete cuando no tengo una conexión a Internet.
Aquí están las primeras líneas de mi init.el:
;; Requisites: Emacs >= 24
(require 'package)
(package-initialize)
;; PACKAGE MANAGEMENT
(add-to-list 'package-archives
'("melpa" . "http://melpa.milkbox.net/packages/") t)
(package-refresh-contents)
Me imagino que puedo agregar código para cargar mi archivo Emacs de la siguiente manera:
;; Requisites: Emacs >= 24
(when (connected-to-internet-p) ; I need this predicate function
(require 'package)
(package-initialize)
(add-to-list 'package-archives
'("melpa" . "http://melpa.milkbox.net/packages/") t)
(package-refresh-contents))
¿Existe una (connected-to-internet)función, o un enfoque similar, para resolver este problema?
elisp
networking
modulitos
fuente
fuente

Respuestas:
Bueno, si aún desea actualizar el contenido automáticamente, siempre que sea posible, puede hacer algo como el código a continuación:
Pocas notas se deben:
(ignore-errors (package-refresh-contents))si no le importara si tuvo éxito o no.fuente
Una solución simple que he adoptado de mis scripts de shell es
Puede probar esto en el
*scratch*búfer:fuente
Una cosa que puedes probar es la función
network-interface-list. Devuelve una lista de interfaces de red y sus direcciones IP.Para mí, esto es lo que devuelve cuando estoy conectado a Ethernet y wifi:
Y cuando apago el wifi,
en0desaparece:Experimente con eso y vea lo que obtiene cuando no tiene una conexión a Internet. Por ejemplo, para actualizar solo los paquetes cuando
en0está activo, haga algo como:fuente
(("eth0" . [10 72 153 234 0]) ("lo" . [127 0 0 1 0]))porque estoy conectado a Ethernet.Para ampliar la respuesta de Legoscia:
Esto devolverá una lista de conexiones de red activas (
lo.*es la interfaz de bucle invertido, en algunos casosloen otroslo#.Si la prueba regresa
non-nil, entonces hay una conexión de red (wifi / ethernet, sin embargo, no hay garantía de que realmente llegue a Internet externo. Tendría que hacer ping en alguna parte como prueba para eso), si regresa,nilentonces no hay forma de recuperar el paquete lista.fuente
Utilizo lo siguiente para excluir
loopbackinterfaces y también interfaces VirtualBox y Docker. Espero que sea útil.fuente
En un sistema Linux moderno con DBus y NetworkManager:
fuente
Creo que lo estás mirando de la manera incorrecta. Si realmente desea actualizar automáticamente sus paquetes, no lo haga sincrónicamente al inicio: hágalo desde un temporizador inactivo de algún tipo. P.ej
fuente