1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
|
Emacs package for talking to a dictionary server
Introduction
In December 1998 I installed the dictd server, which can be used to
access several dictionaries using a simple protocol as defined in
RFC 2229 (Text Version).
As my primary working environment is XEmacs 21, I decided to write
an Emacs-Lisp package for accessing this dictionary server. The older
webster.el didn't worked with the newer protocol. After starting the
implementation I was pointed to an already existing implementation,
but this was basically a wrapper to the dict client program and didn't
have all the features I wanted and have now been implemented in this
dictionary client.
If you didn't received this file from its original location you can
visit it at http://www.myrkr.in-berlin.de/dictionary.html
Features
The dictionary mode provides the following features:
* looking up word definitions in all dictionaries
* search for matching word
* words/phrases marked with { } in the dictionary definitions are
recognized as hyper links and browseable
* easy selection of dictionary and search strategy
* backward moving through the visited definitions
* in the latest versions of GNU Emacs and XEmacs you get support for
popup menus
* in GNU Emacs 21 you can lookup words by simply pointing the mouse
cursor to them (tool-tips)
Here are three sample screenshot showing the dictionary mode in action
within an Emacs 21 buffer:
This buffer shows the result of searching the definition for
distinguished. A lot of entries have been found, including translation
into german and russian language. The blue words are hyper-links that
points to the definitions of these words. The hyper-link with the
green background will be activated when pressing the middle mouse
button.
This buffer shows the result of looking for matching words to
possible. You can now select one of the found entries or ignore the
search by pressing any mouse button outside the menu.
This screenshot shows the tool-tips supported in GNU Emacs 21.
Whenever the mouse cursor stands still for a certain time (about one
second) the word at cursor is looked up in the configured dictionary.
This example shows the german translation for originally, in this
context not the right one, urspr�nglich would be better.
Download and Requirements
I have tested the package with a native GNU Emacs 19.34.1 and XEmacs
20.4. I implemented some hacks to work with the very very old
custom.el file in the above GNU Emacs. Please update to the current
version whenever possible. XEmacs 21 and Emacs 20 as well as Emacs 21
have been tested too.
* Current version (1.7.1) of this package
* Version 1.5.1 of this package
* Version 1.4.1 of this package
* Version 1.3.3 of this package
* Version 1.2.1 of this package
* Version 1.1 of this package
* Initial version (1.0) of this package
I you want to know more about the differences please look at the
ChangeLog.
You will need the custom package to use this package. For full support
please check if your system knows the defface function, if not please
download the current version.
For best usability I suggest using the mouse, but it provide good
keyboard support as well.
Unpacking the archive
The package is distributed as tar.gz file. You unpack it using:
gzip -dc dictionary-1.7.1.tar.gz | tar xf -
or
tar -xzf dictionary-1.7.1.tar.gz
(with the version number subject to change) depending on whether you
are using GNU tar which support the z flag for compression. After
unpacking the archive a directory dictionary-1.7.1 has been created
containing the necessary files.
Installation
Debian
If you are using a current Debian distribution (one that support the
emacsen package system) and have the dpkg-dev installed (for running
dpkg-buildpackage) you can use the supplied debian support.
make debian
This will create a package named dictionary-1.7.1-1_i386.deb or
similiar in the parent directory of dictionary-1.7.1. You can now
install this package as root, it will automatically byte-compile
itself for all installed emacs versions and provide a startup-file
which autoloads this package. In the configuration example given below
you can omit the autoload lines.
If you no longer want to use this package, you can remove it using:
dpkg -r dictionary
XEmacs 21
The XEmacs version 21 support so called xemacs packages. These
packages are also supported, you can create them using:
make EMACS=xemacs package
The created package will be named dictionary-1.5-pkg.tar.gz and stored
within the current directory. If you don't want to install this
package manually, you can use the following command, provided you have
sufficient privileges (if unsure, login as super user):
make EMACS=xemacs package-install
If you have more than one XEmacs versions installed make sure the
EMACS argument to make points to the current binary.
Manually
Byte compiling
For faster loading and executing of the package I strongly suggest
that you byte-compile the files. Emacs user please call make within
the create subdirectory, XEmacs user has to specify there favorite
tool using make EMACS=xemacs. If your custom package is not up-to-date
expect some warnings about free variables.
Installing the files
To install the files into your GNU Emacs/XEmacs installation please
copy the *.elc files into a directory being in your load-path
variable. On most installations /usr/lib/emacs/site-lisp or
/usr/local/lib/emacs/site-lisp are suitable locations.
Loading the package
You have to insert some instructions into your .emacs file to load the
dictionary package whenever needed. If you installed this dictionary
package as Debian package or XEmacs package you don't need the
autoloads, they are already supplied. Other users I suggest using the
following lines:
(autoload 'dictionary-search "dictionary"
"Ask for a word and search it in all dictionaries" t)
(autoload 'dictionary-match-words "dictionary"
"Ask for a word and search all matching words in the dictionaries" t)
(autoload 'dictionary-lookup-definition "dictionary"
"Unconditionally lookup the word at point." t)
(autoload 'dictionary "dictionary"
"Create a new dictionary buffer" t)
(autoload 'dictionary-mouse-popup-matching-words "dictionary"
"Display entries matching the word at the cursor" t)
(autoload 'dictionary-popup-matching-words "dictionary"
"Display entries matching the word at the point" t)
(autoload 'dictionary-tooltip-mode "dictionary"
"Display tooltips for the current word" t)
(autoload 'global-dictionary-tooltip-mode "dictionary"
"Enable/disable dictionary-tooltip-mode for all buffers" t)
In addition, some key bindings for faster access can be useful. I use
the following ones in my installation:
;; key bindings
(global-set-key "\C-cs" 'dictionary-search)
(global-set-key "\C-cm" 'dictionary-match-words)
I will describe the user-callable functions and the key bindings
within dictionary mode later in this document.
Using the package
Glossary
Before I start describing how you use this package, please let me
explain some words as they are used in this text:
word
This is a word you want to lookup in the dictionaries verbatim.
pattern
This is used for looking up matching words. A pattern can be as
simple as a single word but also as complex as a POSIX regular
expression. The meaning of a pattern depends on the strategy
used for matching words.
dictionary
The server can handle several distinct dictionaries. You can
select specific dictionaries or ask the server to search in all
dictionaries or until matches or definitions are found. To
search in all dictionaries the special name * is used, the
special name ! requests to search until definitions are found.
For more details please take a look at the standards
definition.
definition
A dictionary entry that can be the result of a word search.
search
The operation of looking up a word in the dictionaries.
match
The operation of comparing a pattern to all words in the
dictionary.
strategy
While matching in a dictionary serveral methods for comparing
words can be used. These methods are named strategies and
include exact match, regular expression match, and soundex
match. The available strategies depends on the server, but a
special name . can be used to denote a server-default strategy.
Invoking
There are five different (documented) ways of invoking the package. By
calling dictionary you can start a new dictionary buffer waiting for
your commands. If you want to create multiple buffers for searching
the dictionary, you can run this function multiple times.
dictionary-search will ask for a word a search defaulting to the word
at point and present all definitions found.
If you want to lookup the word near the point without further
confirmation use the dictionary-lookup-definition function. The last
one is dictionary-match-words which will ask for a pattern and display
all matching words.
You can also display a popup menu showing the definition for a certain
word. You just place the mouse cursor above the word you want to
lookup and press the assigned mouse button. The sample definition in
section Customizing binds this command to the right mouse button
in GNU Emacs and to ctrl + right mouse button in XEmacs. For mouse
invocation use dictionary-mouse-popup-matching-words, for assigning to
a key combination use the dictionary-popup-matching-words function.
The latter function search for the word located at point.
I have tested this feature in Emacs 21 and XEmacs 21. Emacs 20 do not
support this kind of popup menus (you will get an error message if you
try anyway), XEmacs 20 or prior has not been tested yet.
A new feature of version 1.5 is the tool-tip support. This will only
work in GNU Emacs 21, XEmacs uses a different mechanism (called
balloon help) which can not easily be adapted. Please note, the
tool-tip mode may slow down your Emacs, especially if you prefer using
the mouse.
First you have to define the dictionary for looking up words to
display in the tool-tip window. You could use * to search in all
dictionaries, however tool-tip window should be rather small. I use an
english to german dictionary for myself, which is called eng-deu (you
can find out the name if you look into contents of the square brackets
within the dictionary buffer; for example, the line From WordNet (r)
1.6[wn]: tells you the name of this dictionary is wn).
(setq dictionary-tooltip-dictionary "eng-deu")
Next you have to decide if you want tool-tip support in the current
buffer only or in all buffers. For the first use the
dictionary-tooltip-mode command, for the latter
global-dictionary-tooltip-mode.
;; choose on of the following lines
(global-dictionary-tooltip-mode 1)
(dictionary-tooltip-mode 1)
To turn the tool-tip support off, call these functions with a numeric
argument of 0.
If you get an error message that the server could not be contacted,
please check the values of the variables dictionary-server and
dictionary-port. The port should usually be 2628, the default server
as distributed is dict.org.
You can have multiple independent dictionary buffer. If the above
functions are called from within dictionary mode they reuse the
existing buffer. Otherwise they create a new buffer.
Quitting
Once a dictionary buffer is created you can close it by simply typing
q (dictionary-close) or pressing the [Quit] button on the top.
Another, more cruel, way is to use the kill-buffer function which is
handled correctly.
The dictionary mode save the window configuration on startup and try
to reestablish it when the buffer is being closed.
Using the buffer
After a successful search the buffer is divided into two sections. The
first one is the button area at the top, the other one is the text
buffer displaying the result. By pressing the buttons you can select
some functions that are otherwise inaccessible with the mouse.
In the text are each definition is introduced by the name of the
database that contains it. In the default configuration this text is
in italic face. The definition itself can contains hyper links that
are marked using blue foreground and both sensitive to clicking with
the mouse and pressing return while being within the link.
Each link selection or otherwise selected new search or match will
create a new buffer showing the new result. You can use the [Back]
button on the top or the l key (dictionary-previous) to return the
previous buffer contents.
Pressing Meta while clicking on a link to start the search will extent
the search to all dictionaries (dictionary-default-dictionary to be
more precisely).
If you prefer using the keyboard it can be very frustrating to use the
cursor key to position the point before pressing return to visit the
link is possible. Therefore, I defined the Tab and the n keys to jump
to the next link (dictionary-next-link) and the Shift-Tab and p keys
to jump to the previous one (dictionary-prev-link). Please note that
the Shift-Tab key may be the same as the Tab key when running Emacs
within a tty (in contrast to a windowing system like X11). There is no
way for a application to differ Shift-Tab from Tab in this case,
please use the p key to visit the previous link if you run into this
problem.
Searching
The search operation can be invoked by using the [Search Definition]
button on the top or by pressing s (dictionary-search). It will ask
for a word to search and will default to the word near point. This
allows you to edit the word before starting the search. The found
definitions will be displayed inside the buffer. If no entries could
not be found an error message will be displayed.
If you want to quickly lookup the word at the point without further
confirmation use the d key (dictionary-lookup-definition). Except for
not allowing to edit the search word before asking the server it
behaves the same way as the normal search operation.
Matching
The match operation is started upon pressing the [Matching Words]
button or pressing the m key (dictionary-match-words). It will use the
current database and the current strategy and list matching words for
the one you entered at the prompt. The output is grouped by dictionary
and each found word can be looked up by clicking the word or pressing
return. Please note that in some cases not only the requested
definition but some similiar definitions are shown. This behaviour is
caused by the keyword lookup in the server. E.g., when you ask for the
definition of from in Webster you will presented with the definitions
of from and Thrust, the latter includes the phrase To thrust away or
from which causes the display.
Selecting dictionary
By default all dictionaries (special name is "*") are searched for a
word definition or for matching words. You can select a specific word
for both modi by pressing the [Select Default Dictionary] button or
the D key (dictionary-select-dictionary). You will get a message about
successful selection.
If you hold Meta while selecting a dictionary you will get more
information displayed instead.
If you want to restore the original behaviour select All dictionaries.
The first matching dictionary is a special dictionary (named "!")
where the search will stop at the first dictionary with found
definitions or matching words.
Selection search strategy
While searching matching words to the pattern you entered the server
can use different comparison algorithm (aka search strategy). Every
server provides a default strategy which is internally known as ".".
After pressing the [Select Match Strategy] button or pressing the M
key (dictionary-select-strategy) all available strategies on this
server are presented. As in the "select dictionary" mode you can
select it by pressing the mouse button 2 or typing return.
Going backward
If you visited a link and want to go back to the previous definition,
simply choose the [Back] button or press the l key
(dictionary-previous). The buffer contents and cursor position will be
restored. If you intented to go beyond the first definition an error
message will appear.
Getting Help
If you are totally confused what all the keys do in your dictionary
buffer some help will displayed by pressing the h key. Within XEmacs
you can exit the help screen by pressing q, in GNU Emacs you have to
switch to the help window using C-x o (other-window) first. This help
buffer will display the default key bindings only as I had problems
with displaying multiple bindings for a single function (e.g., both
button2 and return select a link). Any suggestions are welcome.
Proxy support
Starting from version 1.6 (not officially released) the dictionary
client supports connections via HTTP proxies. It uses the CONNECT
method which is usually used to relay SSL connections through a proxy.
On most proxies the dictionary port (2628) must be configured to be
allowed to connect through the proxy server. You will get an error
message like:
HTTP/1.0 500 WWWOFFLE Server Error
if this is not the case.
To enable proxy support, set the variable dictionary-use-http-proxy to
true. This can be done through the customize interface, there is a
sub-group named Dictionary Proxy of the Dictionary group. Other
settings you can modify are the name of the proxy server
(dictionary-proxy-server, Default proxy) and the port of the proxy
server (dictionary-proxy-port, Default 3128).
Support for different encodings in dictionaries
Although the standard definition specifies UTF-8 as character encoding
to be used for the protocol there exists dictionaries encoding in
other encodings like koi8-r for the russian language. To support these
dictionaries there exists starting from version 1.7 a variable named
dictionary-coding-systems-for-dictionaries. This is a list of cons
cell containing the dictionary name (as string) and the coding system
to use (as symbol). For modifying the variable the customize interface
should be used, it helps you selecting a valid charset and keeping the
lisp structure intact.
If a dictionary is not specified in this list its encoding defaults to
UTF-8.
The default setting
'( ("mueller" . koi8-r))
specifies that the koi8-r encoding should be used for the
english-russian dictionary internally called mueller. The internal
dictionary name can be found in brackets within the dictionaries
output buffer after the long dictionary name (for example, the output
From WordNet (r) 1.6[wn] specifies the internal name of the Wordnet
dictionary being wn.
Customizing
If you have an sufficient recent custom version installed (e.g., the
one provided in XEmacs 20.4) you can use the customize-group with the
dictionary group to customize this package. For using the customize
buffer please refer to its online help.
Of course you can set all the variables and hooks you want in the
startup file. Here is a little example that I use for selecting the
server on my local machine and for binding some function to the
user-reserved keys starting from C-c a to C-c z. It also shows how to
invoke popup menus (using the right button in GNU Emacs or ctrl+right
button in XEmacs) and installs the global tooltip-mode.
(global-set-key "\C-cs" 'dictionary-search)
(global-set-key "\C-cm" 'dictionary-match-words)
(setq dictionary-server "localhost")
;; Popup menu for GNU Emacs 21, and XEmacs 21
(if (boundp 'running-xemacs)
(global-set-key [(control button3)] 'dictionary-mouse-popup-matching-words)
(global-set-key [mouse-3] 'dictionary-mouse-popup-matching-words))
;; Tool-tip support for GNU Emacs 21
(setq dictionary-tooltip-dictionary "eng-deu")
(global-dictionary-tooltip-mode 1)
Thanks
I want to thank Sam Steingold, Baoqiu Cui, Bruce Ravel, Pavel Jan�k,
Sergei Pokrovsky, Jeff Mincy, Serge Boiko, Enrico Scholz, Reuben
Thomas, Rui Zhu, Eugene Morozov, and Robert Pluim for their valuable
suggestions (including patches) for improving this package.
License
This file 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 2, or (at your option) any
later version.
This file 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
version 2 along with this package; see the file GPL.
ChangeLogs
Version 1.7 - 1.7.1
* fixed mule-detection in dictionary-coding-system (patch submitted
by Robert Pluim)
Version 1.5.1 - 1.7
* added HTTP proxy support (using the CONNECT method)
* added support for dictionaries not encoded in utf-8 (suggested by
Eugene Morozov)
Version 1.5 - 1.5.1
* fixed bug with non-working dictionary-previous (found by Rui Zhu)
* fixed key bindings in link.el
Version 1.4.1 - 1.5
* tool-tip support for GNU Emacs 21
Version 1.4 - 1.4.1
* changed recognition of utf-8 support (suggested by Enrico Scholz)
Version 1.3.3 - 1.4
* added popup menu for easier lookup of words
Version 1.3.2 - 1.3.3
* added support for XEmacs 21 packages to ease installation for
those users (suggested and reviewed by Enrico Scholz)
Version 1.3.1 - 1.3.2
* replaced set-text-properties by remove-text-properties and
add-text-properties because this function is not recommended
within XEmacs (reported by Serge Boiko)
Version 1.3 - 1.3.1
* small fix in dictionary function to check for availability of the
utf-8 encoding to prevent problems in certain xemacs versions
(reported by Jeff Mincy)
* added debian support (use dpkg-buildpackage to build a package)
Version 1.2.1 - 1.3
* Implemented an automatic detection for line ends CR/LF and LF. The
variable connection-broken-end-of-line is no longer necessary and
its value ignored.
* Added utf-8 support, the native character set of the dictionary
protocol. Using ISO-8859-1 (aka latin-1) was just a necessary
work-around.
Version 1.2 - 1.2.1
* Corrected dictionary command to draw the button bar.
* Improved documentation on dictionary to explicitly mention the use
of multiple buffers.
Version 1.1.1 - 1.2
* Some users reported problems with GNU Emacs 20.3 and MULE. So I
introduced a new variable connection-broken-end-of-line which
controls whether a line is ended by \n or by \r\n. You can use the
customize-group command on dictionary to change the setting of the
variable.
Version 1.1 - 1.1.1
* dictionary-search now allows editing the word to search for
* dictionary-search-word-near-point has been removed, you can use
dictionary-lookup-definition instead. It behaves like
dictionary-search but don't allow the search word to be edited (to
speed up looking up words).
Version 1.0 - 1.1
* all dictionary buffers now share a single connection
* added kill-all-local-variables
* use cons instead of list where possible
* dictionary-search now:
+ use word as point as default (implementing
dictionary-search-word-near-point too)
+ asks for dictionary with prefix argument
* added help-echo tags which are used in XEmacs
* mark has been replaced by generic marker
* added messages for communications to the dictionary server that
may take a while
* fixed bug with going to the previous link
* replaced word-at-point by current-word
_________________________________________________________________
E-Mail: dictionary@myrkr.in-berlin.de
Last modified: Sat Dec 15 14:34:54 CET 2001
|