aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Makefile18
-rw-r--r--README.md15
-rwxr-xr-x[-rw-r--r--]aux/workflow/assert-manpages.sh136
-rwxr-xr-xaux/workflow/manpages.sh55
-rw-r--r--doc/eo.po480
-rw-r--r--doc/fr.po483
-rw-r--r--doc/pt.po482
-rw-r--r--doc/remembering.en.1 (renamed from doc/remembering.1)15
-rw-r--r--doc/remembering.en.5 (renamed from doc/remembering.5)19
-rw-r--r--doc/remembering.eo.1231
-rw-r--r--doc/remembering.eo.5105
-rw-r--r--doc/remembering.fr.1233
-rw-r--r--doc/remembering.fr.5107
-rw-r--r--doc/remembering.pt.1231
-rw-r--r--doc/remembering.pt.5105
15 files changed, 2681 insertions, 34 deletions
diff --git a/Makefile b/Makefile
index 4f21466..e08d895 100644
--- a/Makefile
+++ b/Makefile
@@ -10,13 +10,10 @@ VERSION = 0.2.1
DATE = 2021-02-23
NAME = remembering
MAILING_LIST = public-inbox
+TRANSLATIONS = pt fr eo
sources = src/remembering.c
-manpages = \
- doc/remembering.1 \
- doc/remembering.5
-
all: remembering run-tests
remembering: remembering-sh
@@ -49,6 +46,7 @@ dev-check: check fallible-tests
sh aux/workflow/assert-todos.sh
sh aux/workflow/assert-changelog.sh $(NAME) $(NAME)
sh aux/workflow/assert-readme.sh $(NAME) $(MAILING_LIST)
+ sh aux/workflow/manpages.sh '$(TRANSLATIONS)' --update
sh aux/workflow/assert-manpages.sh $(NAME) $(MAILING_LIST)
clean:
@@ -61,19 +59,15 @@ do_subst = sed \
install: all
mkdir -p $(DESTDIR)$(PREFIX)/bin
cp $(NAME) $(DESTDIR)$(PREFIX)/bin/$(NAME)
- for m in $(manpages); do \
- n=$${m##*.}; \
- mkdir -p $(DESTDIR)$(MANPREFIX)/man$$n; \
- $(do_subst) < $$m > $(DESTDIR)$(MANPREFIX)/man$$n/`basename $$m`; \
- done
+ sh aux/workflows/manpages.sh '$(TRANSLATIONS)' --install '$(DESTDIR)$(MANPREFIX)' -- $(do_subst)
uninstall:
rm -f $(DESTDIR)$(PREFIX)/bin/$(NAME)
- for m in $(manpages); do rm -f $(DESTDIR)$(MANPREFIX)/man$${##*.}/`basename $$m`; done
+ sh aux/workflow/manpages.sh '$(TRANSLATIONS)' --uninstall '$(DESTDIR)$(MANPREFIX)'
dist: clean public dev-check
sh aux/workflow/dist.sh $(DATE) $(VERSION) $(NAME)
-public: README.md TODOs.md CHANGELOG.md $(manpages)
+public: README.md TODOs.md CHANGELOG.md
sh aux/workflow/public.sh Remembering $(NAME) $(MAILING_LIST)
- for m in $(manpages); do $(do_subst) < $$m | pandoc -s -r man -w html > public/`basename $$m`.html; done
+ sh aux/workflow/manpages.sh '$(TRANSLATIONS)' --html '' -- $(do_subst)
diff --git a/README.md b/README.md
index 2c87f4e..9dbe3a1 100644
--- a/README.md
+++ b/README.md
@@ -45,10 +45,16 @@ environment (`_POSIX_C_SOURCE 200809L`).
## Documentation
-The documentation is available via installed manpages or online: [`remembering.1`] and [`remembering.5`].
+The documentation is available via installed manpages or online: [`remembering.1`] ([pt][pt.1], [fr][fr.1], [eo][eo.1]) and [`remembering.5`] ([pt][pt.5], [fr][fr.5], [eo][eo.5]).
-[`remembering.1`]: https://euandreh.xyz/remembering/remembering.1.html
-[`remembering.5`]: https://euandreh.xyz/remembering/remembering.5.html
+[`remembering.1`]: https://euandreh.xyz/remembering/en/remembering.1.html
+[pt.1]: https://euandreh.xyz/remembering/pt/remembering.1.html
+[fr.1]: https://euandreh.xyz/remembering/fr/remembering.1.html
+[eo.1]: https://euandreh.xyz/remembering/eo/remembering.1.html
+[`remembering.5`]: https://euandreh.xyz/remembering/en/remembering.5.html
+[pt.5]: https://euandreh.xyz/remembering/pt/remembering.5.html
+[fr.5]: https://euandreh.xyz/remembering/fr/remembering.5.html
+[eo.5]: https://euandreh.xyz/remembering/eo/remembering.5.html
## Contributing
@@ -56,11 +62,14 @@ The documentation is available via installed manpages or online: [`remembering.1
Extra tools used for development are:
- [fallible] and [Valgrind] for memory testing;
- [ShellCheck] for validating scripts;
+- [po4a] and [gettext] for i18n and l10n support;
- [pandoc] and Perl for generating the documentation HTML and website.
[fallible]: https://fallible.euandreh.xyz
[Valgrind]: https://valgrind.org
[ShellCheck]: https://www.shellcheck.net/
+[po4a]: https://po4a.org/index.php.en
+[gettext]: https://www.gnu.org/software/gettext/
[pandoc]: https://pandoc.org/
For running the extra development-only checks, run:
diff --git a/aux/workflow/assert-manpages.sh b/aux/workflow/assert-manpages.sh
index f265ab4..7254d60 100644..100755
--- a/aux/workflow/assert-manpages.sh
+++ b/aux/workflow/assert-manpages.sh
@@ -18,8 +18,9 @@ while getopts 'i' flag; do
esac
done
-EXPECTED="$(mktemp)"
-cat <<EOF >> "$EXPECTED"
+
+EXPECTED_EN="$(mktemp)"
+cat <<EOF | sed 's|-|\\-|g' >> "$EXPECTED_EN"
.SH AUTHORS
@@ -37,7 +38,8 @@ Report bugs to the
.MT ~euandreh/$MAILING_LIST@lists.sr.ht
mailing list
.ME .
-Use the subject "\fC[$PROJECT] BUG or TASK: <description>\fR".
+Use the subject "\f(CR[$PROJECT] BUG or TASK:
+<description>\fR".
.IP \(bu
Browse bugs
.UR https://$TLD/$PROJECT/TODOs.html
@@ -53,12 +55,140 @@ Comments and discussions
.UE .
EOF
+EXPECTED_PT="$(mktemp)"
+cat <<EOF | sed 's|-|\\-|g' >> "$EXPECTED_PT"
+
+
+.SH AUTORES
+
+.MT eu@euandre.org
+EuAndreh
+.ME
+e colaboradores.
+
+
+.SH BUGS
+
+.IP \(bu
+Relate bugs na
+.MT ~euandreh/$MAILING_LIST@lists.sr.ht
+lista de discussão
+.ME .
+Use o assunto "\f(CR[$PROJECT] BUG ou TASK:
+<descrição>\fR".
+.IP \(bu
+Veja os bugs
+.UR https://$TLD/$PROJECT/TODOs.html
+online
+.UE .
+.IP \(bu
+.UR https://$TLD/$PROJECT/
+Página inicial
+.UE .
+.IP \(bu
+.UR https://lists.sr.ht/~euandreh/$MAILING_LIST?search=%5B$PROJECT%5D
+Comentários e discussões
+.UE .
+EOF
+
+EXPECTED_FR="$(mktemp)"
+cat <<EOF | sed 's|-|\\-|g' >> "$EXPECTED_FR"
+
+
+.SH AUTEURS
+
+.MT eu@euandre.org
+EuAndreh
+.ME
+et les contributeurs.
+
+
+.SH BUGS
+
+.IP \(bu
+Soumettre un bogue dans la
+.MT ~euandreh/$MAILING_LIST@lists.sr.ht
+liste
+de diffusion
+.ME .
+Utilise le sujèt "\f(CR[$PROJECT] BUG ou TASK:
+<description>\fR".
+.IP \(bu
+Parcourir les bogues
+.UR https://$TLD/$PROJECT/TODOs.html
+en
+ligne
+.UE .
+.IP \(bu
+.UR https://$TLD/$PROJECT/
+Page d'accueil
+.UE .
+.IP \(bu
+.UR https://lists.sr.ht/~euandreh/$MAILING_LIST?search=%5B$PROJECT%5D
+Commentaires et discussions
+.UE .
+EOF
+
+EXPECTED_EO="$(mktemp)"
+cat <<EOF | sed 's|-|\\-|g' >> "$EXPECTED_EO"
+
+
+.SH AŬTOROJ
+
+.MT eu@euandre.org
+EuAndreh
+.ME
+kaj la kontribuuloj.
+
+
+.SH MISFUNKCIOJ
+
+.IP \(bu
+Raportu misfunkcioj al la
+.MT ~euandreh/$MAILING_LIST@lists.sr.ht
+dissendolisto
+.ME .
+Uzu la subjekton "\f(CR[$PROJECT] BUG aŭ TASK:
+<priskribo>\fR".
+.IP \(bu
+Foliumu misfunkcioj
+.UR https://$TLD/$PROJECT/TODOs.html
+rete
+.UE .
+.IP \(bu
+.UR https://$TLD/$PROJECT/
+Ĉefpaĝo
+.UE .
+.IP \(bu
+.UR https://lists.sr.ht/~euandreh/$MAILING_LIST?search=%5B$PROJECT%5D
+Komentoj kaj diskutoj
+.UE .
+EOF
+
+
# shellcheck disable=2044
for f in $(find doc -type f -name '*.[0-9]'); do
LINES="$(wc -l "$f" | cut -d\ -f1)"
if [ "$LINES" = 1 ] && grep -Eq '^\.so man.+$' "$f"; then
continue
fi
+
+ lang="$(echo "$f" | cut -d. -f2)"
+ case "$lang" in
+ pt)
+ EXPECTED="$EXPECTED_PT"
+ ;;
+ fr)
+ EXPECTED="$EXPECTED_FR"
+ ;;
+ eo)
+ EXPECTED="$EXPECTED_EO"
+ ;;
+ *)
+ EXPECTED="$EXPECTED_EN"
+ ;;
+ esac
+
if ! tail -n "$(wc -l < "$EXPECTED")" "$f" | diff - "$EXPECTED"; then
echo "Missing metadata at the end of \"$f\" file"
if [ "$IN_PLACE" = true ]; then
diff --git a/aux/workflow/manpages.sh b/aux/workflow/manpages.sh
new file mode 100755
index 0000000..e4ea8f2
--- /dev/null
+++ b/aux/workflow/manpages.sh
@@ -0,0 +1,55 @@
+#!/bin/sh
+set -eu
+
+LANGS="$1"
+OP="$2"
+PREFIX="${3:-}"
+
+if [ "$OP" = '--update' ]; then
+ for f in doc/*.en.[1-9]; do
+ for lang in $LANGS; do
+ to="$(echo "$f" | sed "s|\.en\.|.$lang.|")"
+ po4a-updatepo -f man -m "$f" -p "doc/$lang.po"
+ printf 'Translating %s...\n' "$to" >&2
+ OUT="$(po4a-translate -f man -m "$f" -p "doc/$lang.po" -l "$to" -k 0 -v 2>&1)"
+ echo "$OUT" >&2
+ if ! echo "$OUT" | grep -qF ' is 100% translated ('; then
+ printf "\n WARNING!\n Missing translations for %s\n\n" "$to" >&2
+ fi
+ done
+ done
+else
+ shift 4 ||: # remove up to '--'
+ for f in doc/*.en.[1-9]; do
+ n="${f##*.}"
+ fileto_name="$(basename "${f%.en.$n}").$n"
+ for lang in $LANGS en; do
+ filefrom_name="${f%.en.$n}.$lang.$n"
+ mandir_name="$PREFIX/$lang/man$n"
+ htmldir_name="public/$lang/"
+ case "$OP" in
+ --install)
+ mkdir -p "$mandir_name"
+ # shellcheck disable=2068
+ $@ < "$filefrom_name" > "$mandir_name/$fileto_name"
+ mkdir -p "$PREFIX/man$n"
+ ln -fs "../en/man$n/$fileto_name" "$PREFIX/man$n/$fileto_name"
+ ;;
+ --uninstall)
+ rm -f \
+ "$PREFIX/$lang/man$n/$fileto_name" \
+ "$PREFIX/man$n/$fileto_name"
+ ;;
+ --html)
+ mkdir -p "$htmldir_name"
+ # shellcheck disable=2068
+ $@ < "$filefrom_name" | pandoc -s -r man -w html > "public/$lang/$fileto_name.html"
+ ;;
+ *)
+ echo "Unsupported operation: $OP"
+ exit 2
+ ;;
+ esac
+ done
+ done
+fi
diff --git a/doc/eo.po b/doc/eo.po
new file mode 100644
index 0000000..4191d92
--- /dev/null
+++ b/doc/eo.po
@@ -0,0 +1,480 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: \n"
+"POT-Creation-Date: 2021-06-19 16:58-0300\n"
+"PO-Revision-Date: 2021-06-19 16:57-0300\n"
+"Last-Translator: \n"
+"Language-Team: \n"
+"Language: eo\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Poedit 2.4.3\n"
+"X-Poedit-Bookmarks: -1,-1,5,-1,-1,-1,-1,-1,-1,-1\n"
+
+#. type: TH
+#: doc/remembering.en.5:1
+#, no-wrap
+msgid "REMEMBERING"
+msgstr ""
+
+#. type: TH
+#: doc/remembering.en.5:1
+#, no-wrap
+msgid "@DATE@"
+msgstr "@DATE@"
+
+#. type: TH
+#: doc/remembering.en.5:1
+#, fuzzy, no-wrap
+#| msgid "git-permalink @VERSION@"
+msgid "remembering @VERSION@"
+msgstr "git-permalink @VERSION@"
+
+#. type: SH
+#: doc/remembering.en.5:4
+#, no-wrap
+msgid "NAME"
+msgstr "NOMO"
+
+#. type: Plain text
+#: doc/remembering.en.5:7
+msgid "remembering - format of the I<PROFILE> text file."
+msgstr ""
+
+#. type: SH
+#: doc/remembering.en.5:9
+#, no-wrap
+msgid "PROFILE"
+msgstr ""
+
+#. type: Plain text
+#: doc/remembering.en.5:13
+msgid ""
+"The I<PROFILE> is a text file, stored on \\f(CR$XDG_DATA_HOME/profile-name"
+"\\fR if \\f(CR$XDG_DATA_HOME\\fR is defined. Otherwise, it lives in "
+"\\f(CR~/.local/share/remembering/profile-name\\fR."
+msgstr ""
+
+#. type: Plain text
+#: doc/remembering.en.5:15
+msgid "Each line of the I<PROFILE> contains three pieces of information:"
+msgstr ""
+
+#. type: IP
+#: doc/remembering.en.5:17
+#, no-wrap
+msgid "1"
+msgstr ""
+
+#. type: Plain text
+#: doc/remembering.en.5:19
+msgid "the B<rank> of the current entry;"
+msgstr ""
+
+#. type: IP
+#: doc/remembering.en.5:19
+#, no-wrap
+msgid "2"
+msgstr ""
+
+#. type: Plain text
+#: doc/remembering.en.5:21
+msgid "the \\f(CR:\\fR separator;"
+msgstr ""
+
+#. type: IP
+#: doc/remembering.en.5:21
+#, no-wrap
+msgid "3"
+msgstr ""
+
+#. type: Plain text
+#: doc/remembering.en.5:23
+msgid "the B<entry> itself."
+msgstr ""
+
+#. type: Plain text
+#: doc/remembering.en.5:26
+msgid ""
+"The B<rank> is a number, and the B<entry> is all the text until the end of "
+"the line after the \\f(CR:\\fR separator:"
+msgstr ""
+
+#. type: Plain text
+#: doc/remembering.en.5:34
+#, no-wrap
+msgid ""
+"0:an entry\n"
+"0:banana\n"
+"0:entry\n"
+"0:something\n"
+"0:zzz\n"
+msgstr ""
+
+#. type: Plain text
+#: doc/remembering.en.5:38
+msgid ""
+"Above is an example of a I<PROFILE> file where all the entries have the "
+"default B<rank> value: B<0>."
+msgstr ""
+
+#. type: Plain text
+#: doc/remembering.en.5:40
+msgid ""
+"If the I<COMMAND> runs and chooses \\f(CRbanana\\fR, the new I<PROFILE> will "
+"be:"
+msgstr ""
+
+#. type: Plain text
+#: doc/remembering.en.5:48
+#, no-wrap
+msgid ""
+"0:an entry\n"
+"1:banana\n"
+"0:entry\n"
+"0:something\n"
+"0:zzz\n"
+msgstr ""
+
+#. type: Plain text
+#: doc/remembering.en.5:52
+msgid ""
+"Now the next time the I<COMMAND> runs it will get \\f(CRbanana\\fR at the "
+"beginning of the list, and as new picks happen their weight will increase, "
+"and will keep going up in priority."
+msgstr ""
+
+#. type: Plain text
+#: doc/remembering.en.5:55
+msgid ""
+"The entries of the I<PROFILE> are created and kept sorted. "
+"B<remembering>(1) expects to always find sorted entries in the I<PROFILE>."
+msgstr ""
+
+#. type: Plain text
+#: doc/remembering.en.5:58
+msgid ""
+"The current raking algorithm increments entries as a simple counter. Every "
+"time an entry is picked, its ranked is incremented in the I<PROFILE>."
+msgstr ""
+
+#. type: SH
+#: doc/remembering.en.5:60
+#, no-wrap
+msgid "SEE ALSO"
+msgstr "VIDU ANKAŬ"
+
+#. type: Plain text
+#: doc/remembering.en.5:63
+msgid "B<remembering>(1)"
+msgstr ""
+
+#. type: SH
+#: doc/remembering.en.5:65
+#, no-wrap
+msgid "AUTHORS"
+msgstr "AŬTOROJ"
+
+#. type: Plain text
+#: doc/remembering.en.5:71
+msgid "E<.MT eu@euandre.org> EuAndreh E<.ME> and contributors."
+msgstr "E<.MT eu@euandre.org> EuAndreh E<.ME> kaj la kontribuuloj."
+
+#. type: SH
+#: doc/remembering.en.5:73
+#, no-wrap
+msgid "BUGS"
+msgstr "MISFUNKCIOJ"
+
+#. type: IP
+#: doc/remembering.en.5:75 doc/remembering.en.5:82 doc/remembering.en.5:87
+#: doc/remembering.en.5:91
+#, no-wrap
+msgid "\\(bu"
+msgstr "\\(bu"
+
+#. type: Plain text
+#: doc/remembering.en.5:82
+msgid ""
+"Report bugs to the E<.MT ~euandreh/public-inbox@lists.sr.ht> mailing list E<."
+"ME .> Use the subject \"\\f(CR[remembering] BUG or TASK: "
+"E<lt>descriptionE<gt>\\fR\"."
+msgstr ""
+"Raportu misfunkcioj al la E<.MT ~euandreh/public-inbox@lists.sr.ht> "
+"dissendolisto E<.ME .> Uzu la subjekton \"\\f(CR[remembering] BUG aŭ TASK: "
+"E<lt>priskriboE<gt>\\fR\"."
+
+#. type: Plain text
+#: doc/remembering.en.5:87
+msgid ""
+"Browse bugs E<.UR https://euandreh.xyz/remembering/TODOs.html> online E<.UE ."
+">"
+msgstr ""
+"Foliumu misfunkcioj E<.UR https://euandreh.xyz/remembering/TODOs.html> rete "
+"E<.UE .>"
+
+#. type: Plain text
+#: doc/remembering.en.5:91
+msgid "E<.UR https://euandreh.xyz/remembering/> Homepage E<.UE .>"
+msgstr "E<.UR https://euandreh.xyz/remembering/> Ĉefpaĝo E<.UE .>"
+
+#. type: Plain text
+#: doc/remembering.en.5:94
+msgid ""
+"E<.UR https://lists.sr.ht/~euandreh/public-inbox?search=%5Bremembering%5D> "
+"Comments and discussions E<.UE .>"
+msgstr ""
+"E<.UR https://lists.sr.ht/~euandreh/public-inbox?search=%5Bremembering%5D> "
+"Komentoj kaj diskutoj E<.UE .>"
+
+#, no-wrap
+#~ msgid "SYNOPSYS"
+#~ msgstr "RESUMO"
+
+#, no-wrap
+#~ msgid "DESCRIPTION"
+#~ msgstr "PRISKRIBO"
+
+#, no-wrap
+#~ msgid "OPTIONS"
+#~ msgstr "EBLOJ"
+
+#, fuzzy, no-wrap
+#~| msgid "B<--help>, B<-h>"
+#~ msgid "B<-h>, B<--help>"
+#~ msgstr "B<--help>, B<-h>"
+
+#, fuzzy
+#~| msgid "Show show help text."
+#~ msgid "Show short help text."
+#~ msgstr "Montras helpmesaĝon."
+
+#, fuzzy, no-wrap
+#~| msgid "B<--version>, B<-V>"
+#~ msgid "B<-V>, B<--version>"
+#~ msgstr "B<--version>, B<-V>"
+
+#~ msgid "Show version number."
+#~ msgstr "Montras versian numeron."
+
+#, no-wrap
+#~ msgid "EXAMPLES"
+#~ msgstr "EKZEMPLOJ"
+
+#, no-wrap
+#~ msgid "GIT-PERMALINK"
+#~ msgstr "GIT-PERMALINK"
+
+#, no-wrap
+#~ msgid "git-permalink user manual"
+#~ msgstr "git-permalink uzmanlibro"
+
+#~ msgid ""
+#~ "git-permalink - Git extension to generate web permalinks of files in a "
+#~ "repository."
+#~ msgstr ""
+#~ "git-permalink - Git-etendo por generi interretajn konstantajn ligojn "
+#~ "(permalink) de dosieroj en deponejo."
+
+#~ msgid "B<git-permalink> [OPTIONS] I<FILE> [I<LINENO>]"
+#~ msgstr "B<git-permalink> [EBLOJ] I<DOSIERO> [I<LINIONO>]"
+
+#~ msgid ""
+#~ "B<git-permalink> will use Git itself to get a) the commit at I<HEAD> and "
+#~ "b) the I<remote.origin.url> via B<git-config>(1), and optionally c) an "
+#~ "URL template override. It then uses those values to build a permalink "
+#~ "URL, with the commit included on it to ensure it is I<permanent>, and "
+#~ "optionally the line number of the selected file."
+#~ msgstr ""
+#~ "B<git-permalink> uzas Git por akiri a) la commit ĉe I<HEAD> kaj b) la "
+#~ "I<remote.origin.url> per B<git-config>(1), kaj laŭvole c) URL ŝablono. "
+#~ "Ĝi tiam uzas tiujn por krei I<konstantan> URL ligon (permalink), kun la "
+#~ "commit ene por certigi ke ĝi estas konstantan, kaj laŭvole la linia "
+#~ "numero elektita."
+
+#~ msgid "B<git-permalink> then uses B<xdg-open>(1) to open the URL."
+#~ msgstr "B<git-permalink> tiam uzas B<xdg-open>(1) por malfermi la URL."
+
+#, no-wrap
+#~ msgid "B<-p>"
+#~ msgstr "B<-p>"
+
+#~ msgid ""
+#~ "Only print the web URL link, don't try to open it with B<xdg-open>(1) or "
+#~ "do anything else. By default this is turned off."
+#~ msgstr ""
+#~ "Nur presas la ligon, ne provas malfermi ĝin kun B<xdg-open>(1) aŭ fari "
+#~ "ion alian. Defaŭlte ĉi tio estas malŝaltita."
+
+#, no-wrap
+#~ msgid "OVERRIDES"
+#~ msgstr "SUPERREGOJ"
+
+#~ msgid ""
+#~ "If you want to configure the permalink URL template for a project with an "
+#~ "unsupported origin you can do so via B<git-config>(1)."
+#~ msgstr ""
+#~ "Se vi volas agordi la URL ŝablonon por projekto kun nesubtenita remoton, "
+#~ "vi povas uzi B<git-config>(1)."
+
+#~ msgid "There are two configuration options available:"
+#~ msgstr "Estas du agordaj elektoj disponeblaj:"
+
+#, no-wrap
+#~ msgid "B<git-permalink.template-file-commit>"
+#~ msgstr "B<git-permalink.template-file-commit>"
+
+#~ msgid ""
+#~ "An URL template where the name of the I<file> comes first, and the "
+#~ "I<commit> comes second. cgit uses this style of URL, with something like "
+#~ "in:"
+#~ msgstr ""
+#~ "URL ŝablono, kie la nomo de la I<dosiero> estas unue, kaj la I<commit> "
+#~ "estas due. cgit uzas ĉi tiun specon de URL, kiel en:"
+
+#, no-wrap
+#~ msgid "\thttps://git.euandreh.xyz/fallible/tree/%s?id=%s\n"
+#~ msgstr "\thttps://git.euandreh.xyz/fallible/tree/%s?id=%s\n"
+
+#~ msgid ""
+#~ "On this example, the name of the I<file> comes first and I<commit> comes "
+#~ "at the very end after \"id=\"."
+#~ msgstr ""
+#~ "Laŭ ĉi tiu ekzemplo, la nomo de la I<dosiero> estas unue kaj la I<commit> "
+#~ "estas fine post \"id=\"."
+
+#, no-wrap
+#~ msgid "B<git-permalink.template-commit-file>"
+#~ msgstr "B<git-permalink.template-commit-file>"
+
+#~ msgid ""
+#~ "An URL template where the I<commit> comes first, and the name of the "
+#~ "I<file> comes second. sourcehut uses this style of URL, with something "
+#~ "like:"
+#~ msgstr ""
+#~ "URL ŝablono, kie la I<commit> estas unue, kaj la nomo de la I<dosiero> "
+#~ "estas due. sourcehut uzas ĉi tiun specon de URL, kiel en:"
+
+#, no-wrap
+#~ msgid "\thttps://git.sr.ht/~sircmpwn/scdoc/tree/%s/item/%s\n"
+#~ msgstr "\thttps://git.sr.ht/~sircmpwn/scdoc/tree/%s/item/%s\n"
+
+#~ msgid ""
+#~ "On this example, the I<commit> comes first on the URL path, and the "
+#~ "I<file> name comes at the end."
+#~ msgstr ""
+#~ "Laŭ ĉi tiu ekzemplo, la I<commit> estas unue en la URL, kaj la nome de la "
+#~ "I<dosiero> estas poste."
+
+#~ msgid ""
+#~ "If none of those values are found by B<git-config>(1) and B<git-"
+#~ "permalink> can't guess the URL, it exits with an error."
+#~ msgstr ""
+#~ "Se neniu el tiuj estas estas trovita por B<git-config>(1) aŭ B<git-"
+#~ "permalink> ne povas diveni la URL, ĝi eliras erare."
+
+#, no-wrap
+#~ msgid "SUPPORTED REMOTES"
+#~ msgstr "SUBTENITAJ REMOTOJ"
+
+#~ msgid "The current supported remotes are:"
+#~ msgstr "La nunaj subtenitaj remotoj estas:"
+
+#~ msgid "git.euandreh.xyz (where git-permalink itself is hosted =p)"
+#~ msgstr "git.euandreh.xyz (kie git-permalink estas gastiga =p)"
+
+#~ msgid "sourcehut"
+#~ msgstr "sourcehut"
+
+#~ msgid "git.kernel.org"
+#~ msgstr "git.kernel.org"
+
+#~ msgid "savannah"
+#~ msgstr "savannah"
+
+#~ msgid "notabug"
+#~ msgstr "notabug"
+
+#~ msgid "codeberg"
+#~ msgstr "codeberg"
+
+#~ msgid "bitbucket"
+#~ msgstr "bitbucket"
+
+#~ msgid "pagure"
+#~ msgstr "pagure"
+
+#~ msgid "gitlab"
+#~ msgstr "gitlab"
+
+#~ msgid "github"
+#~ msgstr "github"
+
+#~ msgid "Patches to add support for more source code forges are welcome!"
+#~ msgstr "Ŝanĝoj por subteni pli da fontkodaj forĝejoj estas bonvenaj!"
+
+#~ msgid ""
+#~ "See E<.UR https://euandreh.xyz/git-permalink/TODOs.html#task-"
+#~ "cebc5298-17ad-5c60-dfa5-a25b66433a3a> #task-cebc5298-17ad-5c60-dfa5-"
+#~ "a25b66433a3a E<.UE> for discussion and more information."
+#~ msgstr ""
+#~ "Foliumu E<.UR https://euandreh.xyz/git-permalink/TODOs.html#task-"
+#~ "cebc5298-17ad-5c60-dfa5-a25b66433a3a> #task-cebc5298-17ad-5c60-dfa5-"
+#~ "a25b66433a3a E<.UE> por diskuto kaj pli da informoj."
+
+#~ msgid ""
+#~ "Open I<src/fold.c> of a project with its origin pointing to I<sourcehut>:"
+#~ msgstr ""
+#~ "Malfermas I<src/fold.c> de projekto kiu origino direktiĝas al "
+#~ "I<sourcehut>:"
+
+#, no-wrap
+#~ msgid ""
+#~ "\t$ git permalink src/fold.c 125\n"
+#~ "\tOpening https://git.sr.ht/~sircmpwn/ctools/tree/fbf17d92f5ed1c38983f73df912f051ad0f9ef2d/item/src/fold.c#L125\n"
+#~ msgstr ""
+#~ "\t$ git permalink src/fold.c 125\n"
+#~ "\tMalfermado de https://git.sr.ht/~sircmpwn/ctools/tree/fbf17d92f5ed1c38983f73df912f051ad0f9ef2d/item/src/fold.c#L125\n"
+
+#~ msgid ""
+#~ "Generate link for lines 59 through 94 of I<nongnu/packages/clojure.scm> "
+#~ "on a project hosted on I<gitlab>, but only print it I<without> opening "
+#~ "with B<xdg-open>(1):"
+#~ msgstr ""
+#~ "Kreas ligon por linioj 59 ĝis 94 de I<nongnu/packages/clojure.scm> en "
+#~ "projekto gastigita ĉe I<gitlab>, sed nur presu ĝin I<sen> malfermi kun "
+#~ "B<xdg-open>(1):"
+
+#, no-wrap
+#~ msgid ""
+#~ "\t$ git permalink -p nongnu/packages/clojure.scm 59-94\n"
+#~ "\thttps://gitlab.com/nonguix/nonguix/-/blob/c9d7f30bcbd3a6e3076e56a972c33963c73c4d58/nongnu/packages/clojure.scm#L59-94\n"
+#~ msgstr ""
+#~ "\t$ git permalink -p nongnu/packages/clojure.scm 59-94\n"
+#~ "\thttps://gitlab.com/nonguix/nonguix/-/blob/c9d7f30bcbd3a6e3076e56a972c33963c73c4d58/nongnu/packages/clojure.scm#L59-94\n"
+
+#~ msgid ""
+#~ "Configure an URL override, and open the file I<src/app_add.c> without "
+#~ "selecting an specific line:"
+#~ msgstr ""
+#~ "Agordas URL superrego, kaj malfermas la dosieron I<src/app_add.c> sen "
+#~ "elekti specifan linion:"
+
+#, no-wrap
+#~ msgid ""
+#~ "\t$ git config git-permalink.template-file-commit 'https://git.alpinelinux.org/apk-tools/tree/%s?id=%s'\n"
+#~ "\t$ git permalink src/app_add.c\n"
+#~ "\tOpening https://git.alpinelinux.org/apk-tools/tree/src/app_add.c?id=aeeb119fd8652c044cd5ceebce572b5c716914e3\n"
+#~ msgstr ""
+#~ "\t$ git config git-permalink.template-file-commit 'https://git.alpinelinux.org/apk-tools/tree/%s?id=%s'\n"
+#~ "\t$ git permalink src/app_add.c\n"
+#~ "\\Malfermado de https://git.alpinelinux.org/apk-tools/tree/src/app_add.c?id=aeeb119fd8652c044cd5ceebce572b5c716914e3\n"
+
+#~ msgid "B<git-config>(1) B<xdg-open>(1)"
+#~ msgstr "B<git-config>(1) B<xdg-open>(1)"
diff --git a/doc/fr.po b/doc/fr.po
new file mode 100644
index 0000000..e4d5e88
--- /dev/null
+++ b/doc/fr.po
@@ -0,0 +1,483 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: \n"
+"POT-Creation-Date: 2021-06-19 16:58-0300\n"
+"PO-Revision-Date: 2021-06-19 16:58-0300\n"
+"Last-Translator: \n"
+"Language-Team: \n"
+"Language: fr\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Poedit 2.4.3\n"
+
+#. type: TH
+#: doc/remembering.en.5:1
+#, no-wrap
+msgid "REMEMBERING"
+msgstr ""
+
+#. type: TH
+#: doc/remembering.en.5:1
+#, no-wrap
+msgid "@DATE@"
+msgstr "@DATE@"
+
+#. type: TH
+#: doc/remembering.en.5:1
+#, fuzzy, no-wrap
+#| msgid "git-permalink @VERSION@"
+msgid "remembering @VERSION@"
+msgstr "git-permalink @VERSION@"
+
+#. type: SH
+#: doc/remembering.en.5:4
+#, no-wrap
+msgid "NAME"
+msgstr "NOM"
+
+#. type: Plain text
+#: doc/remembering.en.5:7
+msgid "remembering - format of the I<PROFILE> text file."
+msgstr ""
+
+#. type: SH
+#: doc/remembering.en.5:9
+#, no-wrap
+msgid "PROFILE"
+msgstr ""
+
+#. type: Plain text
+#: doc/remembering.en.5:13
+msgid ""
+"The I<PROFILE> is a text file, stored on \\f(CR$XDG_DATA_HOME/profile-name"
+"\\fR if \\f(CR$XDG_DATA_HOME\\fR is defined. Otherwise, it lives in "
+"\\f(CR~/.local/share/remembering/profile-name\\fR."
+msgstr ""
+
+#. type: Plain text
+#: doc/remembering.en.5:15
+msgid "Each line of the I<PROFILE> contains three pieces of information:"
+msgstr ""
+
+#. type: IP
+#: doc/remembering.en.5:17
+#, no-wrap
+msgid "1"
+msgstr ""
+
+#. type: Plain text
+#: doc/remembering.en.5:19
+msgid "the B<rank> of the current entry;"
+msgstr ""
+
+#. type: IP
+#: doc/remembering.en.5:19
+#, no-wrap
+msgid "2"
+msgstr ""
+
+#. type: Plain text
+#: doc/remembering.en.5:21
+msgid "the \\f(CR:\\fR separator;"
+msgstr ""
+
+#. type: IP
+#: doc/remembering.en.5:21
+#, no-wrap
+msgid "3"
+msgstr ""
+
+#. type: Plain text
+#: doc/remembering.en.5:23
+msgid "the B<entry> itself."
+msgstr ""
+
+#. type: Plain text
+#: doc/remembering.en.5:26
+msgid ""
+"The B<rank> is a number, and the B<entry> is all the text until the end of "
+"the line after the \\f(CR:\\fR separator:"
+msgstr ""
+
+#. type: Plain text
+#: doc/remembering.en.5:34
+#, no-wrap
+msgid ""
+"0:an entry\n"
+"0:banana\n"
+"0:entry\n"
+"0:something\n"
+"0:zzz\n"
+msgstr ""
+
+#. type: Plain text
+#: doc/remembering.en.5:38
+msgid ""
+"Above is an example of a I<PROFILE> file where all the entries have the "
+"default B<rank> value: B<0>."
+msgstr ""
+
+#. type: Plain text
+#: doc/remembering.en.5:40
+msgid ""
+"If the I<COMMAND> runs and chooses \\f(CRbanana\\fR, the new I<PROFILE> will "
+"be:"
+msgstr ""
+
+#. type: Plain text
+#: doc/remembering.en.5:48
+#, no-wrap
+msgid ""
+"0:an entry\n"
+"1:banana\n"
+"0:entry\n"
+"0:something\n"
+"0:zzz\n"
+msgstr ""
+
+#. type: Plain text
+#: doc/remembering.en.5:52
+msgid ""
+"Now the next time the I<COMMAND> runs it will get \\f(CRbanana\\fR at the "
+"beginning of the list, and as new picks happen their weight will increase, "
+"and will keep going up in priority."
+msgstr ""
+
+#. type: Plain text
+#: doc/remembering.en.5:55
+msgid ""
+"The entries of the I<PROFILE> are created and kept sorted. "
+"B<remembering>(1) expects to always find sorted entries in the I<PROFILE>."
+msgstr ""
+
+#. type: Plain text
+#: doc/remembering.en.5:58
+msgid ""
+"The current raking algorithm increments entries as a simple counter. Every "
+"time an entry is picked, its ranked is incremented in the I<PROFILE>."
+msgstr ""
+
+#. type: SH
+#: doc/remembering.en.5:60
+#, no-wrap
+msgid "SEE ALSO"
+msgstr "VOIR AUSSI"
+
+#. type: Plain text
+#: doc/remembering.en.5:63
+msgid "B<remembering>(1)"
+msgstr ""
+
+#. type: SH
+#: doc/remembering.en.5:65
+#, no-wrap
+msgid "AUTHORS"
+msgstr "AUTEURS"
+
+#. type: Plain text
+#: doc/remembering.en.5:71
+msgid "E<.MT eu@euandre.org> EuAndreh E<.ME> and contributors."
+msgstr "E<.MT eu@euandre.org> EuAndreh E<.ME> et les contributeurs."
+
+#. type: SH
+#: doc/remembering.en.5:73
+#, no-wrap
+msgid "BUGS"
+msgstr "BUGS"
+
+#. type: IP
+#: doc/remembering.en.5:75 doc/remembering.en.5:82 doc/remembering.en.5:87
+#: doc/remembering.en.5:91
+#, no-wrap
+msgid "\\(bu"
+msgstr "\\(bu"
+
+#. type: Plain text
+#: doc/remembering.en.5:82
+msgid ""
+"Report bugs to the E<.MT ~euandreh/public-inbox@lists.sr.ht> mailing list E<."
+"ME .> Use the subject \"\\f(CR[remembering] BUG or TASK: "
+"E<lt>descriptionE<gt>\\fR\"."
+msgstr ""
+"Soumettre un bogue dans la E<.MT ~euandreh/public-inbox@lists.sr.ht> liste "
+"de diffusion E<.ME .> Utilise le sujèt \"\\f(CR[remembering] BUG ou TASK: "
+"E<lt>descriptionE<gt>\\fR\"."
+
+#. type: Plain text
+#: doc/remembering.en.5:87
+msgid ""
+"Browse bugs E<.UR https://euandreh.xyz/remembering/TODOs.html> online E<.UE ."
+">"
+msgstr ""
+"Parcourir les bogues E<.UR https://euandreh.xyz/remembering/TODOs.html> en "
+"ligne E<.UE .>"
+
+#. type: Plain text
+#: doc/remembering.en.5:91
+msgid "E<.UR https://euandreh.xyz/remembering/> Homepage E<.UE .>"
+msgstr "E<.UR https://euandreh.xyz/remembering/> Page d'accueil E<.UE .>"
+
+#. type: Plain text
+#: doc/remembering.en.5:94
+msgid ""
+"E<.UR https://lists.sr.ht/~euandreh/public-inbox?search=%5Bremembering%5D> "
+"Comments and discussions E<.UE .>"
+msgstr ""
+"E<.UR https://lists.sr.ht/~euandreh/public-inbox?search=%5Bremembering%5D> "
+"Commentaires et discussions E<.UE .>"
+
+#, no-wrap
+#~ msgid "SYNOPSYS"
+#~ msgstr "SYNOPSIS"
+
+#, no-wrap
+#~ msgid "DESCRIPTION"
+#~ msgstr "DESCRIPTION"
+
+#, no-wrap
+#~ msgid "OPTIONS"
+#~ msgstr "OPTIONS"
+
+#, fuzzy, no-wrap
+#~| msgid "B<--help>, B<-h>"
+#~ msgid "B<-h>, B<--help>"
+#~ msgstr "B<--help>, B<-h>"
+
+#, fuzzy
+#~| msgid "Show show help text."
+#~ msgid "Show short help text."
+#~ msgstr "Affiche message d'aide."
+
+#, fuzzy, no-wrap
+#~| msgid "B<--version>, B<-V>"
+#~ msgid "B<-V>, B<--version>"
+#~ msgstr "B<--version>, B<-V>"
+
+#~ msgid "Show version number."
+#~ msgstr "Imprime le numeró de version."
+
+#, no-wrap
+#~ msgid "EXAMPLES"
+#~ msgstr "EXAMPLES"
+
+#, no-wrap
+#~ msgid "GIT-PERMALINK"
+#~ msgstr "GIT-PERMALINK"
+
+#, no-wrap
+#~ msgid "git-permalink user manual"
+#~ msgstr "manual d'utilisateur de git-permalink"
+
+#~ msgid ""
+#~ "git-permalink - Git extension to generate web permalinks of files in a "
+#~ "repository."
+#~ msgstr ""
+#~ "git-permalink - extension Git pour génerér liens web permanent "
+#~ "(permalink) de fichiers dans un dépôt."
+
+#~ msgid "B<git-permalink> [OPTIONS] I<FILE> [I<LINENO>]"
+#~ msgstr "B<git-permalink> [OPTIONS] I<FICHIERS> [I<LINENO>]"
+
+#~ msgid ""
+#~ "B<git-permalink> will use Git itself to get a) the commit at I<HEAD> and "
+#~ "b) the I<remote.origin.url> via B<git-config>(1), and optionally c) an "
+#~ "URL template override. It then uses those values to build a permalink "
+#~ "URL, with the commit included on it to ensure it is I<permanent>, and "
+#~ "optionally the line number of the selected file."
+#~ msgstr ""
+#~ "B<git-permalink> utilise Git pour prendre a) le commit au I<HEAD> et b) "
+#~ "le I<remote.origin.url> avec B<git-config>(1), et se possible c) un "
+#~ "modèle de substituition d'URL. Il utilise ces valeurs pour construire un "
+#~ "URL I<permanent>, avec le commit inclus pour garantir la unicitè, e "
+#~ "optionalement le numeró de la ligne choisi."
+
+#~ msgid "B<git-permalink> then uses B<xdg-open>(1) to open the URL."
+#~ msgstr "B<git-permalink> après utilise B<xdg-open>(1) pour ouvrir l'URL."
+
+#, no-wrap
+#~ msgid "B<-p>"
+#~ msgstr "B<-p>"
+
+#~ msgid ""
+#~ "Only print the web URL link, don't try to open it with B<xdg-open>(1) or "
+#~ "do anything else. By default this is turned off."
+#~ msgstr ""
+#~ "Seulement imprimez le lien d'URL web, n'essayez pas de l'ouvrir avec "
+#~ "B<xdg-open>(1) ou faire quelques choses avec lui. Par défaut cela est "
+#~ "désactivé."
+
+#, no-wrap
+#~ msgid "OVERRIDES"
+#~ msgstr "MODÈLES"
+
+#~ msgid ""
+#~ "If you want to configure the permalink URL template for a project with an "
+#~ "unsupported origin you can do so via B<git-config>(1)."
+#~ msgstr ""
+#~ "Si vous souhaitez configurer le modèle de substitution d'URL pour un "
+#~ "projet que a un références distantes que n'est pas prises en charge, vous "
+#~ "utilize B<git-config>(1)."
+
+#~ msgid "There are two configuration options available:"
+#~ msgstr "Il y a deux options de configuration disponible:"
+
+#, no-wrap
+#~ msgid "B<git-permalink.template-file-commit>"
+#~ msgstr "B<git-permalink.template-file-commit>"
+
+#~ msgid ""
+#~ "An URL template where the name of the I<file> comes first, and the "
+#~ "I<commit> comes second. cgit uses this style of URL, with something like "
+#~ "in:"
+#~ msgstr ""
+#~ "Un modèle de substitution d'URL où le nom du I<fichier> est avant, et le "
+#~ "I<commit> est après. cgit utilise cette type d'URL, comme dans:"
+
+#, no-wrap
+#~ msgid "\thttps://git.euandreh.xyz/fallible/tree/%s?id=%s\n"
+#~ msgstr "\thttps://git.euandreh.xyz/fallible/tree/%s?id=%s\n"
+
+#~ msgid ""
+#~ "On this example, the name of the I<file> comes first and I<commit> comes "
+#~ "at the very end after \"id=\"."
+#~ msgstr ""
+#~ "Dans cet example, le nom du I<fichier> est avant et le I<commit> est à la "
+#~ "fin, après le \"id=\"."
+
+#, no-wrap
+#~ msgid "B<git-permalink.template-commit-file>"
+#~ msgstr "B<git-permalink.template-commit-file>"
+
+#~ msgid ""
+#~ "An URL template where the I<commit> comes first, and the name of the "
+#~ "I<file> comes second. sourcehut uses this style of URL, with something "
+#~ "like:"
+#~ msgstr ""
+#~ "Un modèle de substitution d'URL où le I<commit> est avant, et le nom du "
+#~ "I<fichier> est après. sourcehut utilise cette type d'URL, comme dans:"
+
+#, no-wrap
+#~ msgid "\thttps://git.sr.ht/~sircmpwn/scdoc/tree/%s/item/%s\n"
+#~ msgstr "\thttps://git.sr.ht/~sircmpwn/scdoc/tree/%s/item/%s\n"
+
+#~ msgid ""
+#~ "On this example, the I<commit> comes first on the URL path, and the "
+#~ "I<file> name comes at the end."
+#~ msgstr ""
+#~ "Dans cet example, le I<commit> est avant dans le chemin de l'URL, et le "
+#~ "I<fichier> est après."
+
+#~ msgid ""
+#~ "If none of those values are found by B<git-config>(1) and B<git-"
+#~ "permalink> can't guess the URL, it exits with an error."
+#~ msgstr ""
+#~ "Si aucune options n'est pas trouvé par B<git-config>(1) et B<git-"
+#~ "permalink> ne peut pas deviner l'URL, cela se termine par une erreur."
+
+#, no-wrap
+#~ msgid "SUPPORTED REMOTES"
+#~ msgstr "RÉFÉRENCES DISTANTES PRISES EN CHARGE"
+
+#~ msgid "The current supported remotes are:"
+#~ msgstr "La liste de références distantes prises en charge est:"
+
+#~ msgid "git.euandreh.xyz (where git-permalink itself is hosted =p)"
+#~ msgstr "git.euandreh.xyz (où git-permalink est hébergé =p)"
+
+#~ msgid "sourcehut"
+#~ msgstr "sourcehut"
+
+#~ msgid "git.kernel.org"
+#~ msgstr "git.kernel.org"
+
+#~ msgid "savannah"
+#~ msgstr "savannah"
+
+#~ msgid "notabug"
+#~ msgstr "notabug"
+
+#~ msgid "codeberg"
+#~ msgstr "codeberg"
+
+#~ msgid "bitbucket"
+#~ msgstr "bitbucket"
+
+#~ msgid "pagure"
+#~ msgstr "pagure"
+
+#~ msgid "gitlab"
+#~ msgstr "gitlab"
+
+#~ msgid "github"
+#~ msgstr "github"
+
+#~ msgid "Patches to add support for more source code forges are welcome!"
+#~ msgstr ""
+#~ "Les changements pour ajouter plus de sites d'hébergement de code sont les "
+#~ "bienvenus!"
+
+#~ msgid ""
+#~ "See E<.UR https://euandreh.xyz/git-permalink/TODOs.html#task-"
+#~ "cebc5298-17ad-5c60-dfa5-a25b66433a3a> #task-cebc5298-17ad-5c60-dfa5-"
+#~ "a25b66433a3a E<.UE> for discussion and more information."
+#~ msgstr ""
+#~ "Regarde E<.UR https://euandreh.xyz/git-permalink/TODOs.html#task-"
+#~ "cebc5298-17ad-5c60-dfa5-a25b66433a3a> #task-cebc5298-17ad-5c60-dfa5-"
+#~ "a25b66433a3a E<.UE> pour les discussions et plus d'information."
+
+#~ msgid ""
+#~ "Open I<src/fold.c> of a project with its origin pointing to I<sourcehut>:"
+#~ msgstr ""
+#~ "Ouvrez I<src/fold.c> d'un projet qui a de référence distante pointée a "
+#~ "I<sourcehut>:"
+
+#, no-wrap
+#~ msgid ""
+#~ "\t$ git permalink src/fold.c 125\n"
+#~ "\tOpening https://git.sr.ht/~sircmpwn/ctools/tree/fbf17d92f5ed1c38983f73df912f051ad0f9ef2d/item/src/fold.c#L125\n"
+#~ msgstr ""
+#~ "\t$ git permalink src/fold.c 125\n"
+#~ "\tOuverture de https://git.sr.ht/~sircmpwn/ctools/tree/fbf17d92f5ed1c38983f73df912f051ad0f9ef2d/item/src/fold.c#L125\n"
+
+#~ msgid ""
+#~ "Generate link for lines 59 through 94 of I<nongnu/packages/clojure.scm> "
+#~ "on a project hosted on I<gitlab>, but only print it I<without> opening "
+#~ "with B<xdg-open>(1):"
+#~ msgstr ""
+#~ "Géneréz un lien des lignes 59 à 94 de I<nongnu/packages/clojure.scm> dans "
+#~ "un projet hébergér sur I<gitlab>, mais seulement imprimez le lien I<sans> "
+#~ "l'ouvrir avec B<xdg-open>(1):"
+
+#, no-wrap
+#~ msgid ""
+#~ "\t$ git permalink -p nongnu/packages/clojure.scm 59-94\n"
+#~ "\thttps://gitlab.com/nonguix/nonguix/-/blob/c9d7f30bcbd3a6e3076e56a972c33963c73c4d58/nongnu/packages/clojure.scm#L59-94\n"
+#~ msgstr ""
+#~ "\t$ git permalink -p nongnu/packages/clojure.scm 59-94\n"
+#~ "\thttps://gitlab.com/nonguix/nonguix/-/blob/c9d7f30bcbd3a6e3076e56a972c33963c73c4d58/nongnu/packages/clojure.scm#L59-94\n"
+
+#~ msgid ""
+#~ "Configure an URL override, and open the file I<src/app_add.c> without "
+#~ "selecting an specific line:"
+#~ msgstr ""
+#~ "Configurez un modèle de substitution d'URL, et ouvrir le fichier I<src/"
+#~ "app_add.c> sans choisir un numeró de ligne:"
+
+#, no-wrap
+#~ msgid ""
+#~ "\t$ git config git-permalink.template-file-commit 'https://git.alpinelinux.org/apk-tools/tree/%s?id=%s'\n"
+#~ "\t$ git permalink src/app_add.c\n"
+#~ "\tOpening https://git.alpinelinux.org/apk-tools/tree/src/app_add.c?id=aeeb119fd8652c044cd5ceebce572b5c716914e3\n"
+#~ msgstr ""
+#~ "\t$ git config git-permalink.template-file-commit 'https://git.alpinelinux.org/apk-tools/tree/%s?id=%s'\n"
+#~ "\t$ git permalink src/app_add.c\n"
+#~ "\tOuverture de https://git.alpinelinux.org/apk-tools/tree/src/app_add.c?id=aeeb119fd8652c044cd5ceebce572b5c716914e3\n"
+
+#~ msgid "B<git-config>(1) B<xdg-open>(1)"
+#~ msgstr "B<git-config>(1) B<xdg-open>(1)"
diff --git a/doc/pt.po b/doc/pt.po
new file mode 100644
index 0000000..8ae65a7
--- /dev/null
+++ b/doc/pt.po
@@ -0,0 +1,482 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: \n"
+"POT-Creation-Date: 2021-06-19 16:58-0300\n"
+"PO-Revision-Date: 2021-06-19 16:58-0300\n"
+"Last-Translator: \n"
+"Language-Team: \n"
+"Language: pt\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Poedit 2.4.3\n"
+
+#. type: TH
+#: doc/remembering.en.5:1
+#, no-wrap
+msgid "REMEMBERING"
+msgstr ""
+
+#. type: TH
+#: doc/remembering.en.5:1
+#, no-wrap
+msgid "@DATE@"
+msgstr "@DATE@"
+
+#. type: TH
+#: doc/remembering.en.5:1
+#, fuzzy, no-wrap
+#| msgid "git-permalink @VERSION@"
+msgid "remembering @VERSION@"
+msgstr "git-permalink @VERSION@"
+
+#. type: SH
+#: doc/remembering.en.5:4
+#, no-wrap
+msgid "NAME"
+msgstr "NOME"
+
+#. type: Plain text
+#: doc/remembering.en.5:7
+msgid "remembering - format of the I<PROFILE> text file."
+msgstr ""
+
+#. type: SH
+#: doc/remembering.en.5:9
+#, no-wrap
+msgid "PROFILE"
+msgstr ""
+
+#. type: Plain text
+#: doc/remembering.en.5:13
+msgid ""
+"The I<PROFILE> is a text file, stored on \\f(CR$XDG_DATA_HOME/profile-name"
+"\\fR if \\f(CR$XDG_DATA_HOME\\fR is defined. Otherwise, it lives in "
+"\\f(CR~/.local/share/remembering/profile-name\\fR."
+msgstr ""
+
+#. type: Plain text
+#: doc/remembering.en.5:15
+msgid "Each line of the I<PROFILE> contains three pieces of information:"
+msgstr ""
+
+#. type: IP
+#: doc/remembering.en.5:17
+#, no-wrap
+msgid "1"
+msgstr ""
+
+#. type: Plain text
+#: doc/remembering.en.5:19
+msgid "the B<rank> of the current entry;"
+msgstr ""
+
+#. type: IP
+#: doc/remembering.en.5:19
+#, no-wrap
+msgid "2"
+msgstr ""
+
+#. type: Plain text
+#: doc/remembering.en.5:21
+msgid "the \\f(CR:\\fR separator;"
+msgstr ""
+
+#. type: IP
+#: doc/remembering.en.5:21
+#, no-wrap
+msgid "3"
+msgstr ""
+
+#. type: Plain text
+#: doc/remembering.en.5:23
+msgid "the B<entry> itself."
+msgstr ""
+
+#. type: Plain text
+#: doc/remembering.en.5:26
+msgid ""
+"The B<rank> is a number, and the B<entry> is all the text until the end of "
+"the line after the \\f(CR:\\fR separator:"
+msgstr ""
+
+#. type: Plain text
+#: doc/remembering.en.5:34
+#, no-wrap
+msgid ""
+"0:an entry\n"
+"0:banana\n"
+"0:entry\n"
+"0:something\n"
+"0:zzz\n"
+msgstr ""
+
+#. type: Plain text
+#: doc/remembering.en.5:38
+msgid ""
+"Above is an example of a I<PROFILE> file where all the entries have the "
+"default B<rank> value: B<0>."
+msgstr ""
+
+#. type: Plain text
+#: doc/remembering.en.5:40
+msgid ""
+"If the I<COMMAND> runs and chooses \\f(CRbanana\\fR, the new I<PROFILE> will "
+"be:"
+msgstr ""
+
+#. type: Plain text
+#: doc/remembering.en.5:48
+#, no-wrap
+msgid ""
+"0:an entry\n"
+"1:banana\n"
+"0:entry\n"
+"0:something\n"
+"0:zzz\n"
+msgstr ""
+
+#. type: Plain text
+#: doc/remembering.en.5:52
+msgid ""
+"Now the next time the I<COMMAND> runs it will get \\f(CRbanana\\fR at the "
+"beginning of the list, and as new picks happen their weight will increase, "
+"and will keep going up in priority."
+msgstr ""
+
+#. type: Plain text
+#: doc/remembering.en.5:55
+msgid ""
+"The entries of the I<PROFILE> are created and kept sorted. "
+"B<remembering>(1) expects to always find sorted entries in the I<PROFILE>."
+msgstr ""
+
+#. type: Plain text
+#: doc/remembering.en.5:58
+msgid ""
+"The current raking algorithm increments entries as a simple counter. Every "
+"time an entry is picked, its ranked is incremented in the I<PROFILE>."
+msgstr ""
+
+#. type: SH
+#: doc/remembering.en.5:60
+#, no-wrap
+msgid "SEE ALSO"
+msgstr "VEJA TAMBÉM"
+
+#. type: Plain text
+#: doc/remembering.en.5:63
+msgid "B<remembering>(1)"
+msgstr ""
+
+#. type: SH
+#: doc/remembering.en.5:65
+#, no-wrap
+msgid "AUTHORS"
+msgstr "AUTORES"
+
+#. type: Plain text
+#: doc/remembering.en.5:71
+msgid "E<.MT eu@euandre.org> EuAndreh E<.ME> and contributors."
+msgstr "E<.MT eu@euandre.org> EuAndreh E<.ME> e colaboradores."
+
+#. type: SH
+#: doc/remembering.en.5:73
+#, no-wrap
+msgid "BUGS"
+msgstr "BUGS"
+
+#. type: IP
+#: doc/remembering.en.5:75 doc/remembering.en.5:82 doc/remembering.en.5:87
+#: doc/remembering.en.5:91
+#, no-wrap
+msgid "\\(bu"
+msgstr "\\(bu"
+
+#. type: Plain text
+#: doc/remembering.en.5:82
+msgid ""
+"Report bugs to the E<.MT ~euandreh/public-inbox@lists.sr.ht> mailing list E<."
+"ME .> Use the subject \"\\f(CR[remembering] BUG or TASK: "
+"E<lt>descriptionE<gt>\\fR\"."
+msgstr ""
+"Relate bugs na E<.MT ~euandreh/public-inbox@lists.sr.ht> lista de discussão "
+"E<.ME .> Use o assunto \"\\f(CR[remembering] BUG ou TASK: E<lt>descriçãoE<gt>"
+"\\fR\"."
+
+#. type: Plain text
+#: doc/remembering.en.5:87
+msgid ""
+"Browse bugs E<.UR https://euandreh.xyz/remembering/TODOs.html> online E<.UE ."
+">"
+msgstr ""
+"Veja os bugs E<.UR https://euandreh.xyz/remembering/TODOs.html> online E<."
+"UE .>"
+
+#. type: Plain text
+#: doc/remembering.en.5:91
+msgid "E<.UR https://euandreh.xyz/remembering/> Homepage E<.UE .>"
+msgstr "E<.UR https://euandreh.xyz/remembering/> Página inicial E<.UE .>"
+
+#. type: Plain text
+#: doc/remembering.en.5:94
+msgid ""
+"E<.UR https://lists.sr.ht/~euandreh/public-inbox?search=%5Bremembering%5D> "
+"Comments and discussions E<.UE .>"
+msgstr ""
+"E<.UR https://lists.sr.ht/~euandreh/public-inbox?search=%5Bremembering%5D> "
+"Comentários e discussões E<.UE .>"
+
+#, no-wrap
+#~ msgid "SYNOPSYS"
+#~ msgstr "SINOPSE"
+
+#, no-wrap
+#~ msgid "DESCRIPTION"
+#~ msgstr "DESCRIÇÃO"
+
+#, no-wrap
+#~ msgid "OPTIONS"
+#~ msgstr "OPÇÔES"
+
+#, fuzzy, no-wrap
+#~| msgid "B<--help>, B<-h>"
+#~ msgid "B<-h>, B<--help>"
+#~ msgstr "B<--help>, B<-h>"
+
+#, fuzzy
+#~| msgid "Show show help text."
+#~ msgid "Show short help text."
+#~ msgstr "Mostra mensagem de ajuda."
+
+#, fuzzy, no-wrap
+#~| msgid "B<--version>, B<-V>"
+#~ msgid "B<-V>, B<--version>"
+#~ msgstr "B<--version>, B<-V>"
+
+#~ msgid "Show version number."
+#~ msgstr "Imprime o número da versão."
+
+#, no-wrap
+#~ msgid "EXAMPLES"
+#~ msgstr "EXEMPLOS"
+
+#, no-wrap
+#~ msgid "GIT-PERMALINK"
+#~ msgstr "GIT-PERMALINK"
+
+#, no-wrap
+#~ msgid "git-permalink user manual"
+#~ msgstr "manual do usuário do git-permalink"
+
+#~ msgid ""
+#~ "git-permalink - Git extension to generate web permalinks of files in a "
+#~ "repository."
+#~ msgstr ""
+#~ "git-permalink - extensão Git para gerar links web permanentes (permalink) "
+#~ "de arquivos de um repositório."
+
+#~ msgid "B<git-permalink> [OPTIONS] I<FILE> [I<LINENO>]"
+#~ msgstr "B<git-permalink> [OPÇÕES] I<ARQUIVO> [I<NOLINHA>]"
+
+#~ msgid ""
+#~ "B<git-permalink> will use Git itself to get a) the commit at I<HEAD> and "
+#~ "b) the I<remote.origin.url> via B<git-config>(1), and optionally c) an "
+#~ "URL template override. It then uses those values to build a permalink "
+#~ "URL, with the commit included on it to ensure it is I<permanent>, and "
+#~ "optionally the line number of the selected file."
+#~ msgstr ""
+#~ "B<git-permalink> usa o próprio Git para pegar a) o commit do I<HEAD> e b) "
+#~ "o I<remote.origin.url> usando B<git-config>(1), e opcionalmente c) um "
+#~ "modelo de substituição de URL. Então ele usa esses valores para "
+#~ "construir o link para uma URL I<permanente> (permalink), com o commit "
+#~ "incluso para garantir sua unicidade, e opcionalmente o número da linha "
+#~ "selecionada."
+
+#~ msgid "B<git-permalink> then uses B<xdg-open>(1) to open the URL."
+#~ msgstr "B<git-permalink> depois usa o B<xdg-open>(1) para abrir a URL."
+
+#, no-wrap
+#~ msgid "B<-p>"
+#~ msgstr "B<-p>"
+
+#~ msgid ""
+#~ "Only print the web URL link, don't try to open it with B<xdg-open>(1) or "
+#~ "do anything else. By default this is turned off."
+#~ msgstr ""
+#~ "Somento imprime o link da URL web, não tenta abrí-lo com B<xdg-open>(1) "
+#~ "ou fazer qualquer coisa com ele. Por padrão isso está desligado."
+
+#, no-wrap
+#~ msgid "OVERRIDES"
+#~ msgstr "MODELOS"
+
+#~ msgid ""
+#~ "If you want to configure the permalink URL template for a project with an "
+#~ "unsupported origin you can do so via B<git-config>(1)."
+#~ msgstr ""
+#~ "Se você quiser configurar o modelo de substituição de URL de um projeto "
+#~ "que não tem suporte a um tipo de origem remota você pode fazê-lo com "
+#~ "B<git-config>(1)."
+
+#~ msgid "There are two configuration options available:"
+#~ msgstr "Há dois tipos de opções de configuração disponíveis:"
+
+#, no-wrap
+#~ msgid "B<git-permalink.template-file-commit>"
+#~ msgstr "B<git-permalink.template-file-commit>"
+
+#~ msgid ""
+#~ "An URL template where the name of the I<file> comes first, and the "
+#~ "I<commit> comes second. cgit uses this style of URL, with something like "
+#~ "in:"
+#~ msgstr ""
+#~ "Um modelo de substituição de URL em que o nome do I<arquivo> vem "
+#~ "primeiro, e o I<commit> vem depois. cgit usa esse tipo de URL, como em:"
+
+#, no-wrap
+#~ msgid "\thttps://git.euandreh.xyz/fallible/tree/%s?id=%s\n"
+#~ msgstr "\thttps://git.euandreh.xyz/fallible/tree/%s?id=%s\n"
+
+#~ msgid ""
+#~ "On this example, the name of the I<file> comes first and I<commit> comes "
+#~ "at the very end after \"id=\"."
+#~ msgstr ""
+#~ "Nesse exemplo, o nome do I<arquivo> vem primeiro e o I<commit> vem só no "
+#~ "final, depois do \"id=\"."
+
+#, no-wrap
+#~ msgid "B<git-permalink.template-commit-file>"
+#~ msgstr "B<git-permalink.template-commit-file>"
+
+#~ msgid ""
+#~ "An URL template where the I<commit> comes first, and the name of the "
+#~ "I<file> comes second. sourcehut uses this style of URL, with something "
+#~ "like:"
+#~ msgstr ""
+#~ "Um modelo de substituição de URL em que o I<commit> vem primeiro, e o "
+#~ "nome do I<arquivo> vem depois. sourcehut usa esse tipo de URL, como em:"
+
+#, no-wrap
+#~ msgid "\thttps://git.sr.ht/~sircmpwn/scdoc/tree/%s/item/%s\n"
+#~ msgstr "\thttps://git.sr.ht/~sircmpwn/scdoc/tree/%s/item/%s\n"
+
+#~ msgid ""
+#~ "On this example, the I<commit> comes first on the URL path, and the "
+#~ "I<file> name comes at the end."
+#~ msgstr ""
+#~ "Nesse exemplo, o I<commit> aparece primeiro no caminho da URL, e o nome "
+#~ "do I<arquivo> vem depois."
+
+#~ msgid ""
+#~ "If none of those values are found by B<git-config>(1) and B<git-"
+#~ "permalink> can't guess the URL, it exits with an error."
+#~ msgstr ""
+#~ "Se nenhuma das duas opções for encontrada pelo B<git-config>(1) e o B<git-"
+#~ "permalink> não consegue adivinhar a URL, ele termina com um erro."
+
+#, no-wrap
+#~ msgid "SUPPORTED REMOTES"
+#~ msgstr "ORIGENS REMOTAS COM SUPORTE"
+
+#~ msgid "The current supported remotes are:"
+#~ msgstr "A lista atual de origens remotas com suporte é:"
+
+#~ msgid "git.euandreh.xyz (where git-permalink itself is hosted =p)"
+#~ msgstr "git.euandreh.xyz (onde o próprio git-permalink está hospedado =p)"
+
+#~ msgid "sourcehut"
+#~ msgstr "sourcehut"
+
+#~ msgid "git.kernel.org"
+#~ msgstr "git.kernel.org"
+
+#~ msgid "savannah"
+#~ msgstr "savannah"
+
+#~ msgid "notabug"
+#~ msgstr "notabug"
+
+#~ msgid "codeberg"
+#~ msgstr "codeberg"
+
+#~ msgid "bitbucket"
+#~ msgstr "bitbucket"
+
+#~ msgid "pagure"
+#~ msgstr "pagure"
+
+#~ msgid "gitlab"
+#~ msgstr "gitlab"
+
+#~ msgid "github"
+#~ msgstr "github"
+
+#~ msgid "Patches to add support for more source code forges are welcome!"
+#~ msgstr ""
+#~ "Mudanças para adição de mais sites de hospedagem de código são bem-vindas!"
+
+#~ msgid ""
+#~ "See E<.UR https://euandreh.xyz/git-permalink/TODOs.html#task-"
+#~ "cebc5298-17ad-5c60-dfa5-a25b66433a3a> #task-cebc5298-17ad-5c60-dfa5-"
+#~ "a25b66433a3a E<.UE> for discussion and more information."
+#~ msgstr ""
+#~ "Veja E<.UR https://euandreh.xyz/git-permalink/TODOs.html#task-"
+#~ "cebc5298-17ad-5c60-dfa5-a25b66433a3a> #task-cebc5298-17ad-5c60-dfa5-"
+#~ "a25b66433a3a E<.UE> para discussão e mais informações."
+
+#~ msgid ""
+#~ "Open I<src/fold.c> of a project with its origin pointing to I<sourcehut>:"
+#~ msgstr ""
+#~ "Abre o arquivo I<src/fold.c> de um projeto com a origem apontada para o "
+#~ "I<sourcehut>:"
+
+#, no-wrap
+#~ msgid ""
+#~ "\t$ git permalink src/fold.c 125\n"
+#~ "\tOpening https://git.sr.ht/~sircmpwn/ctools/tree/fbf17d92f5ed1c38983f73df912f051ad0f9ef2d/item/src/fold.c#L125\n"
+#~ msgstr ""
+#~ "\t$ git permalink src/fold.c 125\n"
+#~ "\tAbrindo https://git.sr.ht/~sircmpwn/ctools/tree/fbf17d92f5ed1c38983f73df912f051ad0f9ef2d/item/src/fold.c#L125\n"
+
+#~ msgid ""
+#~ "Generate link for lines 59 through 94 of I<nongnu/packages/clojure.scm> "
+#~ "on a project hosted on I<gitlab>, but only print it I<without> opening "
+#~ "with B<xdg-open>(1):"
+#~ msgstr ""
+#~ "Gera um link das linhas 59 a 94 do arquivo I<nongnu/packages/clojure.scm> "
+#~ "em um projeto hospedado no I<gitlab>, mas somente o imprimie I<sem> abrí-"
+#~ "lo com B<xdg-open>(1):"
+
+#, no-wrap
+#~ msgid ""
+#~ "\t$ git permalink -p nongnu/packages/clojure.scm 59-94\n"
+#~ "\thttps://gitlab.com/nonguix/nonguix/-/blob/c9d7f30bcbd3a6e3076e56a972c33963c73c4d58/nongnu/packages/clojure.scm#L59-94\n"
+#~ msgstr ""
+#~ "\t$ git permalink -p nongnu/packages/clojure.scm 59-94\n"
+#~ "\thttps://gitlab.com/nonguix/nonguix/-/blob/c9d7f30bcbd3a6e3076e56a972c33963c73c4d58/nongnu/packages/clojure.scm#L59-94\n"
+
+#~ msgid ""
+#~ "Configure an URL override, and open the file I<src/app_add.c> without "
+#~ "selecting an specific line:"
+#~ msgstr ""
+#~ "Configura um modelo de URL, e abre o arquivo I<src/app_add.c> sem "
+#~ "selecionar uma linha específica:"
+
+#, no-wrap
+#~ msgid ""
+#~ "\t$ git config git-permalink.template-file-commit 'https://git.alpinelinux.org/apk-tools/tree/%s?id=%s'\n"
+#~ "\t$ git permalink src/app_add.c\n"
+#~ "\tOpening https://git.alpinelinux.org/apk-tools/tree/src/app_add.c?id=aeeb119fd8652c044cd5ceebce572b5c716914e3\n"
+#~ msgstr ""
+#~ "\t$ git config git-permalink.template-file-commit 'https://git.alpinelinux.org/apk-tools/tree/%s?id=%s'\n"
+#~ "\t$ git permalink src/app_add.c\n"
+#~ "\tAbrindo https://git.alpinelinux.org/apk-tools/tree/src/app_add.c?id=aeeb119fd8652c044cd5ceebce572b5c716914e3\n"
+
+#~ msgid "B<git-config>(1) B<xdg-open>(1)"
+#~ msgstr "B<git-config>(1) B<xdg-open>(1)"
diff --git a/doc/remembering.1 b/doc/remembering.en.1
index d1dea3a..8d34e4a 100644
--- a/doc/remembering.1
+++ b/doc/remembering.en.1
@@ -75,11 +75,11 @@ $ ls | fzf
.fi
.RE
-We begin creating a sample directory called "\fCexample/\fR", we cd into it and create 5 empty files: a, b, c, d and e.
+We begin creating a sample directory called "\f(CRexample/\fR", we cd into it and create 5 empty files: a, b, c, d and e.
-\fCls\fR can list the directory for us, in this case in alphabetical order.
+\f(CRls\fR can list the directory for us, in this case in alphabetical order.
-When we pipe the output of \fCls\fR into \fBfzf\fR(1), we are give given its prompt to pick one option:
+When we pipe the output of \f(CRls\fR into \fBfzf\fR(1), we are give given its prompt to pick one option:
.RS
.nf
@@ -145,7 +145,7 @@ d
.RE
So far we get the exact same behaviour, but saying extra things.
-We tell \fBremembering\fR that we want this specific \fIPROFILE\fR to be called "\fCtutorial-example\fR", and we give \fBremembering\fR the \fC'fzf'\fR command to be ran.
+We tell \fBremembering\fR that we want this specific \fIPROFILE\fR to be called "\f(CRtutorial-example\fR", and we give \fBremembering\fR the \f(CR'fzf'\fR command to be ran.
From now on if we run the exact same command again, \fBremembering\fR will \fIremember\fR that the last choice was "d", and put it in the beginning of the list, which \fBfzf\fR(1) happily displays in the order it was given:
@@ -188,10 +188,11 @@ and contributors.
.IP \(bu
Report bugs to the
-.MT ~euandreh/public-inbox@lists.sr.ht
+.MT ~euandreh/public\-inbox@lists.sr.ht
mailing list
.ME .
-Use the subject "\fC[remembering] BUG or TASK: <description>\fR".
+Use the subject "\f(CR[remembering] BUG or TASK:
+<description>\fR".
.IP \(bu
Browse bugs
.UR https://euandreh.xyz/remembering/TODOs.html
@@ -202,6 +203,6 @@ online
Homepage
.UE .
.IP \(bu
-.UR https://lists.sr.ht/~euandreh/public-inbox?search=%5Bremembering%5D
+.UR https://lists.sr.ht/~euandreh/public\-inbox?search=%5Bremembering%5D
Comments and discussions
.UE .
diff --git a/doc/remembering.5 b/doc/remembering.en.5
index 1e481fe..c9b482b 100644
--- a/doc/remembering.5
+++ b/doc/remembering.en.5
@@ -8,8 +8,8 @@ remembering - format of the \fIPROFILE\fR text file.
.SH PROFILE
-The \fIPROFILE\fR is a text file, stored on \fC$XDG_DATA_HOME/profile-name\fR if \fC$XDG_DATA_HOME\fR is defined.
-Otherwise, it lives in \fC~/.local/share/remembering/profile-name\fR.
+The \fIPROFILE\fR is a text file, stored on \f(CR$XDG_DATA_HOME/profile-name\fR if \f(CR$XDG_DATA_HOME\fR is defined.
+Otherwise, it lives in \f(CR~/.local/share/remembering/profile-name\fR.
Each line of the \fIPROFILE\fR contains three pieces of information:
@@ -17,12 +17,12 @@ Each line of the \fIPROFILE\fR contains three pieces of information:
.IP 1
the \fBrank\fR of the current entry;
.IP 2
-the \fC:\fR separator;
+the \f(CR:\fR separator;
.IP 3
the \fBentry\fR itself.
.RE
-The \fBrank\fR is a number, and the \fBentry\fR is all the text until the end of the line after the \fC:\fR separator:
+The \fBrank\fR is a number, and the \fBentry\fR is all the text until the end of the line after the \f(CR:\fR separator:
.RS
.nf
@@ -36,7 +36,7 @@ The \fBrank\fR is a number, and the \fBentry\fR is all the text until the end of
Above is an example of a \fIPROFILE\fR file where all the entries have the default \fBrank\fR value: \fB0\fR.
-If the \fICOMMAND\fR runs and chooses \fCbanana\fR, the new \fIPROFILE\fR will be:
+If the \fICOMMAND\fR runs and chooses \f(CRbanana\fR, the new \fIPROFILE\fR will be:
.RS
.nf
@@ -48,7 +48,7 @@ If the \fICOMMAND\fR runs and chooses \fCbanana\fR, the new \fIPROFILE\fR will b
.fi
.RE
-Now the next time the \fICOMMAND\fR runs it will get \fCbanana\fR at the beginning of the list, and as new picks happen their weight will increase, and will keep going up in priority.
+Now the next time the \fICOMMAND\fR runs it will get \f(CRbanana\fR at the beginning of the list, and as new picks happen their weight will increase, and will keep going up in priority.
The entries of the \fIPROFILE\fR are created and kept sorted.
\fBremembering\fR(1) expects to always find sorted entries in the \fIPROFILE\fR.
@@ -74,10 +74,11 @@ and contributors.
.IP \(bu
Report bugs to the
-.MT ~euandreh/public-inbox@lists.sr.ht
+.MT ~euandreh/public\-inbox@lists.sr.ht
mailing list
.ME .
-Use the subject "\fC[remembering] BUG or TASK: <description>\fR".
+Use the subject "\f(CR[remembering] BUG or TASK:
+<description>\fR".
.IP \(bu
Browse bugs
.UR https://euandreh.xyz/remembering/TODOs.html
@@ -88,6 +89,6 @@ online
Homepage
.UE .
.IP \(bu
-.UR https://lists.sr.ht/~euandreh/public-inbox?search=%5Bremembering%5D
+.UR https://lists.sr.ht/~euandreh/public\-inbox?search=%5Bremembering%5D
Comments and discussions
.UE .
diff --git a/doc/remembering.eo.1 b/doc/remembering.eo.1
new file mode 100644
index 0000000..13a674f
--- /dev/null
+++ b/doc/remembering.eo.1
@@ -0,0 +1,231 @@
+.\"*******************************************************************
+.\"
+.\" This file was generated with po4a. Translate the source file.
+.\"
+.\"*******************************************************************
+.TH REMEMBERING 1 @DATE@ "remembering @VERSION@"
+
+
+.SH NOMO
+
+remembering \- sort list from \fISTDIN\fP using past choices as weight.
+
+
+.SH RESUMO
+
+\fBremembering\fP \fB\-p\fP \fIPROFILE\fP \fB\-c\fP \fICOMMAND\fP
+
+
+.SH PRISKRIBO
+
+\fBremembering\fP takes a command that chooses an option as its behaviour, such
+as \fBfzf\fP(1) or \fBdmenu\fP(1), and \fIremembers\fP what option is chosen, and as
+it is used, will put the most used choices at the beginning of the list.
+
+\fBremembering\fP reads from STDIN and writes to STDOUT. It expects STDIN to
+be sorted.
+
+
+.SH EBLOJ
+
+.TP
+\fB\-c\fP \fICOMMAND\fP
+The \fICOMMAND\fP to be executed, reading from standard input (STDIN).
+
+.TP
+\fB\-p\fP \fIPROFILE\fP
+The name of the \fIPROFILE\fP where to look up and store raking data.
+
+.TP
+\fB\-h\fP, \fB\-\-help\fP
+Show short help text.
+
+.TP
+\fB\-V\fP, \fB\-\-version\fP
+Montras versian numeron.
+
+
+.SH EKZEMPLOJ
+
+List current directory and feed it to \fBfzf\fP(1) via \fBremembering\fP:
+
+.RS
+.nf
+$ ls | remembering \-p fzf\-ls \-c fzf
+.fi
+.RE
+
+
+Lists all executables available in \fI$PATH\fP, and feed those to \fBdmenu\fP(1)
+via \fBremembering\fP, and execute with \fBsh\fP(1) the choice picked:
+
+.RS
+.nf
+$ dmenu_path | remembering \-p dmenu\-exe \-c 'dmenu' | sh
+.fi
+.RE
+
+.P
+Successive invocations will put the frequent choices at the beginning.
+
+.SS "Simulation of an interactive session"
+
+Below is a simulation of an interactive session, comparing the usage of
+plain \fBfzf\fP(1) against composing it with \fBremembering\fP:
+
+.RS
+.nf
+$ mkdir \-p example/
+$ cd example/
+$ touch a b c d e
+$ ls
+a b c d e
+$ ls | fzf
+.fi
+.RE
+
+We begin creating a sample directory called "\f(CRexample/\fR", we cd into
+it and create 5 empty files: a, b, c, d and e.
+
+\f(CRls\fR can list the directory for us, in this case in alphabetical
+order.
+
+When we pipe the output of \f(CRls\fR into \fBfzf\fP(1), we are give given its
+prompt to pick one option:
+
+.RS
+.nf
+ e
+ d
+ c
+ b
+> a
+ 5/5
+>
+.fi
+.RE
+
+Here \fBfzf\fP(1) lists the items it gets from \fISTDIN\fP in the order that it
+was given, and starts at the first one, "a".
+
+Once we type "d" and press return, the output of \fBfzf\fP(1) is the choice:
+
+.RS
+.nf
+$ ls | fzf
+d
+.fi
+.RE
+
+Now if we run the same command again, we'll be given the same options, in
+the same order:
+
+.RS
+.nf
+$ ls | fzf
+
+ e
+ d
+ c
+ b
+> a
+ 5/5
+>
+
+$ ls | fzf
+d
+.fi
+.RE
+
+\fBfzf\fP(1) is doing what it is told to: making a prompt with the options
+given to it from \fISTDIN\fP, in the order it was given.
+
+In order to have our past choices show up in the beginning of the list, we
+can compose \fBfzf\fP(1) with \fBremembering\fP:
+
+.RS
+.nf
+$ ls | remembering \-p tutorial\-example \-c 'fzf'
+
+ e
+ d
+ c
+ b
+> a
+ 5/5
+>
+
+$ ls | remembering \-p tutorial\-example \-c 'fzf'
+d
+.fi
+.RE
+
+So far we get the exact same behaviour, but saying extra things. We tell
+\fBremembering\fP that we want this specific \fIPROFILE\fP to be called
+"\f(CRtutorial\-example\fR", and we give \fBremembering\fP the \f(CR'fzf'\fR
+command to be ran.
+
+From now on if we run the exact same command again, \fBremembering\fP will
+\fIremember\fP that the last choice was "d", and put it in the beginning of the
+list, which \fBfzf\fP(1) happily displays in the order it was given:
+
+.RS
+.nf
+$ ls | remembering \-p tutorial\-example \-c 'fzf'
+
+ e
+ c
+ b
+ a
+> d
+ 5/5
+>
+
+$ ls | remembering \-p tutorial\-example \-c 'fzf'
+d
+.fi
+.RE
+
+This time the "d" option was already the first one, and we can just press
+return to get it as the output value from the command.
+
+This example used \fBfzf\fP(1) as the \fICOMMAND\fP given to \fBremembering\fP, but
+you can give to the \fB\-c\fP option anything that reads from \fISTDIN\fP, picks a
+line and writes to \fBSTDOUT\fP.
+
+
+.SH "VIDU ANKAŬ"
+
+\fBremembering\fP(5)
+
+
+.SH AŬTOROJ
+
+.MT eu@euandre.org
+EuAndreh
+.ME
+kaj la kontribuuloj.
+
+
+.SH MISFUNKCIOJ
+
+.IP \(bu
+Raportu misfunkcioj al la
+.MT ~euandreh/public\-inbox@lists.sr.ht
+dissendolisto
+.ME .
+Uzu la subjekton "\f(CR[remembering] BUG aŭ TASK:
+<priskribo>\fR".
+.IP \(bu
+Foliumu misfunkcioj
+.UR https://euandreh.xyz/remembering/TODOs.html
+rete
+.UE .
+.IP \(bu
+.UR https://euandreh.xyz/remembering/
+Ĉefpaĝo
+.UE .
+.IP \(bu
+.UR https://lists.sr.ht/~euandreh/public\-inbox?search=%5Bremembering%5D
+Komentoj kaj diskutoj
+.UE .
diff --git a/doc/remembering.eo.5 b/doc/remembering.eo.5
new file mode 100644
index 0000000..f02787a
--- /dev/null
+++ b/doc/remembering.eo.5
@@ -0,0 +1,105 @@
+.\"*******************************************************************
+.\"
+.\" This file was generated with po4a. Translate the source file.
+.\"
+.\"*******************************************************************
+.TH REMEMBERING 5 @DATE@ "remembering @VERSION@"
+
+
+.SH NOMO
+
+remembering \- format of the \fIPROFILE\fP text file.
+
+
+.SH PROFILE
+
+The \fIPROFILE\fP is a text file, stored on \f(CR$XDG_DATA_HOME/profile\-name\fR
+if \f(CR$XDG_DATA_HOME\fR is defined. Otherwise, it lives in
+\f(CR~/.local/share/remembering/profile\-name\fR.
+
+Each line of the \fIPROFILE\fP contains three pieces of information:
+
+.RS
+.IP 1
+the \fBrank\fP of the current entry;
+.IP 2
+the \f(CR:\fR separator;
+.IP 3
+the \fBentry\fP itself.
+.RE
+
+The \fBrank\fP is a number, and the \fBentry\fP is all the text until the end of
+the line after the \f(CR:\fR separator:
+
+.RS
+.nf
+0:an entry
+0:banana
+0:entry
+0:something
+0:zzz
+.fi
+.RE
+
+Above is an example of a \fIPROFILE\fP file where all the entries have the
+default \fBrank\fP value: \fB0\fP.
+
+If the \fICOMMAND\fP runs and chooses \f(CRbanana\fR, the new \fIPROFILE\fP will
+be:
+
+.RS
+.nf
+0:an entry
+1:banana
+0:entry
+0:something
+0:zzz
+.fi
+.RE
+
+Now the next time the \fICOMMAND\fP runs it will get \f(CRbanana\fR at the
+beginning of the list, and as new picks happen their weight will increase,
+and will keep going up in priority.
+
+The entries of the \fIPROFILE\fP are created and kept sorted.
+\fBremembering\fP(1) expects to always find sorted entries in the \fIPROFILE\fP.
+
+The current raking algorithm increments entries as a simple counter. Every
+time an entry is picked, its ranked is incremented in the \fIPROFILE\fP.
+
+
+.SH "VIDU ANKAŬ"
+
+\fBremembering\fP(1)
+
+
+.SH AŬTOROJ
+
+.MT eu@euandre.org
+EuAndreh
+.ME
+kaj la kontribuuloj.
+
+
+.SH MISFUNKCIOJ
+
+.IP \(bu
+Raportu misfunkcioj al la
+.MT ~euandreh/public\-inbox@lists.sr.ht
+dissendolisto
+.ME .
+Uzu la subjekton "\f(CR[remembering] BUG aŭ TASK:
+<priskribo>\fR".
+.IP \(bu
+Foliumu misfunkcioj
+.UR https://euandreh.xyz/remembering/TODOs.html
+rete
+.UE .
+.IP \(bu
+.UR https://euandreh.xyz/remembering/
+Ĉefpaĝo
+.UE .
+.IP \(bu
+.UR https://lists.sr.ht/~euandreh/public\-inbox?search=%5Bremembering%5D
+Komentoj kaj diskutoj
+.UE .
diff --git a/doc/remembering.fr.1 b/doc/remembering.fr.1
new file mode 100644
index 0000000..95cf32e
--- /dev/null
+++ b/doc/remembering.fr.1
@@ -0,0 +1,233 @@
+.\"*******************************************************************
+.\"
+.\" This file was generated with po4a. Translate the source file.
+.\"
+.\"*******************************************************************
+.TH REMEMBERING 1 @DATE@ "remembering @VERSION@"
+
+
+.SH NOM
+
+remembering \- sort list from \fISTDIN\fP using past choices as weight.
+
+
+.SH SYNOPSIS
+
+\fBremembering\fP \fB\-p\fP \fIPROFILE\fP \fB\-c\fP \fICOMMAND\fP
+
+
+.SH DESCRIPTION
+
+\fBremembering\fP takes a command that chooses an option as its behaviour, such
+as \fBfzf\fP(1) or \fBdmenu\fP(1), and \fIremembers\fP what option is chosen, and as
+it is used, will put the most used choices at the beginning of the list.
+
+\fBremembering\fP reads from STDIN and writes to STDOUT. It expects STDIN to
+be sorted.
+
+
+.SH OPTIONS
+
+.TP
+\fB\-c\fP \fICOMMAND\fP
+The \fICOMMAND\fP to be executed, reading from standard input (STDIN).
+
+.TP
+\fB\-p\fP \fIPROFILE\fP
+The name of the \fIPROFILE\fP where to look up and store raking data.
+
+.TP
+\fB\-h\fP, \fB\-\-help\fP
+Show short help text.
+
+.TP
+\fB\-V\fP, \fB\-\-version\fP
+Imprime le numeró de version.
+
+
+.SH EXAMPLES
+
+List current directory and feed it to \fBfzf\fP(1) via \fBremembering\fP:
+
+.RS
+.nf
+$ ls | remembering \-p fzf\-ls \-c fzf
+.fi
+.RE
+
+
+Lists all executables available in \fI$PATH\fP, and feed those to \fBdmenu\fP(1)
+via \fBremembering\fP, and execute with \fBsh\fP(1) the choice picked:
+
+.RS
+.nf
+$ dmenu_path | remembering \-p dmenu\-exe \-c 'dmenu' | sh
+.fi
+.RE
+
+.P
+Successive invocations will put the frequent choices at the beginning.
+
+.SS "Simulation of an interactive session"
+
+Below is a simulation of an interactive session, comparing the usage of
+plain \fBfzf\fP(1) against composing it with \fBremembering\fP:
+
+.RS
+.nf
+$ mkdir \-p example/
+$ cd example/
+$ touch a b c d e
+$ ls
+a b c d e
+$ ls | fzf
+.fi
+.RE
+
+We begin creating a sample directory called "\f(CRexample/\fR", we cd into
+it and create 5 empty files: a, b, c, d and e.
+
+\f(CRls\fR can list the directory for us, in this case in alphabetical
+order.
+
+When we pipe the output of \f(CRls\fR into \fBfzf\fP(1), we are give given its
+prompt to pick one option:
+
+.RS
+.nf
+ e
+ d
+ c
+ b
+> a
+ 5/5
+>
+.fi
+.RE
+
+Here \fBfzf\fP(1) lists the items it gets from \fISTDIN\fP in the order that it
+was given, and starts at the first one, "a".
+
+Once we type "d" and press return, the output of \fBfzf\fP(1) is the choice:
+
+.RS
+.nf
+$ ls | fzf
+d
+.fi
+.RE
+
+Now if we run the same command again, we'll be given the same options, in
+the same order:
+
+.RS
+.nf
+$ ls | fzf
+
+ e
+ d
+ c
+ b
+> a
+ 5/5
+>
+
+$ ls | fzf
+d
+.fi
+.RE
+
+\fBfzf\fP(1) is doing what it is told to: making a prompt with the options
+given to it from \fISTDIN\fP, in the order it was given.
+
+In order to have our past choices show up in the beginning of the list, we
+can compose \fBfzf\fP(1) with \fBremembering\fP:
+
+.RS
+.nf
+$ ls | remembering \-p tutorial\-example \-c 'fzf'
+
+ e
+ d
+ c
+ b
+> a
+ 5/5
+>
+
+$ ls | remembering \-p tutorial\-example \-c 'fzf'
+d
+.fi
+.RE
+
+So far we get the exact same behaviour, but saying extra things. We tell
+\fBremembering\fP that we want this specific \fIPROFILE\fP to be called
+"\f(CRtutorial\-example\fR", and we give \fBremembering\fP the \f(CR'fzf'\fR
+command to be ran.
+
+From now on if we run the exact same command again, \fBremembering\fP will
+\fIremember\fP that the last choice was "d", and put it in the beginning of the
+list, which \fBfzf\fP(1) happily displays in the order it was given:
+
+.RS
+.nf
+$ ls | remembering \-p tutorial\-example \-c 'fzf'
+
+ e
+ c
+ b
+ a
+> d
+ 5/5
+>
+
+$ ls | remembering \-p tutorial\-example \-c 'fzf'
+d
+.fi
+.RE
+
+This time the "d" option was already the first one, and we can just press
+return to get it as the output value from the command.
+
+This example used \fBfzf\fP(1) as the \fICOMMAND\fP given to \fBremembering\fP, but
+you can give to the \fB\-c\fP option anything that reads from \fISTDIN\fP, picks a
+line and writes to \fBSTDOUT\fP.
+
+
+.SH "VOIR AUSSI"
+
+\fBremembering\fP(5)
+
+
+.SH AUTEURS
+
+.MT eu@euandre.org
+EuAndreh
+.ME
+et les contributeurs.
+
+
+.SH BUGS
+
+.IP \(bu
+Soumettre un bogue dans la
+.MT ~euandreh/public\-inbox@lists.sr.ht
+liste
+de diffusion
+.ME .
+Utilise le sujèt "\f(CR[remembering] BUG ou TASK:
+<description>\fR".
+.IP \(bu
+Parcourir les bogues
+.UR https://euandreh.xyz/remembering/TODOs.html
+en
+ligne
+.UE .
+.IP \(bu
+.UR https://euandreh.xyz/remembering/
+Page d'accueil
+.UE .
+.IP \(bu
+.UR https://lists.sr.ht/~euandreh/public\-inbox?search=%5Bremembering%5D
+Commentaires et discussions
+.UE .
diff --git a/doc/remembering.fr.5 b/doc/remembering.fr.5
new file mode 100644
index 0000000..c0e609b
--- /dev/null
+++ b/doc/remembering.fr.5
@@ -0,0 +1,107 @@
+.\"*******************************************************************
+.\"
+.\" This file was generated with po4a. Translate the source file.
+.\"
+.\"*******************************************************************
+.TH REMEMBERING 5 @DATE@ "remembering @VERSION@"
+
+
+.SH NOM
+
+remembering \- format of the \fIPROFILE\fP text file.
+
+
+.SH PROFILE
+
+The \fIPROFILE\fP is a text file, stored on \f(CR$XDG_DATA_HOME/profile\-name\fR
+if \f(CR$XDG_DATA_HOME\fR is defined. Otherwise, it lives in
+\f(CR~/.local/share/remembering/profile\-name\fR.
+
+Each line of the \fIPROFILE\fP contains three pieces of information:
+
+.RS
+.IP 1
+the \fBrank\fP of the current entry;
+.IP 2
+the \f(CR:\fR separator;
+.IP 3
+the \fBentry\fP itself.
+.RE
+
+The \fBrank\fP is a number, and the \fBentry\fP is all the text until the end of
+the line after the \f(CR:\fR separator:
+
+.RS
+.nf
+0:an entry
+0:banana
+0:entry
+0:something
+0:zzz
+.fi
+.RE
+
+Above is an example of a \fIPROFILE\fP file where all the entries have the
+default \fBrank\fP value: \fB0\fP.
+
+If the \fICOMMAND\fP runs and chooses \f(CRbanana\fR, the new \fIPROFILE\fP will
+be:
+
+.RS
+.nf
+0:an entry
+1:banana
+0:entry
+0:something
+0:zzz
+.fi
+.RE
+
+Now the next time the \fICOMMAND\fP runs it will get \f(CRbanana\fR at the
+beginning of the list, and as new picks happen their weight will increase,
+and will keep going up in priority.
+
+The entries of the \fIPROFILE\fP are created and kept sorted.
+\fBremembering\fP(1) expects to always find sorted entries in the \fIPROFILE\fP.
+
+The current raking algorithm increments entries as a simple counter. Every
+time an entry is picked, its ranked is incremented in the \fIPROFILE\fP.
+
+
+.SH "VOIR AUSSI"
+
+\fBremembering\fP(1)
+
+
+.SH AUTEURS
+
+.MT eu@euandre.org
+EuAndreh
+.ME
+et les contributeurs.
+
+
+.SH BUGS
+
+.IP \(bu
+Soumettre un bogue dans la
+.MT ~euandreh/public\-inbox@lists.sr.ht
+liste
+de diffusion
+.ME .
+Utilise le sujèt "\f(CR[remembering] BUG ou TASK:
+<description>\fR".
+.IP \(bu
+Parcourir les bogues
+.UR https://euandreh.xyz/remembering/TODOs.html
+en
+ligne
+.UE .
+.IP \(bu
+.UR https://euandreh.xyz/remembering/
+Page d'accueil
+.UE .
+.IP \(bu
+.UR https://lists.sr.ht/~euandreh/public\-inbox?search=%5Bremembering%5D
+Commentaires et discussions
+.UE .
diff --git a/doc/remembering.pt.1 b/doc/remembering.pt.1
new file mode 100644
index 0000000..3fcdf58
--- /dev/null
+++ b/doc/remembering.pt.1
@@ -0,0 +1,231 @@
+.\"*******************************************************************
+.\"
+.\" This file was generated with po4a. Translate the source file.
+.\"
+.\"*******************************************************************
+.TH REMEMBERING 1 @DATE@ "remembering @VERSION@"
+
+
+.SH NOME
+
+remembering \- sort list from \fISTDIN\fP using past choices as weight.
+
+
+.SH SINOPSE
+
+\fBremembering\fP \fB\-p\fP \fIPROFILE\fP \fB\-c\fP \fICOMMAND\fP
+
+
+.SH DESCRIÇÃO
+
+\fBremembering\fP takes a command that chooses an option as its behaviour, such
+as \fBfzf\fP(1) or \fBdmenu\fP(1), and \fIremembers\fP what option is chosen, and as
+it is used, will put the most used choices at the beginning of the list.
+
+\fBremembering\fP reads from STDIN and writes to STDOUT. It expects STDIN to
+be sorted.
+
+
+.SH OPÇÔES
+
+.TP
+\fB\-c\fP \fICOMMAND\fP
+The \fICOMMAND\fP to be executed, reading from standard input (STDIN).
+
+.TP
+\fB\-p\fP \fIPROFILE\fP
+The name of the \fIPROFILE\fP where to look up and store raking data.
+
+.TP
+\fB\-h\fP, \fB\-\-help\fP
+Show short help text.
+
+.TP
+\fB\-V\fP, \fB\-\-version\fP
+Imprime o número da versão.
+
+
+.SH EXEMPLOS
+
+List current directory and feed it to \fBfzf\fP(1) via \fBremembering\fP:
+
+.RS
+.nf
+$ ls | remembering \-p fzf\-ls \-c fzf
+.fi
+.RE
+
+
+Lists all executables available in \fI$PATH\fP, and feed those to \fBdmenu\fP(1)
+via \fBremembering\fP, and execute with \fBsh\fP(1) the choice picked:
+
+.RS
+.nf
+$ dmenu_path | remembering \-p dmenu\-exe \-c 'dmenu' | sh
+.fi
+.RE
+
+.P
+Successive invocations will put the frequent choices at the beginning.
+
+.SS "Simulation of an interactive session"
+
+Below is a simulation of an interactive session, comparing the usage of
+plain \fBfzf\fP(1) against composing it with \fBremembering\fP:
+
+.RS
+.nf
+$ mkdir \-p example/
+$ cd example/
+$ touch a b c d e
+$ ls
+a b c d e
+$ ls | fzf
+.fi
+.RE
+
+We begin creating a sample directory called "\f(CRexample/\fR", we cd into
+it and create 5 empty files: a, b, c, d and e.
+
+\f(CRls\fR can list the directory for us, in this case in alphabetical
+order.
+
+When we pipe the output of \f(CRls\fR into \fBfzf\fP(1), we are give given its
+prompt to pick one option:
+
+.RS
+.nf
+ e
+ d
+ c
+ b
+> a
+ 5/5
+>
+.fi
+.RE
+
+Here \fBfzf\fP(1) lists the items it gets from \fISTDIN\fP in the order that it
+was given, and starts at the first one, "a".
+
+Once we type "d" and press return, the output of \fBfzf\fP(1) is the choice:
+
+.RS
+.nf
+$ ls | fzf
+d
+.fi
+.RE
+
+Now if we run the same command again, we'll be given the same options, in
+the same order:
+
+.RS
+.nf
+$ ls | fzf
+
+ e
+ d
+ c
+ b
+> a
+ 5/5
+>
+
+$ ls | fzf
+d
+.fi
+.RE
+
+\fBfzf\fP(1) is doing what it is told to: making a prompt with the options
+given to it from \fISTDIN\fP, in the order it was given.
+
+In order to have our past choices show up in the beginning of the list, we
+can compose \fBfzf\fP(1) with \fBremembering\fP:
+
+.RS
+.nf
+$ ls | remembering \-p tutorial\-example \-c 'fzf'
+
+ e
+ d
+ c
+ b
+> a
+ 5/5
+>
+
+$ ls | remembering \-p tutorial\-example \-c 'fzf'
+d
+.fi
+.RE
+
+So far we get the exact same behaviour, but saying extra things. We tell
+\fBremembering\fP that we want this specific \fIPROFILE\fP to be called
+"\f(CRtutorial\-example\fR", and we give \fBremembering\fP the \f(CR'fzf'\fR
+command to be ran.
+
+From now on if we run the exact same command again, \fBremembering\fP will
+\fIremember\fP that the last choice was "d", and put it in the beginning of the
+list, which \fBfzf\fP(1) happily displays in the order it was given:
+
+.RS
+.nf
+$ ls | remembering \-p tutorial\-example \-c 'fzf'
+
+ e
+ c
+ b
+ a
+> d
+ 5/5
+>
+
+$ ls | remembering \-p tutorial\-example \-c 'fzf'
+d
+.fi
+.RE
+
+This time the "d" option was already the first one, and we can just press
+return to get it as the output value from the command.
+
+This example used \fBfzf\fP(1) as the \fICOMMAND\fP given to \fBremembering\fP, but
+you can give to the \fB\-c\fP option anything that reads from \fISTDIN\fP, picks a
+line and writes to \fBSTDOUT\fP.
+
+
+.SH "VEJA TAMBÉM"
+
+\fBremembering\fP(5)
+
+
+.SH AUTORES
+
+.MT eu@euandre.org
+EuAndreh
+.ME
+e colaboradores.
+
+
+.SH BUGS
+
+.IP \(bu
+Relate bugs na
+.MT ~euandreh/public\-inbox@lists.sr.ht
+lista de discussão
+.ME .
+Use o assunto "\f(CR[remembering] BUG ou TASK:
+<descrição>\fR".
+.IP \(bu
+Veja os bugs
+.UR https://euandreh.xyz/remembering/TODOs.html
+online
+.UE .
+.IP \(bu
+.UR https://euandreh.xyz/remembering/
+Página inicial
+.UE .
+.IP \(bu
+.UR https://lists.sr.ht/~euandreh/public\-inbox?search=%5Bremembering%5D
+Comentários e discussões
+.UE .
diff --git a/doc/remembering.pt.5 b/doc/remembering.pt.5
new file mode 100644
index 0000000..d261249
--- /dev/null
+++ b/doc/remembering.pt.5
@@ -0,0 +1,105 @@
+.\"*******************************************************************
+.\"
+.\" This file was generated with po4a. Translate the source file.
+.\"
+.\"*******************************************************************
+.TH REMEMBERING 5 @DATE@ "remembering @VERSION@"
+
+
+.SH NOME
+
+remembering \- format of the \fIPROFILE\fP text file.
+
+
+.SH PROFILE
+
+The \fIPROFILE\fP is a text file, stored on \f(CR$XDG_DATA_HOME/profile\-name\fR
+if \f(CR$XDG_DATA_HOME\fR is defined. Otherwise, it lives in
+\f(CR~/.local/share/remembering/profile\-name\fR.
+
+Each line of the \fIPROFILE\fP contains three pieces of information:
+
+.RS
+.IP 1
+the \fBrank\fP of the current entry;
+.IP 2
+the \f(CR:\fR separator;
+.IP 3
+the \fBentry\fP itself.
+.RE
+
+The \fBrank\fP is a number, and the \fBentry\fP is all the text until the end of
+the line after the \f(CR:\fR separator:
+
+.RS
+.nf
+0:an entry
+0:banana
+0:entry
+0:something
+0:zzz
+.fi
+.RE
+
+Above is an example of a \fIPROFILE\fP file where all the entries have the
+default \fBrank\fP value: \fB0\fP.
+
+If the \fICOMMAND\fP runs and chooses \f(CRbanana\fR, the new \fIPROFILE\fP will
+be:
+
+.RS
+.nf
+0:an entry
+1:banana
+0:entry
+0:something
+0:zzz
+.fi
+.RE
+
+Now the next time the \fICOMMAND\fP runs it will get \f(CRbanana\fR at the
+beginning of the list, and as new picks happen their weight will increase,
+and will keep going up in priority.
+
+The entries of the \fIPROFILE\fP are created and kept sorted.
+\fBremembering\fP(1) expects to always find sorted entries in the \fIPROFILE\fP.
+
+The current raking algorithm increments entries as a simple counter. Every
+time an entry is picked, its ranked is incremented in the \fIPROFILE\fP.
+
+
+.SH "VEJA TAMBÉM"
+
+\fBremembering\fP(1)
+
+
+.SH AUTORES
+
+.MT eu@euandre.org
+EuAndreh
+.ME
+e colaboradores.
+
+
+.SH BUGS
+
+.IP \(bu
+Relate bugs na
+.MT ~euandreh/public\-inbox@lists.sr.ht
+lista de discussão
+.ME .
+Use o assunto "\f(CR[remembering] BUG ou TASK:
+<descrição>\fR".
+.IP \(bu
+Veja os bugs
+.UR https://euandreh.xyz/remembering/TODOs.html
+online
+.UE .
+.IP \(bu
+.UR https://euandreh.xyz/remembering/
+Página inicial
+.UE .
+.IP \(bu
+.UR https://lists.sr.ht/~euandreh/public\-inbox?search=%5Bremembering%5D
+Comentários e discussões
+.UE .