Take the 2-minute tour ×
Unix & Linux Stack Exchange is a question and answer site for users of Linux, FreeBSD and other Un*x-like operating systems.. It's 100% free, no registration required.

From hunspell man page:

...
    When in the -a mode, hunspell will also accept lines  of  single
    words  prefixed  with  any of '*', '&', '@', '+', '-', '~', '#',
    '!', '%', '`', or '^'.  A line starting with '*' tells  hunspell
    to  insert the word into the user's dictionary (similar to the I
    command).
...

I tried something like: echo "* my_word" | hunspell -a but the word is not in my dictionary as parsing sample file again shows it as misspelled word

How does this work, how can I add custom word?
Or with Aspell, or any "common" program that writes to compatible dictionaries read by Hunspell/Aspell?

share|improve this question
add comment

2 Answers 2

up vote 1 down vote accepted

I think instead of (similar to the I command) it should be (similar to the A command):

A

Accept the word for the rest of this hunspell session. 

Let's check the man page again:

The -a option is intended to be used from other programs through a pipe.
In this mode, hunspell prints a one-line version identification message,
and then begins reading lines of input.

So, when in -a mode, hunspell session ends after reading and processing the last line of input. Furthermore,

When in the -a mode, hunspell will also accept lines of single words prefixed
with any of '*', '&', '@', '+', '-', '~', '#', '!', '%', ''', or '^'. A line
starting with '*' tells hunspell to insert the word into the user's dictionary
(similar to the I command)[........] A line prefixed with '#' will cause the
personal dictionary to be saved.

Prefixing a single word line with * (note there should be no space between word and prefix) will add that word to the user's dictionary but only for the current hunspell session, since, as per the man page, only a line prefixed with # will cause the personal dictionary to be saved (the on-disk file, that is). Hence running

echo "*goosfraba" | hunspell -a

does absolutely nothing. hunspell adds goosfraba to the dictionary for this session then exits (no other lines to process). You have to add a second line prefixed with # in order to save the recently added word(s):

echo -e "*goosfraba\n#" | hunspell -a

Let's see:

::spell-checking goosfraba:

echo -e "goosfraba" | hunspell -a
@(#) International Ispell Version 3.2.06 (but really Hunspell 1.3.2)
& goosfraba 1 0: goofball

& = Word is not in the dictionary, there is one near miss: goofball.

::adding goosfraba to the dictionary then spell-checking during the same hunspell session (two lines):

echo -e "*goosfraba\ngoosfraba" | hunspell -a
@(#) International Ispell Version 3.2.06 (but really Hunspell 1.3.2)
*

* = Word is in the dictionary.

::spell-checking goosfraba again (new hunspell session):

echo -e "goosfraba" | hunspell -a
@(#) International Ispell Version 3.2.06 (but really Hunspell 1.3.2)
& goosfraba 1 0: goofball

& = Again, word is not in the dictionary (nothing was saved during the previous session)

::adding goosfraba to the dictionary and saving during the same hunspell session (two lines):

echo -e "*goosfraba\n#" | hunspell -a
@(#) International Ispell Version 3.2.06 (but really Hunspell 1.3.2)

::spell-checking goosfraba again (new hunspell session):

echo "goosfraba" | hunspell -a
@(#) International Ispell Version 3.2.06 (but really Hunspell 1.3.2)
*

* = Word is in the dictionary.

share|improve this answer
add comment

I found out that easiest solution is to use Aspell and create custom file in home folder, named .aspell.lang.pws, with contents like:

personal_ws-1.1 en 0
my_word

for language "en", which seems like great way to share "portable dictionary", BTW

share|improve this answer
add comment

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.