openstenoproject / plover Goto Github PK
View Code? Open in Web Editor NEWOpen source stenotype engine
Home Page: http://opensteno.org/plover
License: GNU General Public License v2.0
Open source stenotype engine
Home Page: http://opensteno.org/plover
License: GNU General Public License v2.0
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.
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.
Plover cannot be installed on Ubuntu 9.10: the lockfile module fails.
The most simple way to fix the problem for me was:
Imported from Launchpad using lp2gh.
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.
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.
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.
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 cannot be installed on Ubuntu 9.10: the lockfile module fails.
The most simple way to fix the problem for me was:
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.
Errors are currently directed to the void by xwidgets. Directing it to a file in a known location will help with bug reports.
Ben Tarkeshian has posted notes of reverse engineering a stenoram machine to the point where it might be possible to add plover support.
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"
}}}
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;
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
(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
(google these)
}}}
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
}}}
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"
}}}
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)
}}} ================================================================================
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
}}}
{{{ 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] ] ]
}}} ]
}}} )
}}} )
}}}
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.
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.
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.
This will significantly expand Plover's user base.
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 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.
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?
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.
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.
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.
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.
When packaging this software, a warning was raised about a lack of an upstream changelog. Paul Wise recommended using the following to generate the changelog: http://wiki.bazaar.canonical.com/BzrPlugins
Imported from Launchpad using lp2gh.
Add support for the Stentura stenotype protocol so that a Stentura machine can be used with Plover by setting the machine_type configuration parameter to "Stentura".
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.
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.
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.
There are several issues here but it's likely that they are related. If investigation shows otherwise then we can break these apart.
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.
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
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.
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.
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.
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.
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.
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.
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
When packaging this software, a warning was raised about a lack of an upstream changelog. Paul Wise recommended using the following to generate the changelog: http://wiki.bazaar.canonical.com/BzrPlugins
Imported from Launchpad using lp2gh.
Translation lookup against a prioritized list of dictionaries.
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.
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.
A mobile version of Plover can open up new user bases and application domains. Android seems to be the best choice in terms of market share and ease of development.
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.
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
Provide a clear and easily accessible user interface for adding or replacing a dictionary entry at any time during a Plover session. This might be as simple as defining a meta command to pop up a small text entry window.
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.
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".
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.
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.
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 )
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.
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.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.