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.