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,
en0
desaparece:Experimente con eso y vea lo que obtiene cuando no tiene una conexión a Internet. Por ejemplo, para actualizar solo los paquetes cuando
en0
está 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 casoslo
en 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,nil
entonces no hay forma de recuperar el paquete lista.fuente
Utilizo lo siguiente para excluir
loopback
interfaces 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