Ketika saya membuka Emacs, itu mengevaluasi file init saya, yang termasuk menyegarkan arsip paket saya melalui koneksi internet. Ini bermasalah ketika saya tidak memiliki koneksi internet, jadi saya perlu mencegah eksekusi kode itu ketika memulai Emacs tanpa koneksi internet. Untuk mengatasi masalah ini, saya ingin tahu apakah ada cara agar Emacs mengabaikan kode penyegaran paket ketika saya tidak memiliki koneksi internet?
Inilah beberapa baris pertama dari saya 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)
Saya membayangkan bahwa saya dapat menambahkan kode untuk memuat file Emacs saya sebagai berikut:
;; 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))
Apakah ada (connected-to-internet)
fungsi, atau pendekatan serupa, untuk menyelesaikan masalah ini?
elisp
networking
modulitos
sumber
sumber
Jawaban:
Nah, jika Anda masih ingin me-refresh konten secara otomatis, jika memungkinkan, Anda dapat melakukan sesuatu seperti kode di bawah ini:
Beberapa catatan jatuh tempo:
(ignore-errors (package-refresh-contents))
jika Anda tidak peduli apakah itu berhasil atau tidak.sumber
Solusi sederhana yang saya adopsi dari skrip shell saya adalah
Anda dapat menguji ini di
*scratch*
buffer:sumber
Satu hal yang bisa Anda coba adalah fungsinya
network-interface-list
. Ini mengembalikan daftar antarmuka jaringan dan alamat IP mereka.Bagi saya, inilah yang dikembalikan ketika saya terhubung ke Ethernet dan wifi:
Dan ketika saya mematikan wifi,
en0
menghilang:Percobaan dengan itu dan lihat apa yang Anda dapatkan ketika Anda tidak memiliki koneksi Internet. Misalnya, untuk hanya menyegarkan paket saat
en0
habis, lakukan sesuatu seperti:sumber
(("eth0" . [10 72 153 234 0]) ("lo" . [127 0 0 1 0]))
karena saya terhubung ke ethernet.Untuk memperluas jawaban Legoscia:
Ini akan mengembalikan daftar koneksi jaringan aktif (
lo.*
adalah antarmuka loopback, dalam beberapa kasuslo
di yang lainlo#
.Jika tes kembali
non-nil
, maka ada koneksi jaringan (wifi / ethernet, tidak ada jaminan itu benar-benar mencapai internet luar. Namun harus melakukan ping di suatu tempat sebagai tes untuk itu), jika itu kembalinil
maka tidak ada cara untuk mengambil paket daftar.sumber
Saya menggunakan berikut ini untuk mengecualikan
loopback
antarmuka dan juga antarmuka VirtualBox dan Docker. Saya harap ini membantu.sumber
Pada sistem Linux modern dengan DBus dan NetworkManager:
sumber
Saya pikir Anda melihatnya dengan cara yang salah. Jika Anda benar-benar ingin memperbarui paket-paket Anda secara otomatis, maka jangan lakukan itu secara serempak pada saat startup: lakukan dari semacam pengatur waktu. Misalnya
sumber