GithubHelp home page GithubHelp logo

openstenoproject / plover Goto Github PK

View Code? Open in Web Editor NEW
2.3K 74.0 276.0 25.05 MB

Open source stenotype engine

Home Page: http://opensteno.org/plover

License: GNU General Public License v2.0

Python 96.34% Shell 2.58% NSIS 0.52% C 0.10% Dockerfile 0.47%
stenography python plover hacktoberfest

plover's People

Contributors

antistic avatar balshetzer avatar benoit-pierre avatar boris-arkenaar avatar davidkitfriedman avatar dropdembits avatar elktro avatar fourshade avatar greghope667 avatar greygal avatar jeremy-w avatar lifton avatar mighele avatar mkrnr avatar morinted avatar nimble0 avatar nsmarkop avatar nvdaes avatar percidae avatar rbrewer123 avatar samlh avatar sammdot avatar shayneholmes avatar stanographer avatar stenoknight avatar talljoe avatar tckmn avatar timthelion avatar user202729 avatar willem3141 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

plover's Issues

Improved orthographic rules for suffixes

More sophisticated spelling rules are needed for when to delete vowels at the ends of words, when to double consonants at the ends of words, and when to change "y" to "i", before adding suffixes. It's not yet certain whether a set of reliable rules exist to determine this or whether it will require checking against an exhaustive whitelist of acceptable inflected forms. For example, Plover needs to know that adding "ed" to "deter" will result in "deterred", but adding "ed" to "meter" will result in "metered".

As an intermediate step to either hard-coding more reliable spelling rules or instituting a whitelist of correct spellings, a spelling stopgap stroke could be created, which copies the last translated stroke into a misspelling log (for later uploading to devs working on the orthography problem) and then retranslates the previous stroke without spelling rules applied. E.g., if "meterred" appears, user could invoke the stopgap command, which would retranslate it simply as root stroke + suffix, without invoking the consonant doubling rule.

Right-sided numbers don't translate

All strokes containing right-sided numbers (6, 7, 8, and 9) appear not to be recognized as numbers. They aren't glued to other numbers or letters, and contain extraneous hyphens; in the middle of the translation (e.g. 4-6 for 46) when a left-sided number precedes them, and at the beginning of the translation (e.g. -6 for 6 or -79 for 79) otherwise.

Exception: When the numbers appear in inversion (e.g., 67EU defined in dictionary as 76), they translate properly, without hyphens.

lockfile 0.7 fails on Ubuntu 9.10

Plover cannot be installed on Ubuntu 9.10: the lockfile module fails.
The most simple way to fix the problem for me was:

  1. remove this version of the python-lockfile with apt-get and then
  2. manually install version 0.9 of the lockfile.

Imported from Launchpad using lp2gh.

Ctrl, Alt and arrows keys cause character deletion

I am using the sidewinder keyboard with Plover 2.1.2 on Ubuntu Maverick. When I use Ctrl, Alt and arrow keys to change workspaces while using Plover, a character in the text which is currently focused is deleted, namely the one to the left of the cursor. I have tested this further and it appears that Ctrl, Alt, Super(windows key) and the arrow keys are acting like Backspace, except that 'Up' moves the cursor up and then backspaces, and 'Right' appears to delete to the right (though it may be moving right then backspacing, which would be more consistent).

This may be intended behaviour, but it may not be expected by beginners.


Imported from Launchpad using lp2gh.

Gemini PR Serial broken in versions of Ubuntu newer than 10.04 LTS

Plover 2.1.2 works properly in Ubuntu 10.04 LTS, but newer versions, including newer versions of Ubuntu 10 and Ubuntu 11.10 Classic, give the following error when Plover is run in the terminal and the "P" icon is pressed when protocol is set to Gemini PR:

Xlib.protocol.request.QueryExtension
Exception in thread Thread-1:
Traceback (most recent call last):
  File "/usr/lib/python2.7/threading.py", line 552, in __bootstrap_inner
    self.run()
  File "/usr/local/lib/python2.7/dist-packages/plover/machine/geminipr.py", line 38, in run
    raw = self.serial_port.read(BYTES_PER_STROKE)
  File "/usr/lib/python2.7/dist-packages/serial/serialposix.py", line 439, in read
    if self.fd is None: raise portNotOpenError
AttributeError: 'Serial' object has no attribute 'fd'

Sidewinder X4 protocol works without any problems in all Ubuntu versions tested, but Gemini PR protocol seems only to work on Ubuntu 10.04.

(Mirabai's note: I'd noticed this bug several months ago, when my new computer, which I'd updated to a newer version of Ubuntu 10, stopped working with the PR protocol, even though my old computer, running Ubuntu 10.04 LTS, worked fine with Plover 2.1.2 in both Gemini and Sidewinder modes. I thought that possibly I'd screwed up some port settings on my new computer while trying to get Bluetooth working with an unpairable steno machine, but I just uninstalled Wubi and reinstalled with Ubuntu 11.10 Classic on my new computer, and I got the same result; Sidewinder protocol works fine, but Gemini PR gives the same error as above.)


Imported from Launchpad using lp2gh.

Invalid dictionary crashes plover

I haven't confirmed this yet but it seems from email reports that invalid dictionaries cause plover to stop running.

I think this leads to a poor user experience. Plover should report the invalid dictionary in the UI rather than crashing or just exiting.


Imported from Launchpad using lp2gh.

"Install" issues - runs only as "root"

plover-2.2.0
debian-unstable

From the README file, installing on my debian-unstable system, with the suggested

sudo python setup.py install

will install plover in /usr/local/lib/python2.7/dist-packages/plover/ with root-only permissions, as

drwxr-s--- 6 root staff 4096 Jan 15 20:48 plover
-rw-r----- 1 root staff 1021 Jan 15 20:48 plover-2.2.0.egg-info

and so on, for the installed files.

Did you really want plover to run only as "root"? Is this a permissions error in the install?

There is no mention of having to run "sudo plover" in the README file. Running simply "plover" will produce an error message,

Traceback (most recent call last):
File "/usr/local/bin/plover", line 5, in
import plover.gui.main
ImportError: No module named plover.gui.main

which is not what the first-time user should see.

But then, maybe you don't want a non-root user mucking with the keyboard mapping? On the other hand, the keyboard is usually already dedicated to the current non-root user.

So, please update the README file, or set the proper install permissions to allow a non-root user to run plover.

Also, allowing for installation in a different directory would be polite. I prefer "/local/" instead of "/usr/local/". Some people might prefer to install in "/opt/". So, a command-line dialog, or an install-configuration-file would be nice.

Thanks. Very cool project!

James


Imported from Launchpad using lp2gh.

lockfile 0.7 fails on Ubuntu 9.10

Plover cannot be installed on Ubuntu 9.10: the lockfile module fails.
The most simple way to fix the problem for me was:

  1. remove this version of the python-lockfile with apt-get and then
  2. manually install version 0.9 of the lockfile.

"exiting" plover button and start-up messages

plover-2.2.0

Starting plover, the plover dialog box currently shows three buttons, "P", "Configure...", and "About...", and displays a message on the command line,

If Plover is quit using Ctrl-c, the /tmp/plover.lock file must be removed before Plover can be run again.

As it is now, the new user would be otherwise somewhat at a loss as to how to Exit plover, though the window-decoration Exit button - when there is one, which admittedly is almost always - seems to do the right thing. Still, that moment of uncertainty for the first-time user, wanting to exit plover, is simply not helpful and not necessary.

I would suggest adding a fourth, explicit, "Exit" button to the gui dialog box.

Similarly, when plover is started with an existing lock-file, there is a message on the command line,

Another instance of Plover is already running.

This is not enough information to resolve the problem, where that information is only provided if plover starts successfully, ironically, and there is no advantage to being "cryptic".

I would suggest expanding the command line message, to include the solution, supposing that the lock-file is "accidental". For instance:

Another instance of Plover may already be running. If no other instance of Plover is running, remove the stale lock file at "/tmp/plover.lock" and run Plover again.

Of course, a more elegant solution might be to not use a lock file at all, and instead, explicitly check the process table for an instance of python running plover, so that the user does not have to know anything about deleting lock-files - but still provide an informative command-line error message! For instance,

The process table shows another instance of Plover already running with PID . If another instance of Plover has crashed, remove that process with "kill ", and run Plover again.

James


Imported from Launchpad using lp2gh.

Direct errors to a log

Errors are currently directed to the void by xwidgets. Directing it to a file in a known location will help with bug reports.

Support stenoram machines

Ben Tarkeshian has posted notes of reverse engineering a stenoram machine to the point where it might be possible to add plover support.

vim: foldmethod=marker

SR3_REVENG_v0.0.2.txt

CHANGELOG:
v0.0.2
no need to clear stenoRAM beforehand;
init sequence has the "starting" stroke number for
"QUERY" / "NO STROKE" exchanges

DISCLAIMER: {{{

This I believe is the bare minimum for how to write a
"working" driver; there are still many gaps
and this is still very much a rough draft.

And the usual:

no guarantees any of this is correct

this document might actually be an ingenious insiduous plot
for convincing people to splurge on modern machines with
simpler protocols...I can neither confirm nor deny that...

"when life hands you lemons, get a receipt"

}}}

misc. notes: {{{

  • if Xscribe RAM is cleared between runs, 2 identical
    "runs" (same strokes, in same order) seem to produce the same data
    sent across the wire
  • stroke data is sent as either:
  • one byte (for some hard-coded "common phrases")
  • two bytes (again, perhaps chosen since these were "common" sounds)
  • three bytes

it seems, whenever a "one byte" stroke is keyed, it is always
sent as one byte; this means some combinations of keys for
the "2-byte" or "3-byte" stroke formats may not actually ever be
seen on the wire

in practice, it shouldn't really matter to a driver; it is unambiguous
how to decode 1, 2, and 3-byte strokes;

  • a single "stroke packet" can contain from 1-3 strokes
    (that is, up to 3 "really fast" strokes might
    get crammed in a single packet)
since strokes are sent as either 1, 2, or 3 bytes, this means
if we got 2 strokes in a packet, and those 2 strokes are in 
4 bytes, it might seem we don't know if we received:

    <1 byte stroke> <3 byte stroke>
or
    <3 byte stroke> <1 byte stroke>
or
    <2 byte stroke> <2 byte stroke>

but luckily, for each of the 1/2/3-byte formats, the first byte
will always be in a known range (see "STROKE DATA"), so one
can tell from the first byte which of the 3 formats the stroke is
encoded in
  • there are (at least) 3 different (what look to be)
    8-byte "checksums" --
(perhaps the same algorithm, but different parameters?)

the 2 "checksums" that seem to be "mandatory" to "understand" are:

- sent when the PC queries the Xscribe to see if there is a stroke

- sent when the Xscribe replies "no stroke"

both of those seem to only be generated from the "stroke number"
count, so it is sufficient (if incredibly ugly) to just log
each checksum/stroke number pair and build a table, and then
the driver knows what to expect/send; reverse engineering the
"checksum" format would still be ideal of course

the 3rd checksum is included with stroke data and I assume more useful,
and I assume can be used to detect if corrupted stroke info. was received;
understanding it would also be ideal, but it seems like it can be entirely
ignored for a "bare minimum" implementation

}}}

some possibly useful tools and documents for finding the "checksum" algorithms {{{

(google these)

}}}

{{{ INIT

PC kicks things off by sending:

1 WRITE:28: 16 03 00 00 01 00 00 FF
09 00
BA DD B5 9A 8A 91 25 A4
03 00 00 FF 00 00 02 01 03 00

and the SR reply is

2 READ_:26: 16 03 00 00 05 00 00 00
08 00
36 9F F4 8A 4C 0C 3C B5
8E 46 0D 01 53 52 33 20
"S""R""3"" " in ASCII

the PC then sends:

3 WRITE:28: 16 03 00 00 01 00 00 FF
09 00
99 27 52 26 BD 34 6C F8
04 00 00 FF 00 00 02 01 03 00

and the SR reply is

    (note: "checksum" data below only applies if the
        stenoram's RAM was cleared before this session
    )

4 READ_:21: 16 03 00 00 06 00 00 00
03 00
00 00 00 00 4C A8 18 1A
00 00 00
^^ ^^
for the SR reply, what matters is the stroke number; the PC should
take that stroke number, and

    1) set the "PC QUERY FOR STROKE" to the corresponding bytestring
        matching this stroke number

    2) set the "SR NO STROKE" bytestring to match this stroke number
            minus one

}}}

{{{ INITIAL "QUERY FOR STROKE" EXCHANGE

immediately after INIT, PC sends:
    WRITE:28:   16 03 00 00 01 00 00 FF
                09 00
                    DE 0A BB FF EA 2E 97 41
                01
                    00 00
                    00 64 00 02 02 03 00

and if there is no stroke, the SR replies
    READ_:24:   16 03 00 00 03 00 00 00
                06 00
                    07 01 FF FB 1E C4 6D 92
                00 00 FF FF FF 00

note the checksums/stroke numbers for this exchange are only
valid for the first such exchange (that is, if you cleared the
stenoram's RAM before this "run");

see "FLOW OF EXECUTION" to determine how to both:

    1) update the "QUERY FOR STROKE" and "NO STROKE REPLY" strings
        as needed
    2) determine what their initial values should be if the stenoram's
        RAM was NOT cleared before this "run"

}}}

{{{ SHUTDOWN

on shutdown, the PC sends:
    WRITE:28:   16 03 00 00 01 00 00 FF
                09 00
                    0C FD DF 39 FF F8 6F 4E
                01 00 00 00 00 00 02 03 03 00

and the SR replies:
    READ_:24:   16 03 00 00 03 00 00 00
                06 00
                    07 01 FF FB 1E C4 6D 92
                00 00 FF FF FF 00

    NOTE: this is the same as the first "SR no stroke" reply bytestring
        (well, by the "stroke number" it is the last such string...
        but it is sent "first" on a run after RAM is cleared)

}}} ================================================================================

{{{ FLOW OF EXECUTION

do the "INIT" sequence; this determines at what stroke number
the initial "PC QUERY FOR STROKE" and "SR NO STROKE REPLY"
bytestrings should start at

until
PC starts the shutdown sequence
do

send the current 28-byte "PC query for stroke" data

read 24 bytes from the SR

(inspect the 24 bytes to determine if there was a stroke or not)


if (no stroke) then

    the 24 bytes the SR sent should match the
    current "SR no stroke" reply bytes

else
    /*      there was a stroke;

            the SR actually sent 25-33 bytes containing stroke information;

            inspect the 24-byte header to see how many more bytes to read
            from the SR to get the stroke data (see "STROKE DATA") and
            then read that many more bytes
    */

    update the "PC query for stroke" bytestring (*** is what needs updated)

{{{ 28 bytes: (
10 constant bytes: 16 03 00 00 01 00 00 FF 09 00
{{{ *** 8 variable (well...hardcoded to stroke number...) bytes:
DE 0A BB FF EA 2E 97 41 # 01 00 00
90 C8 55 A6 C8 D2 1C E6 # 01 01 00
4C FD 6C 00 28 C2 EB 3A # 01 02 00
5B F0 AD 04 B7 E2 F1 F9 # 01 03 00
D4 18 93 2A B4 94 BF 07 # 01 04 00
8C 0B 98 46 64 20 5B 4B # 01 05 00
74 12 94 B0 59 82 8C 89 # 01 06 00
D8 BD 8F DA B7 CD FE DD # 01 07 00
4F 34 E2 7C 39 EA 04 F3 # 01 08 00
03 77 9D 85 C4 38 F9 D3 # 01 09 00
00 44 28 CB E8 EA 62 C6 # 01 0A 00
...
}}}
1 constant byte: 01
*** 2 variable bytes: Y0 Y1 (stroke number)
7 constant bytes: 00 64 00 02 02 03 00
}}} )

    update the "SR no stroke" reply bytestring (*** is what needs updated)
{{{         24 bytes: (
                8 constant bytes:   16 03 00 00 03 00 00 00
                2 constant bytes:   06 00

{{{ *** 8 variable (well...hardcoded to stroke number...) bytes:
07 01 FF FB 1E C4 6D 92 # 00 00 FF FF FF 00
00 00 00 00 EC 49 41 B3 # 00 00 00 00 00 00
07 05 08 0E 91 4F 4E C5 # 00 00 01 00 00 00
0E 0A 10 1C A5 6C 11 1B # 00 00 02 00 00 00
79 17 2C 4A 7F E8 C4 29 # 00 00 03 00 00 00
1C 14 20 38 38 40 24 E2 # 00 00 04 00 00 00
63 19 28 46 0D D0 CE 55 # 00 00 05 00 00 00
F2 2E 58 94 08 54 6D 95 # 00 00 06 00 00 00
5D 6B 9C E2 AD 78 81 DD # 00 00 07 00 00 00
38 28 40 70 37 38 56 AE # 00 00 08 00 00 00
3F 2D 48 7E 74 12 39 98 # 00 00 09 00 00 00
C6 32 50 8C 26 39 F5 F8 # 00 00 0A 00 00 00
...
}}}
2 constant bytes: 00 00
*** 2 variable bytes: Y0 Y1 (stroke number)
2 constant bytes: 00 00
}}} )
end

done

}}}

{{{ STROKE DATA

{{{ the SR sends 25-33 bytes containing stroke information (

{{{ determining the size of the stroke info. "packet" (
if single stroke in this transmission, SR sends
24 + (1, 2, or 3) bytes
if two strokes in this transmission, SR sends
24 + (1, 2, or 3) + (1, 2, or 3) bytes
if three strokes in this transmission, SR sends
24 + (1, 2, or 3) + (1, 2, or 3) + (1, 2, or 3) bytes:

                the 9th byte in the 24-byte "header" can be used
                to determine how many bytes of stroke data there are

}}} )

{{{ 24 byte "header" (
constant 8 bytes: 16 03 00 00 03 00 00 00
{{{ variable 1 byte: L0
how many bytes follow the X variables
if 1 stroke in this transmission: 07-09
for 2 strokes: 08-0C
for 3 strokes: 09-0F
(to replicate 0F: try hitting -Z quickly,
}}} since a single -Z is sent in 3 bytes)
constant 1 byte: 00
{{{ variable 8 bytes: X0 X1 X2 X3 X4 X5 X6 X7
}}} checksum of some sort perhaps
{{{ constant 2 bytes:
01 00 indicates: "1 stroke in this packet"
02 00 indicates: "2 strokes in this packet"
}}} 03 00 indicates: "3 strokes in this packet"
{{{ 2 variable bytes: Y0 Y1
stroke number, increments after every stroke;

                    Y0 is the lsB, Y1 is the msB

                    for first transmission, SR sends 00 00

                    for 2 strokes in a single transmission, the SR
                    increments this twice

                    for 3 strokes in a single transmission, the SR
                    increments this thrice

                    if first transmission has 2 strokes, SR starts this
                    at 01 00, so presumably it initially is FF FF

                    an example "roll over" (for a single-stroke transmission):
                        FF 0E   (Y0 Y1 before the stroke)

}}} 00 0F (Y0 Y1 after the stroke)
constant 2 bytes: 00 00
}}} )

{{{ 1-9 bytes of stroke data (
{{{ EITHER ( variable 1 byte: Z0

                    =========
                    Z0 values
                    =========
TODO: 80, 84, AD

                    # XXX: 0x00-0x7F are used for 3-byte strokes
                        TODO    80
                    STPH-FPLT   81
                        ER      82
                        RE      83
                        TODO    84
                        RAOE    85
                        WAU     86
                        KWRES   87  # XXX: "yes" ?
                        THR-    88  # XXX: "there" ?
                        EUFPLT  89
                        OF      8A  # XXX: "of" ?
                        AOEU    8B  # XXX: "I" ?
                        AS      8C  # XXX: "as" ?
                        TPHOT   8D  # XXX: "not" ?
                        WHA     8E
                        -B      8F
                        STPHAO  90
                        WA      91
                        EUPB    92  # XXX: "in" ?
                        TK-     93
                        EUS     94  # XXX: "is" ?
                        AOE     95
                        HREU    96
                        -FT     97
                        OPB     98  # XXX: "on" ?
                        S-      99
                        PHR-    9A
                    EUFRPBLGTS  9B
                        TPHO    9C  # XXX: "no" ?
                        TPHEU   9D
                        E       9E
                        -S      9F
                    STKPWHRAO   A0
                        TPOR    A1  # XXX: "for" ?
                        TPHOE   A2  # XXX: "no" ?
                        STPH-   A3  # XXX: "?" ?
                        W-      A4  # XXX: "with" ?
                        UR      A5  # XXX: "your" ?
                        O       A6
                        SKP-    A7  # XXX: "and" ?
                        KWRE    A8
                        APBD    A9  # XXX: "and" ?
                        OE      AA
                        TH-     AB  # XXX: "the" ?
                        OR      AC  # XXX: "or" ?
                        TODO    AD
                        -D      AE
                        APB     AF  # XXX: "an" ?
                        T-      B0
                    -FRPBLGTS   B1
                    EUT         B2  # XXX: "it" ?
                    STKPWHR-    B3
                        -G      B4
                        -T      B5  
                        *       B6
                        TPH-    B7
                        U       B8
                        -F      B9
                        EU      BA
                        THA     BB
                        -RBGS   BC  # XXX: "," ?
                        TO      BD  # XXX: "to" ?
                        -FPLT   BE  # XXX: "." ?
                        A       BF  # XXX: "a" ?

                    # XXX: 0xC0-0xFF are used for 2-byte strokes
            }}} )
{{{         OR ( variable 2 bytes:  Z0 Z1

                    ===================
                    Z0 masks (optional)
                    ===================
                        A   01

                    ======================================
                    Z0 values (mandatory; FA == "nothing")
                    ======================================
                    # XXX: 0x00-0x7F are used for 3-byte strokes
                    # XXX: 0x80-0xBF are used for 1-byte strokes

                        KW-     C0
                        KHR-    C2
                        KR-     C4
                        SK-     C6
                    STKPWHR-    C8
                        TR-     CA
                        PR-     CC
                        ST-     CE
                        SR-     D0
                        TPR-    D2
                        THR-    D4
                        SH-     D6
                        SKWR-   D8
                        P-      DA
                        TKPW-   DC
                        PHR-    DE
                        H-      E0
                        KWR-    E2
                        HR-     E4
                        TP-     E6
                        PW      E8
                        R-      EA
                        TK-     EC
                        K-      EE
                        PH-     F0
                        TH-     F2
                        TPH-    F4
                        T-      F6
                        W       F8
                        -       FA
                        S-      FC
                        STPH-   FE

                    ===================
                    Z1 masks (optional)
                    ===================
                        U   20
                        E   40
                        O   80

                    ======================================
                    Z1 values (mandatory; 1F == "nothing")
                    ======================================
                        -FP     00
                        -RB     01
                        -BGT    02
                        -LS     03
                        -PLT    04
                        -RBG    05
                        -RPB    06
                        -FR     07
                        -PBG    08
                    -FRPBLGTS   09
                        -GS     0A
                        -FT     0B
                        -TS     0C
                        -PBT    0D
                        -BGS    0E
                        -RS     0F
                        -RBGS   10
                        -PBS    11
                        -FPLT   12
                        -P      13
                        -RT     14
                        -B      15
                        -PL     16
                        -G      17
                        -BG     18
                        -F      19
                        -L      1A
                        -PB     1B
                        -S      1C
                        -R      1D
                        -T      1E
                        -       1F
            ) }}}
{{{         OR ( variable 3 bytes: Z0 Z1 Z2

                    MARKER RIGHT    59 03 30    XXX: SKPR-RPGT
                    MARKER LEFT     66 04 C8    XXX: STWH-FBLS

                ========
                Z0 masks
                ========
                    01  R-
                    02  H-
                    04  W-
                    08  P-
                    10  K-
                    20  T-
                    40  S-
                    80  unused
                        # XXX: 0x80-0xBF are used for 1-byte strokes
                        # XXX: 0xC0-0xFF are used for 2-byte strokes

                ========
                Z1 masks
                ========
                    01  -P
                    02  -R
                    04  -F
                    08  U
                    10  E
                    20  *
                    40  O
                    80  A

                ========
                Z2 masks
                ========
                    01  #
                    02  -Z
                    04  -D
                    08  -S
                    10  -T
                    20  -G
                    40  -L
                    80  -B
            ) }}}
{{{         [ if transmission has 2 or 3 strokes in it
                if this transmission has 2 or 3 strokes in it, they are here
                (following the first stroke) in the same format

                vvvvvvvvvvvvvv      vvvvvvvvvvvvvv      vvvvvvvvvvvvvv
                <Z0> [Z1] [Z2]  [   <Z0> [Z1] [Z2]  [   <Z0> [Z1] [Z2]  ]   ]
}}}         ]

}}} )

}}} )

}}}

Dictionary syntax to uncap next word

Currently {-|} in the Plover dictionary causes the first letter of the next stroke to be capitalized. Instituting a corresponding decap stroke (possibly {|-}) would be helpful.

Punctuation causes unwanted uncapitalization

Words or phrases containing one or more capital letters after the first letter are uncapitalized after periods, question marks, and exclamation marks.

After punctuation:

"So I" translated "So i"
"MIC" translated "Mic".
"you know what I mean" translated "You know what i mean".
"GERD" translated "Gerd".


Imported from Launchpad using lp2gh.

Plover does not send input to xterm

When xterm is focused, plover doesn't notice any keys typed and does not send anything to the xterm window. It's as if the keyboard goes straight through to xterm without plover.

bzr revision: 42
committer: Joshua Harlan Lifton lifton@chunk
timestamp: Fri 2011-01-21 12:17:49 -0500

xterm version 271


Imported from Launchpad using lp2gh.

Capture keystrokes without outputting them on linux

Currently the qwerty-to-steno implementation of Plover sends qwerty versions of keystrokes entered by the user, sends a corresponding number of backspace commands to delete the keystrokes, and then sends the strokes corresponding to the correct steno translation of the original keystrokes. This works fairly well in most applications, but in cases where single alphanumeric keys are mapped to commands (such as in Vim or Firefox), Plover cannot be used with a qwerty keyboard because the qwerty strokes will execute before Plover has a chance to delete them. In order to solve this, Plover needs to control the keyboard at a lower level, so that it can prevent the strokes from being sent out in the first place.

As of the most recent release, this problem is fixed in the Windows version.

interface to a real-time text to speech engine

Interface Plover to a text-to-speech engine to allow for real-time, steno-enabled, synthesized conversation. The eSpeak program is a likely candidate for a TTS engine, as it is fast and installed on Ubuntu by default. The steno interface must take into account words that might trigger false vocalizations before being integrated into a longer multi-stroke word.

Non us keyboards

I have played with Plover today (and really like it).

It has a small problem as a non-us citizen. My keyboard layout differs from the us after p and l (moving rightwards).

It would be great, if one could change the key mapping in Plover, so that one does not have to either change keyboard layouts or type wierd two or three letter combos for a single key...

Just for reference.. the DK keyboard (which I use) goes "opå" and "klæø" ....

Maybe a option i the gui to enter the three "differing" letters?

Lockfile is unfortunately named

Currently the lockfile is at "/tmp/plover". This allows for one instance of Plover per filesystem, which is not what we want. It should include the name of localhost, the name of the user, and the display number. It should also begin with a dot to encourage curious users to leave it alone.


Imported from Launchpad using lp2gh.

Eliminate doubled suffixes

When writing at speed, some stenographers accidentally double-tap the -D, -Z, -G, and -S keys, resulting in translations like "bearses", "startedded", and "singinging". This would prevent the translation of the second suffix. Very low priority.

Ctrl, Alt and arrows keys cause character deletion

I am using the sidewinder keyboard with Plover 2.1.2 on Ubuntu Maverick. When I use Ctrl, Alt and arrow keys to change workspaces while using Plover, a character in the text which is currently focused is deleted, namely the one to the left of the cursor. I have tested this further and it appears that Ctrl, Alt, Super(windows key) and the arrow keys are acting like Backspace, except that 'Up' moves the cursor up and then backspaces, and 'Right' appears to delete to the right (though it may be moving right then backspacing, which would be more consistent).

This may be intended behaviour, but it may not be expected by beginners.


Imported from Launchpad using lp2gh.

expand default dictionary to include more entries

Merge Mirabai's most current dictionary with the version of her dictionary that was branched off to become the Plover dictionary. Mirabai's current dictionary contains roughly 6000 new entries since the branching.

Lockfile is unfortunately named

Currently the lockfile is at "/tmp/plover". This allows for one instance of Plover per filesystem, which is not what we want. It should include the name of localhost, the name of the user, and the display number. It should also begin with a dot to encourage curious users to leave it alone.

Provide default serial port settings for each supported machine

Currently, Plover uses the same set of default serial port settings for all machines. Since different machines likely require different serial port settings, it makes sense to provide different default settings for each supported machine. This will hopefully smooth out the experience of using a new machine. The serial port settings should remain user configurable, but the defaults should be sensible. This could be accomplished by adding default configuration parameters to each machine type and then reading those parameters when generating the default configuration file. This blueprint was originally suggested by Hesky.

Gemini PR Serial broken in versions of Ubuntu newer than 10.04 LTS

Plover 2.1.2 works properly in Ubuntu 10.04 LTS, but newer versions, including newer versions of Ubuntu 10 and Ubuntu 11.10 Classic, give the following error when Plover is run in the terminal and the "P" icon is pressed when protocol is set to Gemini PR:

Xlib.protocol.request.QueryExtension
Exception in thread Thread-1:
Traceback (most recent call last):
  File "/usr/lib/python2.7/threading.py", line 552, in __bootstrap_inner
    self.run()
  File "/usr/local/lib/python2.7/dist-packages/plover/machine/geminipr.py", line 38, in run
    raw = self.serial_port.read(BYTES_PER_STROKE)
  File "/usr/lib/python2.7/dist-packages/serial/serialposix.py", line 439, in read
    if self.fd is None: raise portNotOpenError
AttributeError: 'Serial' object has no attribute 'fd'

Sidewinder X4 protocol works without any problems in all Ubuntu versions tested, but Gemini PR protocol seems only to work on Ubuntu 10.04.

(Mirabai's note: I'd noticed this bug several months ago, when my new computer, which I'd updated to a newer version of Ubuntu 10, stopped working with the PR protocol, even though my old computer, running Ubuntu 10.04 LTS, worked fine with Plover 2.1.2 in both Gemini and Sidewinder modes. I thought that possibly I'd screwed up some port settings on my new computer while trying to get Bluetooth working with an unpairable steno machine, but I just uninstalled Wubi and reinstalled with Ubuntu 11.10 Classic on my new computer, and I got the same result; Sidewinder protocol works fine, but Gemini PR gives the same error as above.)


Imported from Launchpad using lp2gh.

Problems with toggle feature on keyboard as steno machine

There are several issues here but it's likely that they are related. If investigation shows otherwise then we can break these apart.

  1. It is reported that, on linux, while toggled off the keystrokes are somehow remembered and when plover is toggled back on the strokes are played out as plover input.

  2. It is reported that on linux and windows when plover is toggled off pressing the keys mapped to asterisk (T, Y, G, H) plover is toggled back on. The dictionary was checked and has no such mapping.

This thread contains the discussion: https://groups.google.com/forum/?fromgroups#!topic/ploversteno/TpLiYwZeESE

Mac OS X port

Currently, the only known block to porting Plover to Mac OS X is that the only known version of the X11 Python bindings for Mac OS X does not include X Record Extension, which is required by Plover. The solution seems to either find or build a version of the X11 bindings that includes support for the X Record Extension, though more research on this topic is probably needed.

-FPLT should be {.} and STPH should be {?} in default dictionary

In Plover default dictionary, -FPLT is defined as -FRPBLGTS; should be {.}, and STPH is defined as STKPWHR; should be {?}. This was totally Mirabai's fault. It was part of her personal transcription setup and should never have made it into Plover's distributed dictionary. It's confusing for new users and messes up the "hello world." instructions in the FAQ.


Imported from Launchpad using lp2gh.

Invalid dictionary crashes plover

I haven't confirmed this yet but it seems from email reports that invalid dictionaries cause plover to stop running.

I think this leads to a poor user experience. Plover should report the invalid dictionary in the UI rather than crashing or just exiting.

Windows version: Plover won't load

After accidentally shutting down the computer before shutting down Plover, it wouldn't run, even after several subsequent reboots. Nothing happened after clicking on the icon; no error messages or instances in task manager present. I searched for all files (non-hidden, hidden, and system) containing the word "Plover", and after deleting them and rebooting, then running plover.exe (which presumably reinstalled from scratch since everything had been scrubbed) it worked properly again. If not possible to prevent this problem completely, noisier failure would be helpful.

Non us keyboards

I have played with Plover today (and really like it).

It has a small problem as a non-us citizen. My keyboard layout differs from the us after p and l (moving rightwards).

It would be great, if one could change the key mapping in Plover, so that one does not have to either change keyboard layouts or type wierd two or three letter combos for a single key...

Just for reference.. the DK keyboard (which I use) goes "opå" and "klæø" ....

Maybe a option i the gui to enter the three "differing" letters?


Imported from Launchpad using lp2gh.

-FPLT should be {.} and STPH should be {?} in default dictionary

In Plover default dictionary, -FPLT is defined as -FRPBLGTS; should be {.}, and STPH is defined as STKPWHR; should be {?}. This was totally Mirabai's fault. It was part of her personal transcription setup and should never have made it into Plover's distributed dictionary. It's confusing for new users and messes up the "hello world." instructions in the FAQ.


Imported from Launchpad using lp2gh.

"exiting" plover button and start-up messages

plover-2.2.0

Starting plover, the plover dialog box currently shows three buttons, "P", "Configure...", and "About...", and displays a message on the command line,

If Plover is quit using Ctrl-c, the /tmp/plover.lock file must be removed before Plover can be run again.

As it is now, the new user would be otherwise somewhat at a loss as to how to Exit plover, though the window-decoration Exit button - when there is one, which admittedly is almost always - seems to do the right thing. Still, that moment of uncertainty for the first-time user, wanting to exit plover, is simply not helpful and not necessary.

I would suggest adding a fourth, explicit, "Exit" button to the gui dialog box.

Similarly, when plover is started with an existing lock-file, there is a message on the command line,

Another instance of Plover is already running.

This is not enough information to resolve the problem, where that information is only provided if plover starts successfully, ironically, and there is no advantage to being "cryptic".

I would suggest expanding the command line message, to include the solution, supposing that the lock-file is "accidental". For instance:

Another instance of Plover may already be running. If no other instance of Plover is running, remove the stale lock file at "/tmp/plover.lock" and run Plover again.

Of course, a more elegant solution might be to not use a lock file at all, and instead, explicitly check the process table for an instance of python running plover, so that the user does not have to know anything about deleting lock-files - but still provide an informative command-line error message! For instance,

The process table shows another instance of Plover already running with PID . If another instance of Plover has crashed, remove that process with "kill ", and run Plover again.

James

Windows version: Plover won't load

After accidentally shutting down the computer before shutting down Plover, it wouldn't run, even after several subsequent reboots. Nothing happened after clicking on the icon; no error messages or instances in task manager present. I searched for all files (non-hidden, hidden, and system) containing the word "Plover", and after deleting them and rebooting, then running plover.exe (which presumably reinstalled from scratch since everything had been scrubbed) it worked properly again. If not possible to prevent this problem completely, noisier failure would be helpful.


Imported from Launchpad using lp2gh.

"Install" issues - runs only as "root"

plover-2.2.0
debian-unstable

From the README file, installing on my debian-unstable system, with the suggested

sudo python setup.py install

will install plover in /usr/local/lib/python2.7/dist-packages/plover/ with root-only permissions, as

drwxr-s--- 6 root staff 4096 Jan 15 20:48 plover
-rw-r----- 1 root staff 1021 Jan 15 20:48 plover-2.2.0.egg-info

and so on, for the installed files.

Did you really want plover to run only as "root"? Is this a permissions error in the install?

There is no mention of having to run "sudo plover" in the README file. Running simply "plover" will produce an error message,

Traceback (most recent call last):
File "/usr/local/bin/plover", line 5, in
import plover.gui.main
ImportError: No module named plover.gui.main

which is not what the first-time user should see.

But then, maybe you don't want a non-root user mucking with the keyboard mapping? On the other hand, the keyboard is usually already dedicated to the current non-root user.

So, please update the README file, or set the proper install permissions to allow a non-root user to run plover.

Also, allowing for installation in a different directory would be polite. I prefer "/local/" instead of "/usr/local/". Some people might prefer to install in "/opt/". So, a command-line dialog, or an install-configuration-file would be nice.

Thanks. Very cool project!

James


Imported from Launchpad using lp2gh.

Plover does not send input to xterm

When xterm is focused, plover doesn't notice any keys typed and does not send anything to the xterm window. It's as if the keyboard goes straight through to xterm without plover.

bzr revision: 42
committer: Joshua Harlan Lifton lifton@chunk
timestamp: Fri 2011-01-21 12:17:49 -0500

xterm version 271


Imported from Launchpad using lp2gh.

Automatically show shorter stroke definitions

People just learning steno are forced to either write out many words letter by letter or phonetically in several strokes, if they don't know or can't remember shorter brief forms of words and phrases already defined in their dictionary. To help increase their knowledge of the dictionary as they use Plover, optionally float a small window that captures each translation from Plover's log and searches for shorter (i.e. fewer strokes) definitions of it in the dictionary. Ideally it would also work with fingerspelled words, delineated by spaces, though that would probably require more coding. A preliminary script which runs in the terminal has been written by Stefan Curtis, but this option should be integrated into Plover's GUI for easier use:

stenoknight.com/plover/PloverCheck

Minor problems with .desktop file

When doing packaging on plover, the application which reports problems with Debian packages gave warnings about the .desktop file. There were two minor problems. First, the shebang is not needed and causes it to report an binary executable. The second is the Version: field in the file. This field is intended to contain the version of the desktop specification, not the version of the software. I am attaching a patch.


Imported from Launchpad using lp2gh.

Punctuation causes unwanted uncapitalization

Words or phrases containing one or more capital letters after the first letter are uncapitalized after periods, question marks, and exclamation marks.

After punctuation:

"So I" translated "So i"
"MIC" translated "Mic".
"you know what I mean" translated "You know what i mean".
"GERD" translated "Gerd".

Minor problems with .desktop file

When doing packaging on plover, the application which reports problems with Debian packages gave warnings about the .desktop file. There were two minor problems. First, the shebang is not needed and causes it to report an binary executable. The second is the Version: field in the file. This field is intended to contain the version of the desktop specification, not the version of the software. I am attaching a patch.

Right-sided numbers don't translate

All strokes containing right-sided numbers (6, 7, 8, and 9) appear not to be recognized as numbers. They aren't glued to other numbers or letters, and contain extraneous hyphens; in the middle of the translation (e.g. 4-6 for 46) when a left-sided number precedes them, and at the beginning of the translation (e.g. -6 for 6 or -79 for 79) otherwise.

Exception: When the numbers appear in inversion (e.g., 67EU defined in dictionary as 76), they translate properly, without hyphens.


Imported from Launchpad using lp2gh.

Create a way of quickly looking up a fingerspelled word's stroke from within plover

Plover's dictionary is "opaque"; if a new ploverist wants to find out how to write a word, they must leave Plover, open up dictionary.json in a text editor, and grep for the word on their own. This project intends to create a nice GUI that can be summoned by a configurable {PLOVER:LOOKUP} stroke in the dictionary that opens up a small window with a text entry field. The user can then quickly fingerspell the word and see a list of strokes that will write the word. They can then dismiss the window with a simple tap of the return or Esc key.

(On second thought, this likely isn't as useful as https://blueprints.launchpad.net/plover/+spec/brief-suggestions )

automatically translate unknown words based on known roots

If Plover gets a word that it otherwise couldn't translate, but if you remove -S, -G, -Z, or -D it would translate as one of the words in the dictionary, to translate it as that word with the corresponding special suffix attached. This is a feature in some other programs that has proven very useful in practice.

import and convert dictionaries from other programs

Many Plover users have steno experience with other programs and therefore have mature dictionaries in those programs' formats. A tool should exist to easily convert other programs' dictionaries to the Plover dictionary format.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.