aboutsummaryrefslogtreecommitdiff
path: root/locale/eo/LC_MESSAGES/_articles/2021-01-26-ann-remembering-add-memory-to-dmenu-fzf-and-similar-tools.po
blob: d3f11780a52d9e1a050285b09fff217aacb34d62 (about) (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
#
msgid ""
msgstr ""

msgid "title: \"ANN: remembering - Add memory to dmenu, fzf and similar tools\""
msgstr ""

msgid "date: 2021-01-26"
msgstr ""

msgid "layout: post"
msgstr ""

msgid "lang: en"
msgstr ""

msgid "ref: ann-remembering-add-memory-to-dmenu-fzf-and-similar-tools"
msgstr ""

msgid "Previous solution"
msgstr ""

msgid ""
"I previously used [yeganesh](http://dmwit.com/yeganesh/) fill this gap, but "
"as I started to rely less on Emacs, I added fzf as my go-to tool for doing "
"fuzzy searching on the terminal. But I didn't like that fzf always showed "
"the same order of things, when I would only need 3 or 4 commonly used files."
msgstr ""

msgid ""
"For those who don't know: yeganesh is a wrapper around dmenu that will "
"remember your most used programs and put them on the beginning of the list "
"of executables. This is very convenient for interactive prolonged use, as "
"with time the things you usually want are right at the very beginning."
msgstr ""

msgid ""
"But now I had this thing, yeganesh, that solved this problem for dmenu, but "
"didn't for fzf."
msgstr ""

msgid ""
"I initially considered patching yeganesh to support it, but I found it more "
"coupled to dmenu than I would desire. I'd rather have something that knows "
"nothing about dmenu, fzf or anything, but enhances tools like those in a "
"useful way."
msgstr ""

msgid "Implementation"
msgstr ""

msgid ""
"Other than being decoupled from dmenu, another improvement I though that "
"could be made on top of yeganesh is the programming language choice. Instead"
" of Haskell, I went with POSIX sh. Sticking to POSIX sh makes it require "
"less build-time dependencies. There aren't any, actually. Packaging is made "
"much easier due to that."
msgstr ""

msgid ""
"The good thing is that the program itself is small enough ([119 "
"lines](https://git.euandreh.xyz/remembering/tree/remembering?id=v0.1.0) on "
"v0.1.0) that POSIX sh does the job just fine, combined with other POSIX "
"utilities such as "
"[getopts](http://www.opengroup.org/onlinepubs/9699919799/utilities/getopts.html),"
" [sort](http://www.opengroup.org/onlinepubs/9699919799/utilities/sort.html) "
"and "
"[awk](http://www.opengroup.org/onlinepubs/9699919799/utilities/awk.html)."
msgstr ""

msgid ""
"The behaviour is: given a program that will read from STDIN and write a "
"single entry to STDOUT, `remembering` wraps that program, and rearranges "
"STDIN so that previous choices appear at the beginning."
msgstr ""

msgid "Where you would do:"
msgstr ""

msgid ""
"$ seq 5 | fzf\n"
"\n"
"  5\n"
"  4\n"
"  3\n"
"  2\n"
"> 1\n"
"  5/5\n"
">\n"
msgstr ""

msgid "And every time get the same order of numbers, now you can write:"
msgstr ""

msgid ""
"$ seq 5 | remembering -p seq-fzf -c fzf\n"
"\n"
"  5\n"
"  4\n"
"  3\n"
"  2\n"
"> 1\n"
"  5/5\n"
">\n"
msgstr ""

msgid ""
"On the first run, everything is the same. If you picked 4 on the previous "
"example, the following run would be different:"
msgstr ""

msgid ""
"$ seq 5 | remembering -p seq-fzf -c fzf\n"
"\n"
"  5\n"
"  3\n"
"  2\n"
"  1\n"
"> 4\n"
"  5/5\n"
">\n"
msgstr ""

msgid ""
"As time passes, the list would adjust based on the frequency of your "
"choices."
msgstr ""

msgid ""
"I aimed for reusability, so that I could wrap diverse commands with "
"`remembering` and it would be able to work. To accomplish that, a "
"\"profile\" (the `-p something` part) stores data about different runs "
"separately."
msgstr ""

msgid ""
"I took the idea of building something small with few dependencies to other "
"places too:"
msgstr ""

msgid "the tests are just more POSIX sh files;"
msgstr ""

msgid "and a POSIX Makefile to `check` and `install`."
msgstr ""

msgid ""
"I was aware of the value of sticking to coding to standards, but I had past "
"experience mostly with programming language standards, such as ECMAScript, "
"Common Lisp, Scheme, or with IndexedDB or DOM APIs. It felt good to "
"rediscover these nice POSIX tools, which makes me remember of a quote by "
"[Henry Spencer](https://en.wikipedia.org/wiki/Henry_Spencer#cite_note-3):"
msgstr ""

msgid "Those who do not understand Unix are condemned to reinvent it, poorly."
msgstr ""

msgid "Usage examples"
msgstr ""

msgid "Here are some functions I wrote myself that you may find useful:"
msgstr ""

msgid "Run a command with fzf on `$PWD`"
msgstr ""

msgid ""
"f() {\n"
"  profile=\"$f-shell-function(pwd | sed -e 's_/_-_g')\"\n"
"  file=\"$(git ls-files | \\\n"
"            remembering -p \"$profile\" \\\n"
"                        -c \"fzf --select-1 --exit -0 --query \\\"$2\\\" --preview 'cat {}'\")\"\n"
"  if [ -n \"$file\" ]; then\n"
"    # shellcheck disable=2068\n"
"    history -s f $@\n"
"    history -s \"$1\" \"$file\"\n"
"  \"$1\" \"$file\"\n"
"fi\n"
"}\n"
msgstr ""

msgid ""
"This way I can run `f vi` or `f vi config` at the root of a repository, and "
"the list of files will always appear on the most used order. Adding `pwd` to"
" the profile allows it to not mix data for different repositories."
msgstr ""

msgid "Copy password to clipboard"
msgstr ""

msgid ""
"choice=\"$(find \"$HOME/.password-store\" -type f                  | \\\n"
"            grep -Ev '(.git|.gpg-id)'                           | \\\n"
"            sed -e \"s|$HOME/.password-store/||\" -e 's/\\.gpg$//' | \\\n"
"            remembering -p password-store \\\n"
"                        -c 'dmenu -l 20 -i')\"\n"
"\n"
"\n"
"if [ -n \"$choice\" ]; then\n"
"  pass show \"$choice\" -c\n"
"fi\n"
msgstr ""

msgid ""
"Adding the above to a file and binding it to a keyboard shortcut, I can "
"access the contents of my [password store](https://www.passwordstore.org/), "
"with the entries ordered by usage."
msgstr ""

msgid "Replacing yeganesh"
msgstr ""

msgid "Where I previously had:"
msgstr ""

msgid "exe=$(yeganesh -x) && exec $exe\n"
msgstr ""

msgid "Now I have:"
msgstr ""

msgid "exe=$(dmenu_path | remembering -p dmenu-exec -c dmenu) && exec $exe\n"
msgstr ""

msgid "This way, the executables appear on order of usage."
msgstr ""

msgid ""
"If you don't have `dmenu_path`, you can get just the underlying `stest` tool"
" that looks at the executables available in your `$PATH`. Here's a juicy "
"one-liner to do it:"
msgstr ""

msgid ""
"$ wget -O- https://dl.suckless.org/tools/dmenu-5.0.tar.gz | \\\n"
"    tar Ozxf - dmenu-5.0/arg.h dmenu-5.0/stest.c          | \\\n"
"    sed 's|^#include \"arg.h\"$|// #include \"arg.h\"|'       | \\\n"
"    cc -xc - -o stest\n"
msgstr ""

msgid ""
"With the `stest` utility you'll be able to list executables in your `$PATH` "
"and pipe them to dmenu or something else yourself:"
msgstr ""

msgid ""
"$ (IFS=:; ./stest -flx $PATH;) | sort -u | remembering -p another-dmenu-exec"
" -c dmenu | sh\n"
msgstr ""

msgid "In fact, the code for `dmenu_path` is almost just like that."
msgstr ""

msgid "Conclusion"
msgstr ""

msgid "Patches welcome!"
msgstr ""

msgid ""
"Today I pushed v0.1.0 of [remembering](https://remembering.euandreh.xyz), a "
"tool to enhance the interactive usability of menu-like tools, such as "
"[dmenu](https://tools.suckless.org/dmenu/) and "
"[fzf](https://github.com/junegunn/fzf)."
msgstr ""

msgid "the manpages are written in troff directly;"
msgstr ""

msgid ""
"For my personal use, I've [packaged](https://git.euandreh.xyz/package-"
"repository/about/) `remembering` for GNU Guix and Nix. Packaging it to any "
"other distribution should be trivial, or just downloading the tarball and "
"running `[sudo] make install`."
msgstr ""

#~ msgid ""
#~ "For my personal use, I've packaged `remembering` for [GNU "
#~ "Guix](https://git.euandreh.xyz/euandreh-guix-channel/about/) and "
#~ "[Nix](https://git.euandreh.xyz/dotfiles/tree/nixos/not-on-"
#~ "nixpkgs/remembering.nix?id=0831444f745cf908e940407c3e00a61f6152961f). "
#~ "Packaging it to any other distribution should be trivial, or just "
#~ "downloading the tarball and running `[sudo] make install`."
#~ msgstr ""

#~ msgid "the man pages are written in troff directly;"
#~ msgstr ""

#~ msgid ""
#~ "Today I pushed v0.1.0 of "
#~ "[remembering](https://git.euandreh.xyz/remembering/about/), a tool to "
#~ "enhance the interactive usability of menu-like tools, such as "
#~ "[dmenu](https://tools.suckless.org/dmenu/) and "
#~ "[fzf](https://github.com/junegunn/fzf)."
#~ msgstr ""