NAME
poe —
.po file editor
SYNOPSIS
poe |
-h | --help |
-V | --full-version |
-v | --version |
poe |
[-B | --no-backup]
[-b | --backup]
[-L |
--dont-break-literals] [-W
| --no-wrap] [-w
cols |
--wrap-width=cols]
filename.po |
DESCRIPTION
poe is a .po (GNU gettext) file editor
with a terminal UI.
-B,--no-backup- Disables backups. This option overrides the setting in config.h.
-b,--backup- Enables backups. This option overrides the setting in config.h.
-h,--help- Show option summary.
-L,--dont-break-literals- Don't break long literals into an empty string and a literal on a separate
line. By default (unless changed in config.h), if
the length of the text
msgid "
(or
msgid_plural,msgstr, etc) plus the length of the literal, plus one (for the closing quote) is greater than literal_break_threshold, a line of the formmsgid "Some really long literal string"
will be broken into two lines:
msgid "" "Some really long literal string"
This option prevents that. It overrides the setting in config.h.
-V,--full-version- Show full version information: like
-v, followed by copyright notice and the state of options. -v,--version- Show version information: program version and source git repository commit date.
-W,--no-wrap- Sets wrap_width to 0, effectively turning off
wrapping of
msgids,msgid_plurals,msgstrs andmsgstr[nn]s on save. -wcols,--wrap-width=cols- Sets wrap_width to the specified value. If cols is negative, it will be set to zero, effectively turning off wrapping on save.
Key bindings
Main window key bindings are as follows:
| Key | Action |
| Esc | Close dialog or clear error |
| Enter | Edit entry |
| H or F1 | Show help dialog |
| / or F7 | Incremental search (end input with Enter) |
| n or F3 | Find next |
| N or F4 | Find previous |
| u or F8 | Go to next untranslated entry |
| f or F9 | Go to next fuzzy entry |
| w or C-S | Save file (with backup) |
| g or Home | Go to first entry |
| C-B or PgUp | Go to previous page |
| k or Up | Go to previous entry |
| j or Down | Go to next entry |
| C-F or PgDn | Go to next page |
| G or End | Go to last entry |
| z or C-Z | Toggle fuzzy flag |
| q or C-Q | Quit |
Edit dialog key bindings are as follows:
| Key | Action |
| C-S | Update entry and close dialog |
| C-B or PgUp | Update entry and edit previous entry |
| C-F or PgDn | Update entry and edit next entry |
| C-P | Show previous plural form of msgstr |
| C-N | Show next plural form of msgstr |
| Escape | Cancel changes and close dialog |
| C-C | Yank (copy) current msgstr to
paste buffer |
| C-V | Paste the contents of paste buffer into current
msgstr |
| F8 | Go to next untranslated entry |
| F9 | Go to next fuzzy entry |
| F5 | Copy msgid to edit box as
current msgstr |
| F6 | Toggle focus between info box and edit box |
| C-Z | Toggle fuzzy flag |
| C-A or Home | Go to start of line |
| C-E or End | Go to end of line |
| C-U | Erase to start of line |
| C-K | Erase to end of line |
| C-R | Go to previous word |
| C-T | Go to next word |
| C-W | Erase previous word |
| Up | Go to previous line |
| Left | Go to previous character |
| Right | Go to next character |
| Down | Go to next line |
In the table above, “current
msgstr” refers to the situation when there
are multiple msgstrs, representing different plural
forms. Only the currently shown plural form is affected.
When the info box is focused, arrow keys, C-B/C-F (PgUp/PgDn) and C-A/C-E (Home/End) keys scroll the info box.
When the search box is open, relevant text editing and movement commands from the edit box also apply. For example, C-R moves one word backwards, and C-W deletes one word backwards.
Status line
Status line is comprised of a number of segments, by default
three. The central segment displays the current message number, the total
messages count, then in parentheses: number of untranslated messages, number
of fuzzy messages and the number of obsolete messages. Obsolete messages are
messages whose msgid doesn't match any
msgid in the message catalog anymore, and are
commented out in the .po file using the #~
comments.
Message flags
Message flags are shown to the left of the
msgid in the main window and the statusbar of the
edit box. They mean the following:
| Character | Meaning |
| C | c-format flag |
| F | fuzzy flag |
| P | Message has plural forms |
| N | no-c-format flag |
Error checking
poe has some rudimentary checks of the
translated messages built in. First, when saving changes in the edit box, if
the msgid has a newline character
(\n), a dot (.) or a space
( ) at the end, and the corresponding
msgstr doesn't, msgstr being
saved will have its ending character made to match the one from the
msgid. This feature can be disabled by setting the
match_msgstr_ending configuration variable to 0.
Second, if the numbers of newline characters
(\n), or, additionally, dots when
warn_count_dots is set, in
msgid and msgstr don't
match, msgstr will be shown in a different color on
the main screen. If the number of newlines was intended, you can simply
ignore this warning. Otherwise, it can be useful to detect unwanted
discrepancies in formatting between the original message and the
translation.
EXIT STATUS
The poe utility exits 0 on success,
and >0 if an error occurs.
For errors caused by the unsuccessful calls to libc functions setting errno, that value is returned as the exit status. Otherwise, the exit status is one of the following:
201- No filename was given on the command line.
202- Command line option is missing a required argument.
203- Command line argument is invalid/unsupported.
204- File is not a valid PO (Portable Object) file.
205- File is not a regular file.
206- There has been a termbox error.
215- Syntax error.
216- PO file doesn't have
Plural-Forms:in the firstmsgid. 217- The
npluralsfield in the firstmsgstrdoes not contain a valid integer.
DIAGNOSTICS
Most error messages output by poe are in
the format
poe:
msgIn the case of a syntax error, output is in the format:
poe:
filename:lineno:colno:
msgwhere filename is the name of the input file, lineno and colno are the line and column numbers in the input file where the error occured.
When the error is caused by an error in the libc function which
sets errno, poe calls
perror(3) prior to
outputting an error message in the above format.
AUTHORS
Strahinya Radich <sr@strahinja.org>, 2021-2026
BUGS
Bugs can be reported using the ticket tracker at: https://todo.sr.ht/~strahinja/poe
Known limitations
- UTF-8 character set is assumed.
- RTL scripts are unsupported/problematic. CJK scripts should work better after v2.0, which introduced the use of wcwidth(3).
- Only one file can be edited at a time, and no additional files can be loaded at runtime. This is a design decision.
- Unless the variable create_backups is set to 0
before compilation, or the parameter
-Bis used when invokingpoe, the directory of the edited file must be writable by the user in order to write the changes to the file. This is due to creating backups in order to avoid the potential data loss under specific circumstances (loss of power during write). - Only the flags
fuzzy,c-formatandno-c-formatare supported. Other flags will be stripped on save. This is a design decision.