vmail 0.0.1
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +4 -0
- data/NOTES +541 -0
- data/README.markdown +29 -0
- data/Rakefile +21 -0
- data/bin/vmail +11 -0
- data/bin/vmail_client +13 -0
- data/config/environment.rb +18 -0
- data/config/gmail.orig.yml +8 -0
- data/gmail.vim +180 -0
- data/lib/contacts_extractor.rb +50 -0
- data/lib/gmail.rb +145 -0
- data/lib/vmail.rb +45 -0
- data/lib/vmail/imap_client.rb +495 -0
- data/lib/vmail/message_formatter.rb +113 -0
- data/lib/vmail/string_ext.rb +11 -0
- data/lib/vmail/version.rb +3 -0
- data/test/base64_test.rb +13 -0
- data/test/fixtures/euc-kr-header.eml +23 -0
- data/test/fixtures/euc-kr-html.eml +162 -0
- data/test/fixtures/google-affiliate.eml +1049 -0
- data/test/fixtures/htmlbody.eml +68 -0
- data/test/fixtures/moleskine-html.eml +82 -0
- data/test/fixtures/textbody-nocontenttype.eml +118 -0
- data/test/fixtures/with-attachments.eml +123 -0
- data/test/message_formatter_test.rb +84 -0
- data/test/test_helper.rb +10 -0
- data/test/time_format_test.rb +15 -0
- data/viewer.vim +623 -0
- data/vmail.gemspec +23 -0
- data/wrapper.rb +8 -0
- metadata +117 -0
data/.gitignore
ADDED
data/NOTES
ADDED
@@ -0,0 +1,541 @@
|
|
1
|
+
|
2
|
+
interesting. the UID don't seem to be globally unique. two different
|
3
|
+
messages in 2 different mailboxes can have same UID
|
4
|
+
|
5
|
+
|
6
|
+
Mon Nov 22 23:12:49 EST 2010
|
7
|
+
|
8
|
+
- next, do window sensing and recreation. let user expand the message
|
9
|
+
detail window and shrink it with some key like <cr>
|
10
|
+
|
11
|
+
I need status windows that show how many messagesin a box, when it was
|
12
|
+
last updated, etc
|
13
|
+
|
14
|
+
This app is coming along well.
|
15
|
+
|
16
|
+
|
17
|
+
Another reason to not allow a divergent offline store is that when the
|
18
|
+
schema changes on an update, it's easier to have the user rebuild the
|
19
|
+
locate version of the GMAIL
|
20
|
+
|
21
|
+
|
22
|
+
Another anomaly. Threading seems to reverse the UIDs.
|
23
|
+
|
24
|
+
|
25
|
+
Imap tasks should be batched so that we don't have the overhead of an
|
26
|
+
imap login each time.
|
27
|
+
|
28
|
+
The vertial 3 pan view should have a different set of columns in the
|
29
|
+
message list window.
|
30
|
+
|
31
|
+
Need command to reprocess text translation, also to display way eml.
|
32
|
+
|
33
|
+
NEXT. Learn how to do a popup window. Try out other Vim plugins! Do some
|
34
|
+
research online.
|
35
|
+
|
36
|
+
OR, do replies.
|
37
|
+
|
38
|
+
- work on email formatting
|
39
|
+
|
40
|
+
Flag new messages. And position cursor correctly on a refresh.
|
41
|
+
|
42
|
+
|
43
|
+
|
44
|
+
|
45
|
+
|
46
|
+
inputlist()
|
47
|
+
|
48
|
+
|
49
|
+
winrestcmd() potentially useful
|
50
|
+
|
51
|
+
1resize 20|vert 1resize 84|2resize 18|vert 2resize 84|3resize 39|vert 3resize 84|
|
52
|
+
|
53
|
+
|
54
|
+
------------------------------------------------------------------------
|
55
|
+
Thu Nov 25 16:55:07 EST 2010 {{{1
|
56
|
+
|
57
|
+
Trying new schema and more unix-inspired approach. First, the schema is
|
58
|
+
changed to allow unique messages to be shared across mailboxes via
|
59
|
+
message_refs. The Mailbox model has been removed.
|
60
|
+
|
61
|
+
Second, the tools should be smaller and less interdependent. There
|
62
|
+
should be a tool just for getting a text list of UID for a mailbox, and
|
63
|
+
then another that takes a UID and pulls down the raw eml, which I can
|
64
|
+
then use for testing.
|
65
|
+
|
66
|
+
The tool to insert into data should take two arguments, the mailbox name
|
67
|
+
and the UID, and the raw eml into STDIN.
|
68
|
+
|
69
|
+
Set up a test harness for all this email caching and data extraction
|
70
|
+
with rspec or test unit
|
71
|
+
|
72
|
+
------------------------------------------------------------------------
|
73
|
+
Fri Nov 26 12:08:26 EST 2010 {{{1
|
74
|
+
|
75
|
+
I need a text extract tool that works like iconv command line tool.
|
76
|
+
|
77
|
+
Lots of little tools for my workbench.
|
78
|
+
|
79
|
+
|
80
|
+
Now, I'm thinking of ditching the database. Use one document of
|
81
|
+
concatenated EML with message and mailbox info incorporated.
|
82
|
+
|
83
|
+
|
84
|
+
I tried using folds to present the email headers but I'm not sure it
|
85
|
+
works. Too many key strokes to unfold, fold, move to next message, and
|
86
|
+
unfold. Also, search doesn't work as expected since it searches through
|
87
|
+
all the text.
|
88
|
+
|
89
|
+
This suggests that using the database might be the best solution.
|
90
|
+
|
91
|
+
|
92
|
+
OK I've experimented and found a reasonably fast way to do imap searchs
|
93
|
+
|
94
|
+
e.g.
|
95
|
+
|
96
|
+
ruby lib/gmail.rb FROM monit BEFORE 8-Aug-2010 SINCE 1-Jun-2010
|
97
|
+
|
98
|
+
Now the question is how to get from output to load a specific message
|
99
|
+
and then possibly reply to it.
|
100
|
+
|
101
|
+
And later, we need to keep a contact list somehow.
|
102
|
+
|
103
|
+
I also forgot how an email is sent with sendmail. Maybe with
|
104
|
+
authentication.
|
105
|
+
|
106
|
+
------------------------------------------------------------------------
|
107
|
+
Sun Nov 28 10:42:50 EST 2010
|
108
|
+
|
109
|
+
Got threaded message list fetch working
|
110
|
+
|
111
|
+
Marking messages for deletion or starring could be done very simply:
|
112
|
+
Just add a mark '*' or 'D' to the beginning of lines that should be
|
113
|
+
starred or deleted, then press a command key.
|
114
|
+
|
115
|
+
Just put one commented line at top of generated list. This is so the
|
116
|
+
viewer can refresh the list on demand when the user wants to. But the
|
117
|
+
focus should be on generating these imap search result lists from the
|
118
|
+
command line and saving the output to a file. Then the use can view the
|
119
|
+
file in the viewer. Should the file serve as a virtual mailbox?
|
120
|
+
|
121
|
+
User can alway do "search command | tee inbox" periodically and then
|
122
|
+
view the inbox in the viewer when a new message arrives.
|
123
|
+
|
124
|
+
There are even ways of setting up watches from the command to see if a
|
125
|
+
new message arrives in a certain mailbox. These recipes should be
|
126
|
+
written up in a tutorial on the website.
|
127
|
+
|
128
|
+
|
129
|
+
Wrote a wrapper startup script that you invoke like so
|
130
|
+
|
131
|
+
./wrapper inbox 20 all
|
132
|
+
./wrapper inbox 20 subject instantwatcher
|
133
|
+
|
134
|
+
This will generate the list file and open the viewer on it.
|
135
|
+
|
136
|
+
I think this is the workflow I want. It keeps the viewer lightweight and
|
137
|
+
prevents it from becoming a captive user interface.
|
138
|
+
|
139
|
+
|
140
|
+
|
141
|
+
Remember to convert uid to_i before calling IMAP methods.
|
142
|
+
|
143
|
+
Need to figure out a way to flag a line and show the change. Do we have
|
144
|
+
to use Vim data structures?
|
145
|
+
|
146
|
+
Also, be careful. The f command throws an error when there is no mailbox
|
147
|
+
and search term information at the top of the message list.
|
148
|
+
|
149
|
+
|
150
|
+
Make a view mode that lets one simple page through the messages and keep
|
151
|
+
track of which message is visible.
|
152
|
+
|
153
|
+
TODO Try d for trash and D for permanent Delete.
|
154
|
+
|
155
|
+
|
156
|
+
http://stackoverflow.com/questions/1430866/gmail-threading-imap-and-ruby
|
157
|
+
|
158
|
+
------------------------------------------------------------------------
|
159
|
+
Tue Nov 30 07:30:19 EST 2010
|
160
|
+
|
161
|
+
Start from command line, and then quit. Not meant to be an application
|
162
|
+
that you keep open. At least not for my uses.
|
163
|
+
|
164
|
+
But it would be better to start up the app in the Ruby wrapper
|
165
|
+
|
166
|
+
If it's contained in vim, I can use append(lnum, list) to insert
|
167
|
+
previous messages to the top of the buffer as the user scrolls back.
|
168
|
+
|
169
|
+
So two things to accomplish this morning:
|
170
|
+
1. start the application in a Ruby wrapper
|
171
|
+
2. select mailbox from viewer
|
172
|
+
3. infinite paging back
|
173
|
+
|
174
|
+
Done:
|
175
|
+
1. Ruby wrapper
|
176
|
+
2. Update the current mailbox
|
177
|
+
3. Fast deletes, range flagging
|
178
|
+
4. slightly better multipart displaying
|
179
|
+
|
180
|
+
Won't do:
|
181
|
+
- infinite paging
|
182
|
+
- starting mailbox from viewer
|
183
|
+
|
184
|
+
TODO
|
185
|
+
- send messages
|
186
|
+
|
187
|
+
|
188
|
+
Unicode korean characters are wider than ascii characters, so this will
|
189
|
+
mess up alignment, but I don't know what I can do about this.
|
190
|
+
|
191
|
+
------------------------------------------------------------------------
|
192
|
+
Wed Dec 1 15:39:39 EST 2010
|
193
|
+
|
194
|
+
- got composing messages working, switching between full screen message
|
195
|
+
view and list view
|
196
|
+
|
197
|
+
TODO
|
198
|
+
- reply to messages
|
199
|
+
|
200
|
+
contacts
|
201
|
+
- import contacts by looking at sent mailbox. save contacts into a file
|
202
|
+
and use that for autocompletion
|
203
|
+
|
204
|
+
split reply window veritcally: that's the way I wanted this interface
|
205
|
+
|
206
|
+
Quoting emails:
|
207
|
+
|
208
|
+
http://en.wikipedia.org/wiki/Posting_style
|
209
|
+
|
210
|
+
stackoverflow:
|
211
|
+
|
212
|
+
If you get the raw source of the messages you can relate messages to one
|
213
|
+
another by looking at the following headers:
|
214
|
+
|
215
|
+
Message-ID:
|
216
|
+
<097819EBC7F79F4A850C8F088D35927302442A82AA@xxxxxxxxxxxxxxxxxxx>
|
217
|
+
References: <4A8BE8F3.2060007@xxxxxxxxxxxxxx>
|
218
|
+
In-Reply-To: <4A8BE8F3.2060007@xxxxxxxxxxxxxxx>
|
219
|
+
link|flag
|
220
|
+
answered Aug 28 '09 at 7:23
|
221
|
+
Kees de Kooter
|
222
|
+
1,7341512
|
223
|
+
|
224
|
+
|
225
|
+
TODO
|
226
|
+
- get full email addresses including names
|
227
|
+
- fix reply to quote header
|
228
|
+
- address book
|
229
|
+
- later:
|
230
|
+
- append to text file
|
231
|
+
- display and save attachments
|
232
|
+
Thurs
|
233
|
+
- start packaging
|
234
|
+
- need a better way to refresh a stale IMAP connection
|
235
|
+
- try wrapping client calls with Timeout. Then call daemon to refresh
|
236
|
+
connection if things take too long.
|
237
|
+
|
238
|
+
* Need to save mail list buffer or else it forgets what user has flagged
|
239
|
+
or deleted.
|
240
|
+
|
241
|
+
|
242
|
+
- will have to write out message list buffer
|
243
|
+
|
244
|
+
- IMAP fails from parsing email from
|
245
|
+
|
246
|
+
D, [2010-12-02T04:14:47.034816 #26464] DEBUG -- : error fetching uid
|
247
|
+
83682
|
248
|
+
D, [2010-12-02T04:14:47.034884 #26464] DEBUG -- : unknown token -
|
249
|
+
"\"[Christian" (Net::IMAP::ResponseParseError)
|
250
|
+
|
251
|
+
|
252
|
+
It is vital to rewrite the message list buffer to file. This is a
|
253
|
+
significant bug. Since new messages gotten via update disappear when
|
254
|
+
coming back from full screen message view.
|
255
|
+
|
256
|
+
Also, let use go forward and back while reading full messages.
|
257
|
+
Or even in split view. Don't bind n since we need it for search. Use
|
258
|
+
CTRL-n, CTRL-p? or leader n leader
|
259
|
+
|
260
|
+
Need better recovery from expired IMAP session. At least some kind of
|
261
|
+
warning so that use retries the previous action that failed.
|
262
|
+
|
263
|
+
TODO
|
264
|
+
- gmail charset correction
|
265
|
+
|
266
|
+
|
267
|
+
------------------------------------------------------------------------
|
268
|
+
Tue Dec 7 09:36:01 EST 2010
|
269
|
+
|
270
|
+
Instead of autocomplete mailbox chooser, have a generic search command
|
271
|
+
line buffer that might autocomplete the mailbox for you.
|
272
|
+
|
273
|
+
This simplifies the user interface and makes it more coherent.
|
274
|
+
|
275
|
+
You will always specify a mailbox and a command. Get the user used to
|
276
|
+
doing searches like this.
|
277
|
+
|
278
|
+
I'm also thinking of keep the viewer thin and not that featureful.
|
279
|
+
I'll emphasize the command line features, like using search criteria to
|
280
|
+
pipe emails into a text file.
|
281
|
+
|
282
|
+
Change the architecture so that the daemon is fired up in a separate
|
283
|
+
process.
|
284
|
+
|
285
|
+
I don't think I need to download the RFC822 header, the envelope has
|
286
|
+
this data.
|
287
|
+
|
288
|
+
Done.
|
289
|
+
|
290
|
+
Next, in the search window, I can keep a history of previous searches.
|
291
|
+
And just execute the command that the user hits carriage return on.
|
292
|
+
|
293
|
+
ENVELOPE: !ruby/struct:Net::IMAP::Envelope
|
294
|
+
date: Tue, 7 Dec 2010 11:25:47 -0500
|
295
|
+
subject: "Error message: /titles.new"
|
296
|
+
from:
|
297
|
+
- !ruby/struct:Net::IMAP::Address
|
298
|
+
name:
|
299
|
+
route:
|
300
|
+
mailbox: error
|
301
|
+
host: instantwatcher.com
|
302
|
+
sender:
|
303
|
+
- !ruby/struct:Net::IMAP::Address
|
304
|
+
name:
|
305
|
+
route:
|
306
|
+
mailbox: error
|
307
|
+
host: instantwatcher.com
|
308
|
+
reply_to:
|
309
|
+
- !ruby/struct:Net::IMAP::Address
|
310
|
+
name:
|
311
|
+
route:
|
312
|
+
mailbox: error
|
313
|
+
host: instantwatcher.com
|
314
|
+
to:
|
315
|
+
- !ruby/struct:Net::IMAP::Address
|
316
|
+
name:
|
317
|
+
route:
|
318
|
+
mailbox: dhchoi
|
319
|
+
host: gmail.com
|
320
|
+
cc:
|
321
|
+
bcc:
|
322
|
+
in_reply_to:
|
323
|
+
message_id: <4cfe600b1cd1f_202540e109c8ee@ubuntu.tmail>
|
324
|
+
|
325
|
+
|
326
|
+
|
327
|
+
|
328
|
+
(druby://127.0.0.1:61676) /Users/choi/.rvm/rubies/ruby-1.9.2-p0/lib/ruby/1.9.1/net/imap.rb:3235:in `parse_error': unknown token - "\"[Christian" (Net::IMAP::ResponseParseError)
|
329
|
+
from (druby://127.0.0.1:61676) /Users/choi/.rvm/rubies/ruby-1.9.2-p0/lib/ruby/1.9.1/net/imap.rb:3180:in `next_token'
|
330
|
+
from (druby://127.0.0.1:61676) /Users/choi/.rvm/rubies/ruby-1.9.2-p0/lib/ruby/1.9.1/net/imap.rb:3097:in `lookahead'
|
331
|
+
from (druby://127.0.0.1:61676) /Users/choi/.rvm/rubies/ruby-1.9.2-p0/lib/ruby/1.9.1/net/imap.rb:2995:in `nstring'
|
332
|
+
from (druby://127.0.0.1:61676) /Users/choi/.rvm/rubies/ruby-1.9.2-p0/lib/ruby/1.9.1/net/imap.rb:2183:in `envelope'
|
333
|
+
from (druby://127.0.0.1:61676) /Users/choi/.rvm/rubies/ruby-1.9.2-p0/lib/ruby/1.9.1/net/imap.rb:2170:in `envelope_data'
|
334
|
+
from (druby://127.0.0.1:61676) /Users/choi/.rvm/rubies/ruby-1.9.2-p0/lib/ruby/1.9.1/net/imap.rb:2145:in `msg_att'
|
335
|
+
from (druby://127.0.0.1:61676) /Users/choi/.rvm/rubies/ruby-1.9.2-p0/lib/ruby/1.9.1/net/imap.rb:2125:in `numeric_response'
|
336
|
+
from (druby://127.0.0.1:61676) /Users/choi/.rvm/rubies/ruby-1.9.2-p0/lib/ruby/1.9.1/net/imap.rb:2067:in `response_untagged'
|
337
|
+
from (druby://127.0.0.1:61676) /Users/choi/.rvm/rubies/ruby-1.9.2-p0/lib/ruby/1.9.1/net/imap.rb:2047:in `response'
|
338
|
+
from (druby://127.0.0.1:61676) /Users/choi/.rvm/rubies/ruby-1.9.2-p0/lib/ruby/1.9.1/net/imap.rb:1973:in `parse'
|
339
|
+
from (druby://127.0.0.1:61676) /Users/choi/.rvm/rubies/ruby-1.9.2-p0/lib/ruby/1.9.1/net/imap.rb:1124:in `get_response'
|
340
|
+
from (druby://127.0.0.1:61676) /Users/choi/.rvm/rubies/ruby-1.9.2-p0/lib/ruby/1.9.1/net/imap.rb:1036:in `receive_responses'
|
341
|
+
from (druby://127.0.0.1:61676) /Users/choi/.rvm/rubies/ruby-1.9.2-p0/lib/ruby/1.9.1/net/imap.rb:1023:in `block in initialize'
|
342
|
+
from run.rb:8:in `block in <main>'
|
343
|
+
from run.rb:7:in `open'
|
344
|
+
from run.rb:7:in `<main>'
|
345
|
+
|
346
|
+
|
347
|
+
|
348
|
+
# Sends a APPEND command to append the +message+ to the end of
|
349
|
+
# the +mailbox+. The optional +flags+ argument is an array of
|
350
|
+
# flags to initially passing to the new message. The optional
|
351
|
+
# +date_time+ argument specifies the creation time to assign to the
|
352
|
+
# new message; it defaults to the current time.
|
353
|
+
# For example:
|
354
|
+
#
|
355
|
+
# imap.append("inbox", <<EOF.gsub(/\n/, "\r\n"), [:Seen], Time.now)
|
356
|
+
# Subject: hello
|
357
|
+
# From: shugo@ruby-lang.org
|
358
|
+
# To: shugo@ruby-lang.org
|
359
|
+
#
|
360
|
+
# hello world
|
361
|
+
# EOF
|
362
|
+
#
|
363
|
+
# A Net::IMAP::NoResponseError is raised if the mailbox does
|
364
|
+
# not exist (it is not created automatically), or if the flags,
|
365
|
+
# date_time, or message arguments contain errors.
|
366
|
+
|
367
|
+
|
368
|
+
|
369
|
+
|
370
|
+
Next, I think I need to restore the vertical mailbox selection mode, and
|
371
|
+
then have the search window execute in the current mailbox.
|
372
|
+
|
373
|
+
Finally, I need to eliminate the limit number (on search) and just to dynamic
|
374
|
+
back-paging when a user gets to the top line, which will say "Get 40
|
375
|
+
more messages" or something.
|
376
|
+
|
377
|
+
Also, forget 2 pane, just toggle full screen message and list view
|
378
|
+
|
379
|
+
Finally, I need to do autocompletion for contacts.
|
380
|
+
|
381
|
+
|
382
|
+
|
383
|
+
done today:
|
384
|
+
- backpaging
|
385
|
+
- single window at a time
|
386
|
+
- vertical mailbox selection
|
387
|
+
- no more yaml
|
388
|
+
|
389
|
+
OK next
|
390
|
+
- autocompletion for contacts
|
391
|
+
- extract and show attachments, bytesize
|
392
|
+
- can't show this without downloading RFC822.header
|
393
|
+
- autocomplete better for mailbox
|
394
|
+
- STTY adjustment `stty size` from the vim client and sent to back end?
|
395
|
+
|
396
|
+
This url doesn't open
|
397
|
+
|
398
|
+
http://twitter.com/#!/kanter/status/12398658028834816
|
399
|
+
|
400
|
+
Because of the # or !. Wrapping it in quotes double or singles
|
401
|
+
doesn't fix the prob. Need to use system and shellescape
|
402
|
+
|
403
|
+
TODO
|
404
|
+
- display current mailbox somewhere, and also search query
|
405
|
+
- allow splitting the window to keep multiple messages open. Don't call only.
|
406
|
+
- move to - done
|
407
|
+
- contacts!
|
408
|
+
- character encodings
|
409
|
+
|
410
|
+
echo winwidth(1)
|
411
|
+
use this instead of system('stty size') to get window width
|
412
|
+
- then adjust the column sizes
|
413
|
+
|
414
|
+
:set statusline=%<%f\ %h%m%r%=%-14.(%l,%c%V%)\ %P
|
415
|
+
|
416
|
+
- in .vmail/ dir?
|
417
|
+
|
418
|
+
------------------------------------------------------------------------
|
419
|
+
Thu Dec 9 10:13:53 EST 2010
|
420
|
+
|
421
|
+
- got status line to show current mailbox. Next I just need to show the
|
422
|
+
current search query!
|
423
|
+
- got bells to go away in most cases
|
424
|
+
- need to work on autocomplete for addressbook
|
425
|
+
- getting there!
|
426
|
+
|
427
|
+
- ok i got statusline working in principle
|
428
|
+
|
429
|
+
- next, do contacts
|
430
|
+
- fix encoding issues
|
431
|
+
- get ready to release. Monday seems doable.
|
432
|
+
|
433
|
+
for contacts, use dictionary file option in vim
|
434
|
+
|
435
|
+
|
436
|
+
DONE
|
437
|
+
- contacts, proof of concept
|
438
|
+
- encoding issues (some at least)
|
439
|
+
- get reply template recipients right
|
440
|
+
- forwarding (not with attachments)
|
441
|
+
- auto-adjusting column widths depending on window width
|
442
|
+
- for older message, replace time with year
|
443
|
+
- signature
|
444
|
+
- open hyperlink in browser (OS X only?)
|
445
|
+
- open html in browser
|
446
|
+
- when show_next_message, get message without flashing the list
|
447
|
+
- solved by restoring two pane view
|
448
|
+
- when loading update, position cursor on first new message
|
449
|
+
- spacebar in message window to fullscreen the message and toggle back
|
450
|
+
- spam range
|
451
|
+
- in list, show message sizes
|
452
|
+
- prevent the "8 more lines" and wait for enter. 2 is the threshhold
|
453
|
+
- fix compose message, reply windowing
|
454
|
+
- mapping improvements:
|
455
|
+
- straight to reply from list window
|
456
|
+
- fixed addresses in recipients to a reply all
|
457
|
+
- position cursor conveniently on opening compose windows
|
458
|
+
- show num additional when in sent msg list
|
459
|
+
- save drafts on server to [Gmail]/Drafts
|
460
|
+
- use unquote_and_convert for subject lines?
|
461
|
+
- attachments extraction
|
462
|
+
- encoding issues (korean)
|
463
|
+
- plus use iconv for 1.8
|
464
|
+
- search for from kr
|
465
|
+
- can't rely on mail.encoding to be non-nil
|
466
|
+
- if html version, command to open
|
467
|
+
|
468
|
+
|
469
|
+
next:
|
470
|
+
- create another bin wrapper to start both daemon and client from same
|
471
|
+
window. redirect streams from daemon to a log file
|
472
|
+
- can alter dep on command line opts
|
473
|
+
- package gem
|
474
|
+
- vmail-server
|
475
|
+
- vmail (client)
|
476
|
+
- try running as one wrapper process
|
477
|
+
- sending an attachment
|
478
|
+
- can specify a directory, then all the items in the directory get
|
479
|
+
attached and sent
|
480
|
+
- forwarding attachments
|
481
|
+
- could be "attach: [uid] attachments to signal"
|
482
|
+
- use :wq to send compose message, not ,d (easy to confuse with delete!)
|
483
|
+
- close! to cancel
|
484
|
+
- fewer mappings to remember this way
|
485
|
+
- put instructions in message window; put in a top section
|
486
|
+
- map u update from message window
|
487
|
+
- follow mysql and use -u and -p flags on startup of server?
|
488
|
+
- omitting -p flag forces prompt
|
489
|
+
- get rid of config file
|
490
|
+
- use temp files
|
491
|
+
- tempname()
|
492
|
+
- system() allows a parameters that is written to tmp file and passed
|
493
|
+
to stdin
|
494
|
+
- help document should just be readme? or part of it.
|
495
|
+
- print all selected messages into file (append)
|
496
|
+
- can pipe through a command line tool, so we don't need to clutter
|
497
|
+
viewer.vim with more mappings and functions
|
498
|
+
- put "move to >" and "select mailbox >" in command window
|
499
|
+
- make compat with ruby 1.8
|
500
|
+
- help
|
501
|
+
- readme
|
502
|
+
- ,s s confusion? Star vs search
|
503
|
+
- sort contacts by frequency, then take first 10 or so of any match
|
504
|
+
group
|
505
|
+
- enhance contacts auto fix with more advance vim script
|
506
|
+
- mvim = allow using through VMAIL_EDITOR env variable
|
507
|
+
|
508
|
+
later:
|
509
|
+
- allow one daemon, multiple clients (select mailbox?)
|
510
|
+
- remember searches?
|
511
|
+
- archive function (shortcut for move to all mail)
|
512
|
+
- crate to package app as a OS X app?
|
513
|
+
http://rubyconf2008.confreaks.com/crate-packaging-your-ruby-application.html
|
514
|
+
- need to bundle macvim
|
515
|
+
- if move to unknown mailbox, create the mailbox, then do the move
|
516
|
+
- some lingering encoding issues
|
517
|
+
- something is wrong with cursorline sometimes
|
518
|
+
- try flashing progress in echo line
|
519
|
+
- straight to switch mailbox, etc from message window
|
520
|
+
- allow deliver command from any buffer or window, as long as headers are at top
|
521
|
+
- range selection from : prompt
|
522
|
+
- starring
|
523
|
+
- do fast action like deletes
|
524
|
+
- reload after window resize
|
525
|
+
- sometimes update doesn't work - bug
|
526
|
+
- message threads
|
527
|
+
|
528
|
+
|
529
|
+
|
530
|
+
------------------------------------------------------------------------
|
531
|
+
|
532
|
+
Threading
|
533
|
+
how to find the message that a message is in reply-to
|
534
|
+
|
535
|
+
imap.search ["HEADER", "MESSAGE-ID", "<757FC46C-9394-494E-91B4-B051F48419DA@prx.org>"]
|
536
|
+
|
537
|
+
:! ls %
|
538
|
+
|
539
|
+
% is filename
|
540
|
+
|
541
|
+
|