My go to Emacs in-line dictionary is abo-abo’s define-word. It pops up a definition of the word at point in the minibuffer. I use it several times a day. Lately, though, it has been returning “zero definitions found” on every invocation. This problem predated my update to Emacs 31.1 so it’s not related to the version of Emacs.
Today (Tuesday) I finally got fed up and decided to track down the problem. It wasn’t too hard. It turns out that the problem is that define-word calls the on-line dictionaries with HTTP rather than HTTPS and the sites are rejecting the connections. There’s already a pull request (2026-08-22) for the fix but as of today (2026-08-25) it hasn’t been merged or uploaded to MELPA.
I messed around for a while but couldn’t get any of the obvious solutions to work so I gave up and added
:init
;; Until define-word is updated in MELPA
(defcustom define-word-services
'((wordnik "https://wordnik.com/words/%s" define-word--parse-wordnik)
(openthesaurus "https://www.openthesaurus.de/synonyme/%s" define-word--parse-openthesaurus)
(webster "https://webstersdictionary1828.com/Dictionary/%s" define-word--parse-webster)
(offline-wikitionary define-word--get-offline-wikitionary nil))
"Services for define-word, A list of lists of the
format (symbol url function-for-parsing).
Instead of an url string, url can be a custom function for retrieving results."
:type '(alist
:key-type (symbol :tag "Name of service")
:value-type (group
(string :tag "Url (%s denotes search word)")
(function :tag "Parsing function"))))
to the use-package for define-word. That’s just a copy of the definition of define-word-services from the define-word source. Note that it’s important that it goes in the :init section so that the definition gets established before define-word is loaded.
It’s a messy solution but it will do until the fix is merged and percolates up to MELPA.