Emacs is my preferred tool for editing LATEX documents. A few years ago I got tired of switching back and forth to a terminal or web browser every time I wanted to look up a word in the dictionary or thesaurus. To remedy this, I wrote a simple, 100-line Emacs Lisp plugin to look up words using the DICT protocol.
One can simply cut/paste this into their .emacs file or make it a separate file in their elisp directory.
; -*-Emacs-Lisp-*-
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
; File: dict.el
; Description: Dict access functions
; Author: Evan Sultanik
; Created: Sun Aug 14 15:44:57 2005
; Modified: Thu Nov 15 08:45:48 2007
; Language: Emacs-Lisp
; Package: N/A
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;
;; *******************************************************
;; ***** THIS IS AN ALPHA TEST VERSION (Version 0.2) *****
;; *******************************************************
;;
;; dict.el
;; Copyright (C) 2005 Evan Sultanik (http://www.sultanik.com/)
;;
;; This program is free software; you can redistribute it and/or modify
;; it under the terms of the GNU General Public License as published by
;; the Free Software Foundation; either version 1, or (at your option)
;; any later version.
;;
;; This program is distributed in the hope that it will be useful,
;; but WITHOUT ANY WARRANTY; without even the implied warranty of
;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
;; GNU General Public License for more details.
;;
;; You should have received a copy of the GNU General Public License
;; along with this program; if not, write to the Free Software
;; Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defvar dict-protocol-client "dict"
"This is the name and/or path to the local copy of the DICT protocol client.")
(defconst dict-scratch-buffer-name "*dict*"
"This is the name of the buffer in which the dict output is displayed.")
(defun dict-extract-word ()
"From the current buffer, extract and return the word under the cursor."
(let (start word)
(save-excursion
(forward-char 1)
(backward-word 1)
(setq start (point))
(forward-char 1)
(if (not (re-search-forward "\\b"))
(error "Can't find end of word"))
(buffer-substring start (point))
)))
(defun dict-lookup-word (word dict)
"Look up the word WORD using the client, given by
`dict-protocol-client'. The results will be displayed in the buffer
given by `dict-scratch-buffer-name'. If DICT is nil, WORD is looked
up from a thesaurus only."
(interactive "sWord to lookup? \nP")
(let ((dict-buffer (get-buffer-create dict-scratch-buffer-name)))
(save-excursion
(buffer-disable-undo (set-buffer dict-buffer))
(setq buffer-read-only nil)
(setq disable-point-adjustment t)
(erase-buffer)
(display-buffer dict-buffer)
(if (null dict)
(call-process dict-protocol-client
nil ;; no infile
t ;; put output in the current buffer
t ;; re-display as we get more output
"-P" "-" "-d" "moby-thes" word)
(call-process dict-protocol-client
nil ;; no infile
t ;; put output in the current buffer
t ;; re-display as we get more output
"-P" "-" word)
)
(setq buffer-read-only t)
(goto-char (point-min))
)
))
(defun thesaurus-lookup-word (word)
(dict-lookup-word word nil))
(defun dictionary-lookup-word (word)
(dict-lookup-word word t))
(defun thesaurus-lookup-word-in-text (exact)
"Like `dict-lookup-word', but uses the word under the cursor."
(interactive "P")
(thesaurus-lookup-word (dict-extract-word)))
(defun dictionary-lookup-word-in-text (exact)
"Like `dict-lookup-word', but uses the word under the cursor."
(interactive "P")
(dictionary-lookup-word (dict-extract-word)))
This code assumes that you have the command dict available.
You can set a keyboard shortcut as follows:
(global-set-key (quote [f7]) 'thesaurus-lookup-word-in-text) (global-set-key (quote [f8]) 'dictionary-lookup-word-in-text)
Pressing the F7 and F8 keys will then look up the word under the cursor in the thesaurus or dictionary, respectively.
PoC‖GTFO
Twitter
LinkedIn
GitHub
XTerm