vmail 0.4.6 → 0.4.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/README.markdown +13 -2
- data/lib/vmail.vim +39 -22
- data/lib/vmail/imap_client.rb +20 -22
- data/lib/vmail/version.rb +1 -1
- metadata +2 -2
data/README.markdown
CHANGED
@@ -130,7 +130,7 @@ top of the list that looks something like this:
|
|
130
130
|
|
131
131
|
Put the cursor on this line and press ENTER to load more of these messages.
|
132
132
|
|
133
|
-
Unread messages are marked with a
|
133
|
+
Unread messages are marked with a `+` symbol.
|
134
134
|
|
135
135
|
To view the raw RFC822 version of a message, type `,R` while viewing the message.
|
136
136
|
|
@@ -138,7 +138,7 @@ To view the raw RFC822 version of a message, type `,R` while viewing the message
|
|
138
138
|
|
139
139
|
To star a message, put the cursor on it and type `,*`. (Note that the comma
|
140
140
|
before the * is part of the key sequence.) Starring a message copies it to the
|
141
|
-
`starred` mailbox. Starred messages are marked with a
|
141
|
+
`starred` mailbox. Starred messages are marked with a `*` symbol and
|
142
142
|
color-highlighted.
|
143
143
|
|
144
144
|
To delete a message, put the cursor on it and type `,#`. Deleting a message
|
@@ -419,6 +419,17 @@ Then you can create an SSH tunnel, e.g.
|
|
419
419
|
|
420
420
|
[davebolton]:https://github.com/lightningdb
|
421
421
|
|
422
|
+
|
423
|
+
## Customizing colors
|
424
|
+
|
425
|
+
By default, vmail highlights starred messages in bold green against a black
|
426
|
+
background. You can customize this setting by adding a line to your ~/.vimrc
|
427
|
+
file like so:
|
428
|
+
|
429
|
+
let g:vmail_flagged_color = "ctermfg=yellow ctermbg=black cterm=bold"
|
430
|
+
|
431
|
+
Type `:help highlight-args` in Vim for more details.
|
432
|
+
|
422
433
|
## Bug reports, feature requests
|
423
434
|
|
424
435
|
Please file bug reports and feature requests in the [vmail github issue tracker][tracker].
|
data/lib/vmail.vim
CHANGED
@@ -1,3 +1,6 @@
|
|
1
|
+
if !exists("g:vmail_flagged_color")
|
2
|
+
let g:vmail_flagged_color = "ctermfg=green ctermbg=black"
|
3
|
+
endif
|
1
4
|
let s:mailbox = $VMAIL_MAILBOX
|
2
5
|
let s:query = $VMAIL_QUERY
|
3
6
|
let s:browser_command = $VMAIL_BROWSER
|
@@ -67,14 +70,15 @@ endfunction
|
|
67
70
|
|
68
71
|
function! s:show_message()
|
69
72
|
let line = getline(line("."))
|
70
|
-
if match(line, '^>
|
73
|
+
if match(line, '^> Load') != -1
|
71
74
|
setlocal modifiable
|
72
75
|
delete
|
73
76
|
call s:more_messages()
|
74
77
|
return
|
75
78
|
endif
|
76
|
-
" remove the unread flag
|
77
|
-
|
79
|
+
" remove the unread flag +
|
80
|
+
" TODO!
|
81
|
+
let newline = substitute(line, '^**+', ' ', '')
|
78
82
|
setlocal modifiable
|
79
83
|
call setline(line('.'), newline)
|
80
84
|
setlocal nomodifiable
|
@@ -156,8 +160,9 @@ function! s:focus_list_window()
|
|
156
160
|
" set up syntax highlighting
|
157
161
|
if has("syntax")
|
158
162
|
syn clear
|
159
|
-
|
160
|
-
|
163
|
+
" colorize whole line
|
164
|
+
syn match VmailBufferFlagged /^*.*/hs=s
|
165
|
+
exec "hi def VmailBufferFlagged " . g:vmail_flagged_color
|
161
166
|
endif
|
162
167
|
" vertically center the cursor line
|
163
168
|
" normal z.
|
@@ -199,32 +204,46 @@ endfunction
|
|
199
204
|
|
200
205
|
function! s:toggle_star() range
|
201
206
|
let uid_set = (a:firstline - 2) . '..' . (a:lastline - 2)
|
202
|
-
let
|
207
|
+
let nummsgs = (a:lastline - a:firstline + 1)
|
208
|
+
let flag_symbol = "^*"
|
203
209
|
" check if starred already
|
204
210
|
let action = " +FLAGS"
|
205
211
|
if (match(getline(a:firstline), flag_symbol) != -1)
|
206
212
|
let action = " -FLAGS"
|
207
213
|
endif
|
208
214
|
let command = s:flag_command . uid_set . action . " Flagged"
|
209
|
-
if
|
215
|
+
if nummsgs == 1
|
210
216
|
echom "toggling flag on message"
|
211
217
|
else
|
212
|
-
echom "toggling flags on " .
|
218
|
+
echom "toggling flags on " . nummsgs . " messages"
|
213
219
|
endif
|
214
|
-
" toggle
|
215
|
-
" in a thread in imap_client
|
220
|
+
" toggle * on lines
|
216
221
|
let res = system(command)
|
217
222
|
setlocal modifiable
|
218
|
-
|
219
|
-
|
223
|
+
let lnum = a:firstline
|
224
|
+
while lnum <= a:lastline
|
225
|
+
let line = getline(lnum)
|
226
|
+
if action == " +FLAGS"
|
227
|
+
let newline = substitute(line, '^ ', '*', '')
|
228
|
+
let newline = substitute(newline, '^+ ', '*+', '')
|
229
|
+
else
|
230
|
+
let newline = substitute(line, '^*+', '+ ', '')
|
231
|
+
let newline = substitute(newline, '^* ', ' ', '')
|
232
|
+
endif
|
233
|
+
call setline(lnum, newline)
|
234
|
+
let lnum += 1
|
235
|
+
endwhile
|
220
236
|
setlocal nomodifiable
|
221
237
|
write
|
222
|
-
|
223
|
-
|
224
|
-
|
225
|
-
|
238
|
+
if nummsgs > 2
|
239
|
+
" call feedkeys("\<cr>")
|
240
|
+
endif
|
241
|
+
redraw
|
242
|
+
if nummsgs == 1
|
243
|
+
echom "toggled flag on message"
|
244
|
+
else
|
245
|
+
echom "toggled flags on " . nummsgs . " messages"
|
226
246
|
endif
|
227
|
-
echom "done"
|
228
247
|
endfunction
|
229
248
|
|
230
249
|
" flag can be Deleted or [Gmail]/Spam
|
@@ -442,6 +461,7 @@ function! s:select_mailbox()
|
|
442
461
|
setlocal nomodifiable
|
443
462
|
write
|
444
463
|
normal z.
|
464
|
+
echom "done"
|
445
465
|
endfunction
|
446
466
|
|
447
467
|
func! s:search_query()
|
@@ -478,15 +498,14 @@ function! s:do_search()
|
|
478
498
|
1,$delete
|
479
499
|
put! =res
|
480
500
|
execute "normal Gdd\<c-y>"
|
481
|
-
normal z.
|
482
501
|
setlocal nomodifiable
|
483
502
|
write
|
503
|
+
normal z.
|
484
504
|
endfunction
|
485
505
|
|
486
506
|
function! s:more_messages()
|
487
507
|
let line = getline(line('.'))
|
488
|
-
let
|
489
|
-
let command = s:more_messages_command . uid
|
508
|
+
let command = s:more_messages_command
|
490
509
|
echo "fetching more messages. please wait..."
|
491
510
|
let res = system(command)
|
492
511
|
setlocal modifiable
|
@@ -743,5 +762,3 @@ autocmd bufreadpost *.txt call <SID>turn_into_compose_window()
|
|
743
762
|
call system(s:select_mailbox_command . shellescape(s:mailbox))
|
744
763
|
call s:do_search()
|
745
764
|
|
746
|
-
|
747
|
-
|
data/lib/vmail/imap_client.rb
CHANGED
@@ -120,7 +120,6 @@ module Vmail
|
|
120
120
|
if id_set.is_a?(String)
|
121
121
|
id_set = id_set.split(',')
|
122
122
|
end
|
123
|
-
max_id = id_set.to_a[-1]
|
124
123
|
if id_set.to_a.empty?
|
125
124
|
log "empty set"
|
126
125
|
return ""
|
@@ -137,7 +136,7 @@ module Vmail
|
|
137
136
|
log(error) && raise(error)
|
138
137
|
end
|
139
138
|
log "extracting headers"
|
140
|
-
new_message_rows = results.map {|x| extract_row_data(x
|
139
|
+
new_message_rows = results.map {|x| extract_row_data(x) }
|
141
140
|
if are_uids
|
142
141
|
# replace old row_text values
|
143
142
|
new_message_rows.each {|new_row_data|
|
@@ -156,7 +155,7 @@ module Vmail
|
|
156
155
|
end
|
157
156
|
|
158
157
|
# TODO extract this to another class or module and write unit tests
|
159
|
-
def extract_row_data(fetch_data
|
158
|
+
def extract_row_data(fetch_data)
|
160
159
|
seqno = fetch_data.seqno
|
161
160
|
uid = fetch_data.attr['UID']
|
162
161
|
# log "fetched seqno #{seqno} uid #{uid}"
|
@@ -194,21 +193,18 @@ module Vmail
|
|
194
193
|
subject = envelope.subject || ''
|
195
194
|
subject = Mail::Encodings.unquote_and_convert_to(subject, 'UTF-8')
|
196
195
|
flags = format_flags(flags)
|
197
|
-
|
198
|
-
mid_width = @width - (first_col_width + 33)
|
196
|
+
mid_width = @width - 38
|
199
197
|
address_col_width = (mid_width * 0.3).ceil
|
200
198
|
subject_col_width = (mid_width * 0.7).floor
|
201
|
-
row_text = [
|
202
|
-
|
203
|
-
|
204
|
-
|
205
|
-
|
206
|
-
flags.rcol(7)
|
207
|
-
].join(' ')
|
199
|
+
row_text = [ flags.col(2),
|
200
|
+
(date_formatted || '').col(14),
|
201
|
+
address.col(address_col_width),
|
202
|
+
subject.col(subject_col_width),
|
203
|
+
number_to_human_size(size).rcol(6) ].join(' ')
|
208
204
|
{:uid => uid, :seqno => seqno, :row_text => row_text}
|
209
205
|
rescue
|
210
206
|
log "error extracting header for uid #{uid} seqno #{seqno}: #$!"
|
211
|
-
row_text =
|
207
|
+
row_text = "#{seqno.to_s} : error extracting this header"
|
212
208
|
{:uid => uid, :seqno => seqno, :row_text => row_text}
|
213
209
|
end
|
214
210
|
|
@@ -224,16 +220,16 @@ module Vmail
|
|
224
220
|
exponent = max_exp if exponent > max_exp # we need this to avoid overflow for the highest unit
|
225
221
|
number /= 1024 ** exponent
|
226
222
|
unit = UNITS[exponent]
|
227
|
-
"#{number}
|
223
|
+
"#{number}#{unit}"
|
228
224
|
end
|
229
225
|
end
|
230
226
|
|
231
|
-
FLAGMAP = {:Flagged => '
|
227
|
+
FLAGMAP = {:Flagged => '*'}
|
232
228
|
# flags is an array like [:Flagged, :Seen]
|
233
229
|
def format_flags(flags)
|
234
230
|
flags = flags.map {|flag| FLAGMAP[flag] || flag}
|
235
231
|
if flags.delete(:Seen).nil?
|
236
|
-
flags << '
|
232
|
+
flags << '+' # unread
|
237
233
|
end
|
238
234
|
flags.join('')
|
239
235
|
end
|
@@ -294,7 +290,8 @@ module Vmail
|
|
294
290
|
end
|
295
291
|
|
296
292
|
# gets 100 messages prior to id
|
297
|
-
def more_messages(
|
293
|
+
def more_messages(limit=100)
|
294
|
+
message_id = @message_list[0][:seqno]
|
298
295
|
log "more_messages: message_id #{message_id}"
|
299
296
|
message_id = message_id.to_i
|
300
297
|
if @all_search
|
@@ -329,7 +326,7 @@ module Vmail
|
|
329
326
|
return res
|
330
327
|
end
|
331
328
|
log "remaining messages: #{remaining}"
|
332
|
-
">
|
329
|
+
"> Load #{[100, remaining].min} more messages. #{remaining} remaining.\n" + res
|
333
330
|
end
|
334
331
|
|
335
332
|
def show_message(index, raw=false)
|
@@ -352,7 +349,7 @@ module Vmail
|
|
352
349
|
out = formatter.process_body
|
353
350
|
size = fetch_data.attr["RFC822.SIZE"]
|
354
351
|
@current_message = <<-EOF
|
355
|
-
#{@mailbox}
|
352
|
+
#{@mailbox} seqno:#{index} uid:#{uid} #{number_to_human_size size} #{format_parts_info(formatter.list_parts)}
|
356
353
|
---------------------------------------
|
357
354
|
#{format_headers(formatter.extract_headers)}
|
358
355
|
|
@@ -397,9 +394,10 @@ EOF
|
|
397
394
|
"#{id} deleted"
|
398
395
|
else
|
399
396
|
log "Flagging index_range: #{index_range.inspect}; uid_set: #{uid_set.inspect}"
|
400
|
-
|
401
|
-
|
402
|
-
|
397
|
+
Thread.new do
|
398
|
+
res = @imap.uid_store(uid_set, action, [flg.to_sym])
|
399
|
+
log res.inspect
|
400
|
+
end
|
403
401
|
end
|
404
402
|
end
|
405
403
|
|
data/lib/vmail/version.rb
CHANGED