Lorsque j'ouvre Emacs, il évalue mon fichier init, qui comprend l'actualisation des archives de mon package via une connexion Internet. C'est problématique lorsque je n'ai pas de connexion Internet, donc je dois empêcher l'exécution de ce code lors du démarrage d'Emacs sans connexion Internet. Pour résoudre ce problème, je me demande s'il existe un moyen pour qu'Emacs ignore le code d'actualisation du package lorsque je n'ai pas de connexion Internet?
Voici les premières lignes de mon 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)
J'imagine que je peux ajouter du code pour charger mon fichier Emacs comme suit:
;; 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-t-il une (connected-to-internet)
fonction ou une approche similaire pour résoudre ce problème?
elisp
networking
modulitos
la source
la source
Réponses:
Eh bien, si vous vouliez toujours actualiser le contenu automatiquement, chaque fois que possible, vous pourriez faire quelque chose comme le code ci-dessous:
Peu de notes sont dues:
(ignore-errors (package-refresh-contents))
si vous n'aviez pas voulu savoir si cela avait réussi ou non.la source
Une solution simple que j'ai adoptée à partir de mes scripts shell est
Vous pouvez tester cela dans le
*scratch*
tampon:la source
Une chose que vous pourriez essayer est la fonction
network-interface-list
. Il renvoie une liste des interfaces réseau et leurs adresses IP.Pour moi, c'est ce que cela renvoie lorsque je suis connecté à la fois à Ethernet et à wifi:
Et quand je désactive le wifi,
en0
disparaît:Expérimentez avec cela et voyez ce que vous obtenez lorsque vous n'avez pas de connexion Internet. Par exemple, pour actualiser uniquement les packages lorsqu'il
en0
est activé, faites quelque chose comme:la source
(("eth0" . [10 72 153 234 0]) ("lo" . [127 0 0 1 0]))
parce que je suis connecté à Ethernet.Pour développer la réponse de Legoscia:
Cela renverra une liste des connexions réseau actives (
lo.*
c'est l'interface de bouclage, dans certains caslo
dans d'autreslo#
.Si les déclarations de test
non-nil
, alors il y a une connexion réseau (wifi / ethernet, aucune garantie qu'elle parvienne effectivement l'internet extérieur cependant. Faudrait ping quelque part comme un test pour cela), si elle retournenil
alors il n'y a aucun moyen de récupérer le paquet liste.la source
J'utilise les éléments suivants pour exclure les
loopback
interfaces et également les interfaces VirtualBox et Docker. J'espère que c'est utile.la source
Sur un système Linux moderne avec DBus et NetworkManager:
la source
Je pense que vous le regardez dans le mauvais sens. Si vous voulez vraiment mettre à jour automatiquement vos packages, ne le faites pas de manière synchrone au démarrage: faites-le à partir d'une minuterie inactive. Par exemple
la source