Quando abro o Emacs, ele avalia meu arquivo init, que inclui a atualização dos meus arquivos de pacotes via conexão com a Internet. Isso é problemático quando não tenho uma conexão com a Internet, portanto, preciso impedir a execução desse código ao iniciar o Emacs sem uma conexão com a Internet. Para resolver esse problema, gostaria de saber se existe alguma maneira de o Emacs ignorar o código de atualização de pacotes quando não tenho uma conexão com a Internet?
Aqui estão as primeiras linhas do meu 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)
Eu imagino que posso adicionar código para carregar meu arquivo Emacs da seguinte maneira:
;; 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 uma (connected-to-internet)
função ou abordagem semelhante para resolver esse problema?
elisp
networking
modulitos
fonte
fonte
Respostas:
Bem, se você ainda deseja atualizar o conteúdo automaticamente, sempre que possível, faça algo como o código abaixo:
Poucas notas são devidas:
(ignore-errors (package-refresh-contents))
se não se importasse se conseguiu ou não.fonte
Uma solução simples que eu adotei nos meus scripts de shell é
Você pode testar isso no
*scratch*
buffer:fonte
Uma coisa que você pode tentar é a função
network-interface-list
. Ele retorna uma lista de interfaces de rede e seus endereços IP.Para mim, é isso que retorna quando estou conectado à Ethernet e ao wifi:
E quando desligo o wifi,
en0
desaparece:Experimente e veja o que você ganha quando não tem uma conexão com a Internet. Por exemplo, para atualizar apenas os pacotes quando
en0
estiver pronto, faça algo como:fonte
(("eth0" . [10 72 153 234 0]) ("lo" . [127 0 0 1 0]))
porque estou conectado à Ethernet.Para expandir a resposta de Legoscia:
Isso retornará uma lista de conexões de rede ativas (
lo.*
é a interface de loopback, em alguns casoslo
em outroslo#
.Se o teste retornar
non-nil
, haverá uma conexão de rede (wifi / ethernet, no entanto, não há garantia de que ele realmente atinja a Internet externa. Teria que executar ping em algum lugar como teste para isso); se ele retornarnil
, não haverá como recuperar o pacote. Lista.fonte
Eu uso o seguinte para excluir
loopback
interfaces e também interfaces VirtualBox e Docker. Espero que seja útil.fonte
Em um sistema Linux moderno com DBus e NetworkManager:
fonte
Eu acho que você está olhando da maneira errada. Se você realmente deseja atualizar automaticamente seus pacotes, não faça isso de forma síncrona na inicialização: faça isso de um temporizador ocioso de algum tipo. Por exemplo
fonte