synonyms

Homepage: https://www.emacswiki.org/emacs/download/synonyms.el

Author: Drew Adams

Updated:

Summary

Look up synonyms for a word or phrase in a thesaurus

Commentary

Look up synonyms for a word or phrase in a thesaurus.


 Getting Started
 ---------------

 To use library Synonyms, you will need the Moby Thesaurus II file,
 `mthesaur.txt', available here:

   https://archive.org/details/mobythesauruslis03202gut

 Put this in your initialization file (~/.emacs):

   ;; The file names are absolute, not relative, locations
   ;;     - e.g. /foobar/mthesaur.txt.cache, not mthesaur.txt.cache
   (setq synonyms-file        )
   (setq synonyms-cache-file  )
   (require 'synonyms)

 As an alternative to the first two lines, you can use Customize to
 set `synonyms-file' and `synonyms-cache-file' persistently.  The
 second of these files is created by this library, to serve as a
 synonym cache for completion.

 The main command is `synonyms'.  It prompts you for a word or
 phrase to look up in the thesaurus.  The synonyms found are then
 displayed in buffer *Synonyms*.  For example, `M-x synonyms RET
 democracy' displays synonyms for `democracy'.

 If you do not define `synonyms-file' and `synonyms-cache-file'
 prior to using command `synonyms', that command will prompt you to
 define them.  If you want to use the same values during subsequent
 Emacs sessions, then you should use `M-x customize-option' to save
 those newly defined values.


 Some Definitions
 ----------------

 The thesaurus is divided into "entries", which are like glossary
 entries: each entry is followed by associated words and phrases,
 which, for lack of a better word, I refer to as "synonyms".  For
 example, `democracy' is an entry, and it is followed by its
 synonyms.  Some synonyms are not also entries.  For example,
 `patriarchy' is in the thesaurus as a synonym but not as an entry.

 Note: What I call "synonyms" here are not necessarily synonyms, in
 the sense of having the same or even similar meanings.  They are
 simply terms collected together with the same thesaurus entry
 because they are related in some way - the grouping is what
 defines their relation.

 In Moby Thesaurus II, the meanings of synonyms in the same group
 do have something in common, but this might be simply the fact
 that they are terms of a similar kind.  For example, the
 "synonyms" following the `democracy' thesaurus entry are words
 such as `dictatorship' and `autocracy'.  These are different forms
 of the same general thing: government - they are certainly not
 synonymous with each other or with the entry `democracy'.


 Searching the Thesaurus
 -----------------------

 The default input value for command `synonyms' is the word under
 the cursor.  Alternatively, if a region is active and you are in
 Transient Mark mode (recommended), then it is the text in the
 region (selection).

 Your input is actually treated as a regular expression (regexp),
 so you can also input patterns like `for.*ion', which will match
 thesaurus entries `formation', `formulation', `fornication',
 `fortification', and `forward motion'.  Note that the last of
 these is a phrase rather than a single word.

 Using a regexp as input is a powerful way to search, but be aware
 that it can be costly in CPU time and computer memory if the
 regexp is not appropriate.  The regexp `.*' will, for example,
 likely use up available memory before being able to return the
 entire thesaurus (it's very large).  You can always use `C-g' to
 interrupt a thesaurus search if you mistakenly use an inefficient
 regexp.


 Using a Prefix Argument To Do More
 ----------------------------------

 You can use a prefix argument to modify searching and the
 presentation of search results, as follows:

   `C-u'     - Search for additional synonyms, in two senses:

               1) Return also synonyms that are matched partially
                  by the input.

               2) Search the entire thesaurus for input matches,
                  even if the input matches a thesaurus entry.

   `M--'     - Append the search results to any previous search
               results, in buffer *Synonyms*.  (Normally, the new
               results replace any previous results.)

   `C-u C-u' - `C-u' plus `M--': Search more and append results.

 If you find yourself often using a particular prefix argument (for
 example, to append results), then you might want to instead change
 the default behavior to reflect this preference.  Options
 `synonyms-match-more-flag' and `synonyms-append-result-flag'
 correspond to using `C-u' and `M--', respectively.  In fact, a
 prefix argument simply toggles the value of the corresponding
 option for the duration of the command.  So, for example, if
 `synonyms-append-result-flag' is t and you use `M--', then results
 will not be appended.

 When partially matching input (`C-u', sense #1), complete synonyms
 are matched against your input.  This means that you generally
 need not add a preceding or trailing `.*' to try to match a
 complete synonym.  For example, input `format' will match the
 complete synonyms `conformation', `efformation', `format',
 `formation', `formative', `formational', `information',
 `informative', `informational', `malformation', `deformation',
 `reformation', `transformation', `reformatory', and so on - there
 is no need to input `.*format.*' to match the same synonyms.

 To better understand the meaning of #2 above for `C-u' (to
 continue the search even if your input matches an entry), try, for
 example, `C-u M-x synonyms RET widespread'.  You'll see not only
 the main synonyms listed for `widespread' as an entry, but also
 lots of different meanings of `widespread', judging by the entries
 for which it is listed as a synonym:

   `accepted', `ample', `broad', `broadcast', `capacious',
   `catholic', `commodious', `commonness', `conventional',
   `currency', `current', `customary', `deep', `deltoid',
   `diffuse', `discrete', `dispersed', `disseminated',
   `dissipated', `distributed', `epidemic', `established',
   `everyday', `expansive', `extended', `extensive', `familiar',
   `fan shaped', `far flung', `far reaching', `flaring', `full',
   `general', `indiscriminate', `infinite', `large scale',
   `liberal', `normal', `normality', `open', `ordinary',
   `outstretched', `pervasive', `popular', `prescribed',
   `prescriptive', `prevailing', `prevalence', `prevalent',
   `public', `rampant', `received', `regnant', `regular',
   `regulation', `reign', `rife', `roomy', `ruling', `run',
   `scattered', `set', spacious`', `sparse', `splay', `sporadic',
   `sprawling', `spread', `standard', `stock', `straggling',
   `stretched out', `sweeping', `time-honored', `traditional',
   `universal', `usual', `vast', `voluminous', `wholesale', `wide
   open', `wide', and `wonted'.

 These are just the entries! Each of these is of course followed by
 its own synonyms - perhaps 100 or 300, including `widespread'.

 This list of entries is not the same list as the synonyms for
 entry `widespread'.  There are words and phrases here that are not
 in the latter list, and vice versa.  For example, the former (but
 not the latter) list includes `full'; the latter (but not the
 former) list includes `wide-reaching'.

 The latter are the words most closely related to `widespread'.
 The list above are the other thesaurus entries (corresponding to
 main categories) to which `widespread' is most closely related.
 Looking at all of the synonym groups in which `widespread' appears
 can tell you additional information about its meanings - and it
 can provide additional synonyms for `widespread'.


 Using Completion with Synonyms
 ------------------------------

 You can complete words and phrases in the minibuffer, as input to
 command `synonyms'.  You can use library Synonyms together with
 library `Icicles to complete a partial word in a text buffer into a
 word or phrase in the thesaurus.  If you use both libraries then
 load Icicles after Synonyms.  For more information on Icicles, see
 `https://www.emacswiki.org/emacs/Icicles'.

 ** Minibuffer Input Completion **

 You can enter any text to match against thesaurus synonyms.  When
 you are prompted by command `synonyms' to enter this text, you can
 also use input completion to complete to a thesaurus synonym.
 That is, even though you can enter any text (including a regexp),
 completion will only complete to synonyms in the thesaurus.

 If you load library Icicles, then a more powerful version of
 command `synonyms' is used.  In particular, it lets you:

  - Use `S-TAB' during completion to see the list of all synonyms
    (thesaurus terms) that match your minibuffer input so far.

  - Use `next' (or repeated `S-TAB'), and `prior' (usually keys
    `Page Down' and `Page Up') during completion to cycle through
    the completion candidates (synonyms) that match your input.

  - Use `C-next' and `C-prior' during completion to display the
    synonyms of the current completion candidate.

 ** Completing Buffer Text Using the Thesaurus **

 Icicles also provides two commands for using completion to insert
 thesaurus entries in a buffer:

  - `icicle-complete-thesaurus-entry' completes a word in a text
    buffer to any word or phrase in the thesaurus.  I bind it to
    `C-c /'.

  - `icicle-insert-thesaurus-entry' inserts thesaurus words and
    phrases in a text buffer.  It is a multi-command, which means
    that, within a single call to it, you can insert any number of
    thesaurus entries, in succession.  If you want to, you can
    write an entire book using a single call to
    `icicle-insert-thesaurus-entry'!


 Browsing the Thesaurus
 ----------------------

 Besides using command `synonyms' to search for synonyms, you can
 use Synonyms to browse the thesaurus.  This is really just the
 same thing, but key and mouse bindings are provided in buffer
 *Synonyms*, so you need not input anything - just point and click
 the hyperlinks.  Buffer *Synonyms* is in Synonyms major mode,
 which provides a few additional features.

 You can still choose to search for additional synonyms or append
 search results, without bothering with a prefix argument, by using
 modifier keys (Control, Meta) with a mouse click.

 Another way of browsing is to revisit previous search-result
 pages.  You can do this using commands `synonyms-history-backward'
 and `synonyms-history-forward'.  In buffer *Synonyms*, these are
 bound to the following key sequences, for convenience:

   `l', `p', `mouse-4' - `synonyms-history-backward'
   `r', `n', `mouse-5' - `synonyms-history-forward'

 The `l' and `r' bindings correspond to the history bindings in
 Info.  The `p' and `n' bindings stand for "previous" and "next".
 The bindings to additional mouse buttons correspond to typical
 bindings for Back and Forward in Web browsers.

 In addition to these bindings, the same history commands can be
 accessed by clicking links [Back] and [Forward] with `mouse-2'.

 If you have previously used the append option (via, for example,
 `M-mouse2'), so that there are multiple search results in buffer
 *Synonyms*, then using a history command simply takes you to the
 preceding (for [Back]) or following (for [Forward]) result in the
 buffer, measured from the current cursor position.  Depending on
 the cursor position, this might be different from the previous or
 next search made previously.

 This is for convenience, but it is also more efficient in the case
 of a regexp search that takes a long time.  Except for this
 special treatment of appended results, whenever you navigate the
 search-results history you are actually searching again for a
 synonym you sought previously.  The case of appended results is
 analogous to accessing a Web browser cache when navigating the
 history.

 You can of course use modifier keys (Control, Meta) while you
 click links [Back] and [Forward], to impose their usual behavior:
 search for additional synonyms or append search results, or both.

 Finally, some people prefer menus, so there is a Synonyms menu-bar
 menu when you are in Synonyms mode, complete with all of the
 functionalities described above.

 For more information on the browsing possibilities in buffer
 *Synonyms*, use `?' in Synonyms mode.


 Dictionary Definitions, Antonyms, etc.
 --------------------------------------

 Synonyms works with a large but simple database of groups of words
 and phrases that are synonyms of each other.  This database does
 not provide definitions of words or phrases; it simply groups
 them.  Command `synonym-definition' (aka `dictionary-definition')
 lets you look up a word or phrase (or a regexp) using one or more
 dictionaries on the Web.  That is usually the best source for this
 kind of information, but you obviously need an Internet connection
 to use this command.

 Options (variables) `synonyms-dictionary-url' and
 `synonyms-dictionary-alternate-url' are URLs you can set to point
 to the dictionaries of your choice.  The default value of
 `synonyms-dictionary-alternate-url' looks up the search term in
 multiple dictionaries, and it lets you use wildcards.  Use `C-h v
 synonyms-dictionary-alternate-url' for more information.  The
 default value of `synonyms-dictionary-url' usually provides a
 quicker answer.  Both of these URLs also give you access to
 additional information about the search term (antonyms, etymology,
 even pronunciation).

 In buffer *Synonyms*, you can simply hit `d' followed by `RET' or
 `mouse-2' to look up a term that is in the buffer.  Just as for
 looking up a synonym by clicking `mouse-2', if you select text
 (region), then that text is looked up.


 A Cache File of Synonyms
 ------------------------

 The very first time you use Synonyms, a large list of synonyms
 will be compiled and written to a cache file.  This is slow - it
 takes 2-3 minutes - but it is only a one-time cost.  From then on,
 whenever you first use Synonyms during an Emacs session, the cache
 file will be read (quickly), to create the list of synonyms that
 are used for minibuffer completion.


 Using Other Thesauri, Dictionaries, and so on - CSV data
 --------------------------------------------------------

 There is nothing in library Synonyms that ties it to the Moby
 Thesaurus II thesaurus.  All of its functionality will work with
 any file of comma-separated values.  Each line of such a file is
 interpreted as a synonym group, as understood here, and the first
 word or phrase on each line is interpreted as a thesaurus entry,
 as understood here.  This means only that search results are
 organized into sections with entry headers.

 If, for example, you had a CSV file of personal contacts, where
 the first term in each line was a last name or a company name,
 then you could use library Synonyms to query it, producing the
 same kind of output as for the thesaurus.

 One thing to keep in mind if you try to use library Synonyms with
 a different CSV file is that there are several different CSV-file
 syntaxes.  The one that Synonyms is built to use is a simple one,
 with no quote marks around entries and no embedded quote marks
 within entries.

 Similarly, there is nothing here that limits the functionality to
 English.  If you had a thesaurus in another language, it should
 work as well.

 Currently, Synonyms works with a single raw synonyms file
 (thesaurus) and a corresponding single cache file (for
 completion).  However, it would be easy to extend the
 functionality to use multiple thesauri or, in general, multiple
 CSV files.  Suggestions of requirements (e.g. ways to select a
 thesaurus for particular passages of text) are welcome.



 Things Defined Here
 -------------------

 Faces defined here -

   `synonyms-heading', `synonyms-search-text',
   `synonyms-mouse-face'.


 User options (variables) defined here -

   `synonyms-append-result-flag', `synonyms-cache-file',
   `synonyms-file', `synonyms-fill-column',
   `synonyms-match-more-flag', `synonyms-mode-hook',
   `synonyms-use-cygwin-flag'.

 Commands defined here -

   `dictionary-definition', `synonyms', `synonyms-append-result',
   `synonyms-append-result-no-read', `synonyms-definition',
   `synonyms-definition-mouse', `synonyms-definition-no-read',
   `synonyms-ensure-synonyms-read-from-cache',
   `synonyms-history-backward', `synonyms-history-forward',
   `synonyms-make-obarray', `synonyms-match-more',
   `synonyms-match-more-no-read',
   `synonyms-match-more+append-result',
   `synonyms-match-more+append-result-no-read', `synonyms-mode',
   `synonyms-mouse', `synonyms-mouse-append-result',
   `synonyms-mouse-match-more',
   `synonyms-mouse-match-more+append-result', `synonyms-no-read',
   `synonyms-write-synonyms-to-cache'.

 Non-interactive functions defined here -

   `synonyms-action', `synonyms-add-history-links',
   `synonyms-default-regexp', `synonyms-define-cache-file',
   `synonyms-define-synonyms-file', `synonyms-file-readable-p',
   `synonyms-file-writable-p', `synonyms-format-entries',
   `synonyms-format-entry', `synonyms-format-finish',
   `synonyms-format-synonyms',
   `synonyms-hack-backslashes-if-cygwin', `synonyms-lookup',
   `synonyms-nearest-word', `synonyms-p',
   `synonyms-search-entries', `synonyms-search-synonyms',
   `synonyms-show-synonyms'.

 Internal variables defined here -

   `synonyms-history', `synonyms-history-forward',
   `synonyms-list-for-obarray', `synonyms-mode-map',
   `synonyms-obarray', `synonyms-search-text'.

 Key bindings made here - see `synonyms-mode'.  All key bindings
 are local to Synonyms mode; no global bindings are made here.



 Acknowledgements
 ----------------

 The basic functionality provided here was derived from library
 `mthesaur.el', by Tad Ashlock .  That
 library, in turn, was inspired by library `thesaurus.el', by Ray
 Nickson.  Thanks also to those who sent helpful bug reports.


 Note on MS Windows Emacs 20 and Cygwin `grep'
 ---------------------------------------------

 There is apparently a bug in the Emacs (at least versions 20-22) C
 code that implements function `call-process' on MS Windows.  When
 using native Windows Emacs with Cygwin commands, such as `grep',
 the C code removes a level of backslashes in some cases, so string
 arguments supplied to `call-process' need to have twice as many
 backslashes as they should need in those cases.  It is for this
 reason that option `synonyms-use-cygwin-flag' is supplied here.
 When that option is non-nil, backslashes in regexps are hacked to
 do the right thing.  (In Emacs 20, this means doubling the
 backslashes; in Emacs 21-22, this means doubling them unless there
 are spaces in the search string.)


 Maybe To Do?
 ------------

 1. It would be ideal to have not only synonym information but also
    definitions, antonyms, more general and more specific terms,
    filtering by part of speech (verb vs adjective etc.), and so
    on.  A good example of what I'd really like to have is provided
    by the free Windows program WordWeb (available here:
    https://wordweb.info/).  Combining that functionality with
    Icicles completion features would provide a great tool, IMO.

    `synonyms-definition*' goes a long way toward providing this,
    and perhaps it is the best way to go, since there is so much
    more definitional info on the Web.

Dependencies

Reverse dependencies