Código Elisp para comprobar la conexión a Internet

Pregunta:

Cuando abro Emacs, evalúa mi archivo de inicio, que incluye actualizar los archivos de mi paquete a través de una conexión a Internet. Esto es problemático cuando no tengo una conexión a Internet, por lo que 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 alguna manera de 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)       

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 función (connected-to-internet) o un enfoque similar para resolver este problema?

Respuesta:

Bueno, si aún desea actualizar el contenido automáticamente, siempre que sea posible, puede hacer algo como el siguiente código:

(defun can-retreive-packages ()
  (cl-loop for url in '("http://marmalade-repo.org/packages/"
                        "http://melpa.milkbox.net/packages/"
                        "http://elpa.gnu.org/packages/")
           do (condition-case e
                  (kill-buffer (url-retrieve-synchronously url))
                (error (cl-return)))
           finally (cl-return t)))

Se vencen pocas notas:

  1. Esto es lento, y será lento cuando se inicie normalmente, así que prefiero hacerlo manualmente.
  2. No hay forma de probar la conexión a Internet en general. Solo puede descubrir que no puede conectarse a un servicio en particular después de un tiempo de haberlo probado. Esta es también una de las razones por las que es tan lento.
  3. El código es más una ilustración de cómo abordar el problema. Podría haberlo hecho fácilmente (ignore-errors (package-refresh-contents)) si no le importara si tuvo éxito o no.

Leave a Comment

Your email address will not be published.

Scroll to Top

istanbul avukat

-

web tasarım