Wenn ich Emacs öffne, wertet es meine Init-Datei aus, einschließlich der Aktualisierung meiner Paketarchive über eine Internetverbindung. Dies ist problematisch, wenn ich keine Internetverbindung habe. Daher muss ich die Ausführung dieses Codes verhindern, wenn Emacs ohne Internetverbindung gestartet wird. Um dieses Problem zu lösen, frage ich mich, ob es eine Möglichkeit gibt, den Paketaktualisierungscode von Emacs zu ignorieren, wenn ich keine Internetverbindung habe.
Hier sind die ersten Zeilen von mir 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)
Ich stelle mir vor, dass ich wie folgt Code hinzufügen kann, um meine Emacs-Datei zu laden:
;; 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))
Gibt es eine (connected-to-internet)
Funktion oder einen ähnlichen Ansatz, um dieses Problem zu beheben?
elisp
networking
modulitos
quelle
quelle
Antworten:
Nun, wenn Sie immer noch Inhalte automatisch aktualisieren möchten, können Sie, wann immer möglich, etwas wie den folgenden Code tun:
Einige Notizen sind fällig:
(ignore-errors (package-refresh-contents))
wenn es Ihnen egal wäre, ob es erfolgreich war oder nicht.quelle
Eine einfache Lösung, die ich aus meinen Shell-Skripten übernommen habe, ist
Sie können dies im
*scratch*
Puffer testen :quelle
Eine Sache, die Sie versuchen könnten, ist die Funktion
network-interface-list
. Es gibt eine Liste der Netzwerkschnittstellen und ihrer IP-Adressen zurück.Für mich ist das, was es zurückgibt, wenn ich sowohl mit Ethernet als auch mit WLAN verbunden bin:
Und wenn ich WLAN ausschalte,
en0
verschwindet:Experimentieren Sie damit und sehen Sie, was Sie erhalten, wenn Sie keine Internetverbindung haben. Um beispielsweise Pakete nur zu aktualisieren, wenn
en0
sie aktiv sind, gehen Sie wie folgt vor:quelle
(("eth0" . [10 72 153 234 0]) ("lo" . [127 0 0 1 0]))
weil ich mit dem Ethernet verbunden bin.So erweitern Sie die Antwort von Legoscia:
Dies wird eine Liste der aktiven Netzwerkverbindungen zurückzukehren (
lo.*
die Loopback - Schnittstelle, in einigen Fällenlo
in anderenlo#
.Wenn der Test zurückkehrt
non-nil
, gibt es eine Netzwerkverbindung (WLAN / Ethernet, keine Garantie, dass es tatsächlich ins Internet gelangt. Müsste als Test irgendwo pingen). Wenn der Test zurückkehrt ,nil
gibt es keine Möglichkeit, das Paket abzurufen aufführen.quelle
Ich benutze das Folgende, um
loopback
Schnittstellen und auch VirtualBox- und Docker-Schnittstellen auszuschließen . Ich hoffe es ist hilfreich.quelle
Auf einem modernen Linux-System mit DBus und NetworkManager:
quelle
Ich denke, Sie sehen es falsch. Wenn Sie Ihre Pakete wirklich automatisch aktualisieren möchten, führen Sie dies beim Start nicht synchron aus: Führen Sie dies über einen Leerlaufzeitgeber aus. Z.B
quelle