olm 0.0.1
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.
- checksums.yaml +7 -0
- data/.gitignore +34 -0
- data/LICENSE +21 -0
- data/README.md +4 -0
- data/lib/olm/app.rb +115 -0
- data/lib/olm.rb +35 -0
- data/olm.el +334 -0
- data/olm.gemspec +23 -0
- metadata +80 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 77901d067605eff56e7e15a667f55f05a4197121
|
4
|
+
data.tar.gz: 80565d0c2965b67bd6cbc088ff206f4cfa88e83e
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 009f350ea5b13ab5b8efe2bc16f2a7f630563fbbf1428e17794aab0962edfce028b7cf1cf9027434119971d26fe0f8e3330c5b5150f0ab15b1eb28cafd93a038
|
7
|
+
data.tar.gz: 187eaa27cdc99f9cbe60ddd474e76b2ea0e5ab1698bff4d2a43d6354cabf027e66ba5d469855e8d2ff52226ce6896bf975e7291d7c2f65b7085a6de960009f22
|
data/.gitignore
ADDED
@@ -0,0 +1,34 @@
|
|
1
|
+
*.gem
|
2
|
+
*.rbc
|
3
|
+
/.config
|
4
|
+
/coverage/
|
5
|
+
/InstalledFiles
|
6
|
+
/pkg/
|
7
|
+
/spec/reports/
|
8
|
+
/test/tmp/
|
9
|
+
/test/version_tmp/
|
10
|
+
/tmp/
|
11
|
+
|
12
|
+
## Specific to RubyMotion:
|
13
|
+
.dat*
|
14
|
+
.repl_history
|
15
|
+
build/
|
16
|
+
|
17
|
+
## Documentation cache and generated files:
|
18
|
+
/.yardoc/
|
19
|
+
/_yardoc/
|
20
|
+
/doc/
|
21
|
+
/rdoc/
|
22
|
+
|
23
|
+
## Environment normalisation:
|
24
|
+
/.bundle/
|
25
|
+
/lib/bundler/man/
|
26
|
+
|
27
|
+
# for a library or gem, you might want to ignore these files since the code is
|
28
|
+
# intended to run in multiple environments; otherwise, check them in:
|
29
|
+
# Gemfile.lock
|
30
|
+
# .ruby-version
|
31
|
+
# .ruby-gemset
|
32
|
+
|
33
|
+
# unless supporting rvm < 1.11.0 or doing something fancy, ignore this:
|
34
|
+
.rvmrc
|
data/LICENSE
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
The MIT License (MIT)
|
2
|
+
|
3
|
+
Copyright (c) 2014 Takahiro Noda
|
4
|
+
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
7
|
+
in the Software without restriction, including without limitation the rights
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
10
|
+
furnished to do so, subject to the following conditions:
|
11
|
+
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
13
|
+
copies or substantial portions of the Software.
|
14
|
+
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
21
|
+
SOFTWARE.
|
data/README.md
ADDED
data/lib/olm/app.rb
ADDED
@@ -0,0 +1,115 @@
|
|
1
|
+
require 'win32ole'
|
2
|
+
require 'singleton'
|
3
|
+
require 'nkf'
|
4
|
+
|
5
|
+
module Olm
|
6
|
+
class App
|
7
|
+
include Singleton
|
8
|
+
|
9
|
+
def initialize
|
10
|
+
@app = WIN32OLE.connect("Outlook.Application")
|
11
|
+
@ns = @app.Session
|
12
|
+
@enc = @ns.Folders.GetFirst.Name.encoding
|
13
|
+
const_load(self.class)
|
14
|
+
end
|
15
|
+
|
16
|
+
def ls(folder_id = nil)
|
17
|
+
f = folder_id ? @ns.GetFolderFromID(folder_id) : default_folder
|
18
|
+
res = "#{f.Items.Count}\n"
|
19
|
+
f.Items.each do |m|
|
20
|
+
entry_id = m.EntryID
|
21
|
+
received_at = m.ReceivedTime.to_s.split(' ').first
|
22
|
+
from = m.SenderName
|
23
|
+
subject = m.Subject
|
24
|
+
flag = m.IsMarkedAsTask ? '!' : ' '
|
25
|
+
res << sprintf("%s %s %-12.12s %-20.20s %s\n",
|
26
|
+
entry_id, flag, received_at, u(from), u(subject))
|
27
|
+
end
|
28
|
+
res
|
29
|
+
end
|
30
|
+
|
31
|
+
def send_and_receive
|
32
|
+
@ns.SendAndReceive(false)
|
33
|
+
end
|
34
|
+
|
35
|
+
def message(entry_id)
|
36
|
+
m = @ns.GetItemFromID(entry_id)
|
37
|
+
res = ''
|
38
|
+
res << sprintf("From: %s\n", m.SenderName)
|
39
|
+
res << sprintf("To: %s\n", m.To)
|
40
|
+
res << sprintf("Cc: %s\n", m.CC) if m.CC.to_s.length > 0
|
41
|
+
res << sprintf("Subject: %s\n", m.Subject)
|
42
|
+
res << sprintf("ReceivedAt: %s\n", m.ReceivedTime)
|
43
|
+
res << sprintf("---- \n")
|
44
|
+
if m.BodyFormat != OlFormatPlain
|
45
|
+
m2 = m.Copy
|
46
|
+
m2.BodyFormat = OlFormatPlain
|
47
|
+
res << m2.Body
|
48
|
+
m2.Move(@ns.GetDefaultFolder(OlFolderDeletedItems))
|
49
|
+
else
|
50
|
+
res << m.Body
|
51
|
+
end
|
52
|
+
NKF.nkf('-w -Lu', res)
|
53
|
+
end
|
54
|
+
|
55
|
+
def toggle_task_flag(entry_id)
|
56
|
+
m = @ns.GetItemFromID(entry_id)
|
57
|
+
if m.IsMarkedAsTask
|
58
|
+
m.ClearTaskFlag()
|
59
|
+
else
|
60
|
+
m.MarkAsTask(OlMarkNoDate)
|
61
|
+
end
|
62
|
+
m.Save
|
63
|
+
end
|
64
|
+
|
65
|
+
def mark_as_read(entry_id)
|
66
|
+
m = @ns.GetItemFromID(entry_id)
|
67
|
+
m.UnRead = false
|
68
|
+
m.Save
|
69
|
+
end
|
70
|
+
|
71
|
+
def create_message(io)
|
72
|
+
x = {:body => ''}
|
73
|
+
header = true
|
74
|
+
io.each_line do |line|
|
75
|
+
line.chomp!
|
76
|
+
if header
|
77
|
+
if line.empty? || /^---- / =~ line
|
78
|
+
header = false
|
79
|
+
else
|
80
|
+
next unless /^(.*?): (.*)/ =~ line
|
81
|
+
x[$1] = $2
|
82
|
+
p $1, $2
|
83
|
+
end
|
84
|
+
else
|
85
|
+
x[:body] << line
|
86
|
+
x[:body] << "\n"
|
87
|
+
p x[:body]
|
88
|
+
end
|
89
|
+
end
|
90
|
+
m = @app.CreateItem(OlMailItem)
|
91
|
+
m.BodyFormat = OlFormatPlain
|
92
|
+
m.To = x['To'] if x['To']
|
93
|
+
m.CC = x['Cc'] if x['Cc']
|
94
|
+
m.BCC = x['Bcc'] if x['Bcc']
|
95
|
+
m.Subject = NKF.nkf('-s', x['Subject']) if x['Subject']
|
96
|
+
m.Body = NKF.nkf('-s', x[:body]) if x[:body]
|
97
|
+
m
|
98
|
+
end
|
99
|
+
|
100
|
+
|
101
|
+
private
|
102
|
+
|
103
|
+
def const_load(klass)
|
104
|
+
WIN32OLE.const_load(@app, klass)
|
105
|
+
end
|
106
|
+
|
107
|
+
def default_folder
|
108
|
+
@ns.GetDefaultFolder(OlFolderInbox)
|
109
|
+
end
|
110
|
+
|
111
|
+
def u(str)
|
112
|
+
str.encode(Encoding::UTF_8)
|
113
|
+
end
|
114
|
+
end
|
115
|
+
end
|
data/lib/olm.rb
ADDED
@@ -0,0 +1,35 @@
|
|
1
|
+
require 'olm/app'
|
2
|
+
|
3
|
+
module Olm
|
4
|
+
VERSION = '0.0.1'
|
5
|
+
|
6
|
+
extend self
|
7
|
+
|
8
|
+
def ls(folder_id = nil)
|
9
|
+
puts Olm::App.instance.ls(folder_id)
|
10
|
+
end
|
11
|
+
|
12
|
+
def send_and_receive
|
13
|
+
Olm::App.instance.send_and_receive
|
14
|
+
end
|
15
|
+
|
16
|
+
def message(entry_id)
|
17
|
+
puts Olm::App.instance.message(entry_id)
|
18
|
+
end
|
19
|
+
|
20
|
+
def toggle_task_flag(entry_id)
|
21
|
+
Olm::App.instance.toggle_task_flag(entry_id)
|
22
|
+
end
|
23
|
+
|
24
|
+
def mark_as_read(entry_id)
|
25
|
+
Olm::App.instance.mark_as_read(entry_id)
|
26
|
+
end
|
27
|
+
|
28
|
+
def save_message
|
29
|
+
Olm::App.instance.create_message(ARGF).Save
|
30
|
+
end
|
31
|
+
|
32
|
+
def send_message
|
33
|
+
Olm::App.instance.create_message(ARGF).Send
|
34
|
+
end
|
35
|
+
end
|
data/olm.el
ADDED
@@ -0,0 +1,334 @@
|
|
1
|
+
(require 'dash)
|
2
|
+
|
3
|
+
(defvar olm-folder-id nil)
|
4
|
+
(defvar olm-default-bcc nil)
|
5
|
+
|
6
|
+
(defun olm
|
7
|
+
()
|
8
|
+
(interactive)
|
9
|
+
(olm-scan))
|
10
|
+
|
11
|
+
(defun olm-scan
|
12
|
+
()
|
13
|
+
(interactive)
|
14
|
+
(let* ((ret (olm-ls))
|
15
|
+
(lbuf (olm-buf-ls))
|
16
|
+
(n (with-current-buffer lbuf
|
17
|
+
(goto-char (point-min))
|
18
|
+
(let ((point (point)))
|
19
|
+
(forward-word)
|
20
|
+
(string-to-int (buffer-substring point (point))))))
|
21
|
+
(sbuf (let ((buf (olm-buf-summary)))
|
22
|
+
(with-current-buffer buf
|
23
|
+
(setq-local buffer-read-only nil)
|
24
|
+
(erase-buffer))
|
25
|
+
buf))
|
26
|
+
(ibuf (let ((buf (olm-buf-entry-ids)))
|
27
|
+
(with-current-buffer buf
|
28
|
+
(erase-buffer))
|
29
|
+
buf)))
|
30
|
+
(with-current-buffer lbuf
|
31
|
+
(--dotimes n
|
32
|
+
(progn
|
33
|
+
(forward-line)
|
34
|
+
(let* ((p0 (point))
|
35
|
+
(p1 (progn
|
36
|
+
(forward-word)
|
37
|
+
(point)))
|
38
|
+
(entry-id (buffer-substring p0 p1))
|
39
|
+
(item-line (buffer-substring p1 (line-end-position))))
|
40
|
+
(with-current-buffer sbuf
|
41
|
+
(insert item-line "\n"))
|
42
|
+
(with-current-buffer ibuf
|
43
|
+
(insert entry-id "\n"))))))
|
44
|
+
(with-current-buffer sbuf
|
45
|
+
(olm-summary-mode))
|
46
|
+
(switch-to-buffer sbuf)))
|
47
|
+
|
48
|
+
;;; A helper function invoked by olm-scan
|
49
|
+
(defun olm-ls
|
50
|
+
()
|
51
|
+
(with-current-buffer (olm-buf-ls)
|
52
|
+
(setq-local buffer-read-only nil)
|
53
|
+
(erase-buffer)
|
54
|
+
(let ((command (if olm-folder-id
|
55
|
+
(concat "Olm.ls '" olm-folder-id "'")
|
56
|
+
"Olm.ls")))
|
57
|
+
(olm-do-command command t))))
|
58
|
+
|
59
|
+
|
60
|
+
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
61
|
+
;;;
|
62
|
+
;;; gereral helper functions
|
63
|
+
;;;
|
64
|
+
(defun olm-do-command
|
65
|
+
(command &optional buf)
|
66
|
+
(let ((buf (or buf (get-buffer-create "*Messages*"))))
|
67
|
+
(call-process "ruby" nil buf nil
|
68
|
+
"-r" "rubygems" "-r" "olm" "-e" command)))
|
69
|
+
|
70
|
+
(defun olm-sync
|
71
|
+
()
|
72
|
+
(interactive)
|
73
|
+
(with-current-buffer (get-buffer-create "*olm-sync*")
|
74
|
+
(message "Olm: synchronizing all objects ...")
|
75
|
+
(olm-do-command "Olm.send_and_receive" t)
|
76
|
+
(message "Olm: synchronizing all objects ...")
|
77
|
+
(sit-for 1)
|
78
|
+
(let ((w 3))
|
79
|
+
(--dotimes w
|
80
|
+
(progn
|
81
|
+
(message (number-to-string (- w it)))
|
82
|
+
(sit-for 1))))
|
83
|
+
(message "done.")))
|
84
|
+
|
85
|
+
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
86
|
+
;;;
|
87
|
+
;;; buffers
|
88
|
+
;;;
|
89
|
+
(defun olm-buf-ls
|
90
|
+
()
|
91
|
+
(get-buffer-create "*olm-ls*"))
|
92
|
+
|
93
|
+
(defun olm-buf-summary
|
94
|
+
()
|
95
|
+
(get-buffer-create "*olm-summary*"))
|
96
|
+
|
97
|
+
(defun olm-buf-entry-ids
|
98
|
+
()
|
99
|
+
(get-buffer-create "*olm-entry-ids*"))
|
100
|
+
|
101
|
+
(defun olm-buf-message
|
102
|
+
()
|
103
|
+
(let ((buf (get-buffer-create "*olm-message*")))
|
104
|
+
(with-current-buffer buf
|
105
|
+
(setq-local buffer-read-only nil)
|
106
|
+
(erase-buffer))
|
107
|
+
buf))
|
108
|
+
|
109
|
+
(defun olm-buf-draft
|
110
|
+
()
|
111
|
+
(let ((buf (get-buffer-create "*olm-draft*")))
|
112
|
+
(with-current-buffer buf
|
113
|
+
(setq-local buffer-read-only nil)
|
114
|
+
(erase-buffer)
|
115
|
+
(insert "To: \n")
|
116
|
+
(insert "Cc: \n")
|
117
|
+
(when olm-default-bcc
|
118
|
+
(insert "Bcc: " olm-default-bcc "\n"))
|
119
|
+
(insert "Subject: \n")
|
120
|
+
(insert "---- \n"))
|
121
|
+
buf))
|
122
|
+
|
123
|
+
|
124
|
+
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
125
|
+
;;;
|
126
|
+
;;; olm-message
|
127
|
+
;;;
|
128
|
+
(defvar olm-message-mode-map nil)
|
129
|
+
(defvar olm-message-mode-hook nil)
|
130
|
+
|
131
|
+
(defun olm-message-mode
|
132
|
+
()
|
133
|
+
(interactive)
|
134
|
+
(setq major-mode 'olm-summary-mode)
|
135
|
+
(setq mode-name "Olm Message")
|
136
|
+
(font-lock-mode 1)
|
137
|
+
(setq-local buffer-read-only t)
|
138
|
+
(setq-local line-move-ignore-invisible t)
|
139
|
+
(run-hooks 'olm-message-mode-hook))
|
140
|
+
|
141
|
+
(defun olm-message-mode-keyword
|
142
|
+
()
|
143
|
+
(font-lock-add-keywords
|
144
|
+
nil
|
145
|
+
'(("^From:" . font-lock-keyword-face)
|
146
|
+
("^To:" . font-lock-keyword-face)
|
147
|
+
("^Cc:" . font-lock-keyword-face)
|
148
|
+
("^Subject:" . font-lock-keyword-face)
|
149
|
+
("^ReceivedAt:" . font-lock-keyword-face)
|
150
|
+
("^> .*$" . font-lock-comment-face)
|
151
|
+
("^From: \\(.*\\)$" 1 font-lock-warning-face)
|
152
|
+
("^To: \\(.*\\)$" 1 font-lock-negation-char-face)
|
153
|
+
("^Cc: \\(.*\\)$" 1 font-lock-constant-face)
|
154
|
+
("^Subject: \\(.*\\)$" 1 font-lock-variable-name-face)
|
155
|
+
("^ReceivedAt: \\(.*\\)$" 1 font-lock-type-face))))
|
156
|
+
|
157
|
+
(add-hook 'olm-message-mode-hook 'olm-message-mode-keyword)
|
158
|
+
|
159
|
+
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
160
|
+
;;;
|
161
|
+
;;; olm-summary
|
162
|
+
;;;
|
163
|
+
(defvar olm-summary-mode-map nil)
|
164
|
+
(defvar olm-summary-mode-hook nil)
|
165
|
+
(defvar olm-summary-scroll-lines 12)
|
166
|
+
|
167
|
+
(unless olm-summary-mode-map
|
168
|
+
(setq olm-summary-mode-map (make-sparse-keymap))
|
169
|
+
(define-key olm-summary-mode-map "s" 'olm-scan)
|
170
|
+
(define-key olm-summary-mode-map "i" 'olm-summary-inc)
|
171
|
+
(define-key olm-summary-mode-map "q" 'olm-summary-quit)
|
172
|
+
(define-key olm-summary-mode-map "." 'olm-summary-open-message)
|
173
|
+
(define-key olm-summary-mode-map " " 'olm-summary-scroll-message-forward)
|
174
|
+
(define-key olm-summary-mode-map [backspace] 'olm-summary-scroll-message-backward)
|
175
|
+
(define-key olm-summary-mode-map "p" 'olm-summary-display-up)
|
176
|
+
(define-key olm-summary-mode-map "n" 'olm-summary-display-down)
|
177
|
+
(define-key olm-summary-mode-map "!" 'olm-summary-toggle-flag)
|
178
|
+
(define-key olm-summary-mode-map "w" 'olm-summary-write))
|
179
|
+
|
180
|
+
(defun olm-summary-inc
|
181
|
+
()
|
182
|
+
(interactive)
|
183
|
+
(olm-sync)
|
184
|
+
(olm-scan))
|
185
|
+
|
186
|
+
(defun olm-summary-quit
|
187
|
+
()
|
188
|
+
(interactive)
|
189
|
+
(delete-other-windows-vertically)
|
190
|
+
(quit-window))
|
191
|
+
|
192
|
+
(defun olm-summary-mode
|
193
|
+
()
|
194
|
+
(interactive)
|
195
|
+
(use-local-map olm-summary-mode-map)
|
196
|
+
(setq major-mode 'olm-summary-mode)
|
197
|
+
(setq mode-name "Olm Summary")
|
198
|
+
(setq-local buffer-read-only t)
|
199
|
+
(setq-local truncate-lines t)
|
200
|
+
(setq-local line-move-ignore-invisible t)
|
201
|
+
(run-hooks 'olm-summary-mode-hook))
|
202
|
+
|
203
|
+
(defun olm-summary-open-message
|
204
|
+
()
|
205
|
+
(interactive)
|
206
|
+
(delete-other-windows-vertically)
|
207
|
+
(let* ((ln0 (line-number-at-pos))
|
208
|
+
(msg-window (split-window-below 10))
|
209
|
+
(mbuf (olm-buf-message))
|
210
|
+
(entry-id (progn
|
211
|
+
(goto-line ln0)
|
212
|
+
(olm-mail-item-entry-id-at))))
|
213
|
+
(with-current-buffer mbuf
|
214
|
+
(setq-local buffer-file-coding-system 'utf-8-dos))
|
215
|
+
(olm-do-command (concat "Olm.message '" entry-id "'") mbuf)
|
216
|
+
(with-current-buffer mbuf
|
217
|
+
(olm-message-mode)
|
218
|
+
(goto-char (point-min)))
|
219
|
+
(set-window-buffer msg-window mbuf)
|
220
|
+
(olm-summary-mark-message-as-read)))
|
221
|
+
|
222
|
+
(defun olm-summary-mark-message-as-read
|
223
|
+
()
|
224
|
+
(interactive)
|
225
|
+
(olm-do-command (concat "Olm.mark_as_read '"
|
226
|
+
(olm-mail-item-entry-id-at)
|
227
|
+
"'")))
|
228
|
+
|
229
|
+
(defun olm-summary-scroll-message-forward
|
230
|
+
()
|
231
|
+
(interactive)
|
232
|
+
(recenter)
|
233
|
+
(scroll-other-window olm-summary-scroll-lines))
|
234
|
+
|
235
|
+
(defun olm-summary-scroll-message-backward
|
236
|
+
()
|
237
|
+
(interactive)
|
238
|
+
(recenter)
|
239
|
+
(scroll-other-window (- olm-summary-scroll-lines)))
|
240
|
+
|
241
|
+
(defun olm-summary-display-up
|
242
|
+
()
|
243
|
+
(interactive)
|
244
|
+
(forward-line -1)
|
245
|
+
(recenter)
|
246
|
+
(olm-summary-open-message))
|
247
|
+
|
248
|
+
(defun olm-summary-display-down
|
249
|
+
()
|
250
|
+
(interactive)
|
251
|
+
(forward-line 1)
|
252
|
+
(recenter)
|
253
|
+
(olm-summary-open-message))
|
254
|
+
|
255
|
+
(defun olm-summary-toggle-flag
|
256
|
+
()
|
257
|
+
(interactive)
|
258
|
+
(let ((n (line-number-at-pos)))
|
259
|
+
(olm-do-command (concat "Olm.toggle_task_flag '"
|
260
|
+
(olm-mail-item-entry-id-at)
|
261
|
+
"'"))
|
262
|
+
(olm-scan)
|
263
|
+
(goto-line n)))
|
264
|
+
|
265
|
+
(defun olm-summary-write
|
266
|
+
()
|
267
|
+
(interactive)
|
268
|
+
(delete-other-windows-vertically)
|
269
|
+
(let ((buf (olm-buf-draft)))
|
270
|
+
(with-current-buffer buf
|
271
|
+
(olm-draft-mode))
|
272
|
+
(switch-to-buffer buf)))
|
273
|
+
|
274
|
+
|
275
|
+
;;; A helper function for olm-summary-mode functions.
|
276
|
+
(defun olm-mail-item-entry-id-at
|
277
|
+
()
|
278
|
+
(interactive)
|
279
|
+
(let ((n (line-number-at-pos)))
|
280
|
+
(with-current-buffer (olm-buf-entry-ids)
|
281
|
+
(goto-line n)
|
282
|
+
(buffer-substring (line-beginning-position) (line-end-position)))))
|
283
|
+
|
284
|
+
|
285
|
+
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
286
|
+
;;;
|
287
|
+
;;; olm-draft
|
288
|
+
;;;
|
289
|
+
(defvar olm-draft-mode-map nil)
|
290
|
+
(defvar olm-draft-mode-hook nil)
|
291
|
+
|
292
|
+
(unless olm-draft-mode-map
|
293
|
+
(setq olm-draft-mode-map (make-sparse-keymap))
|
294
|
+
(define-key olm-draft-mode-map "\C-c\C-q" 'olm-draft-kill)
|
295
|
+
(define-key olm-draft-mode-map "\C-c\C-c" 'olm-draft-send-message)
|
296
|
+
(define-key olm-draft-mode-map "\C-c\C-s" 'olm-draft-save-message))
|
297
|
+
|
298
|
+
(defun olm-draft-mode
|
299
|
+
()
|
300
|
+
(interactive)
|
301
|
+
(setq major-mode 'olm-draft-mode)
|
302
|
+
(setq mode-name "Olm Draft")
|
303
|
+
(setq-local line-move-ignore-invisible t)
|
304
|
+
(font-lock-mode 1)
|
305
|
+
(use-local-map olm-draft-mode-map)
|
306
|
+
(run-hooks 'olm-draft-mode-hook))
|
307
|
+
|
308
|
+
(add-hook 'olm-draft-mode-hook 'olm-message-mode-keyword)
|
309
|
+
|
310
|
+
(defun olm-draft-kill
|
311
|
+
()
|
312
|
+
(interactive)
|
313
|
+
(kill-buffer)
|
314
|
+
(olm-scan))
|
315
|
+
|
316
|
+
(defun olm-draft-do-message
|
317
|
+
(command)
|
318
|
+
(call-process-region (point-min) (point-max)
|
319
|
+
"ruby" nil (get-buffer-create "*Messages*") nil
|
320
|
+
"-r" "rubygems" "-r" "olm" "-e" command))
|
321
|
+
|
322
|
+
(defun olm-draft-save-message
|
323
|
+
()
|
324
|
+
(interactive)
|
325
|
+
(message "Olm: saving message ...")
|
326
|
+
(olm-draft-do-message "Olm.save_message")
|
327
|
+
(olm-draft-kill))
|
328
|
+
|
329
|
+
(defun olm-draft-send-message
|
330
|
+
()
|
331
|
+
(interactive)
|
332
|
+
(message "Olm: sending message ...")
|
333
|
+
(olm-draft-do-message "Olm.send_message")
|
334
|
+
(olm-draft-kill))
|
data/olm.gemspec
ADDED
@@ -0,0 +1,23 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
lib = File.expand_path('../lib', __FILE__)
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
+
|
5
|
+
require 'olm'
|
6
|
+
|
7
|
+
Gem::Specification.new do |spec|
|
8
|
+
spec.name = "olm"
|
9
|
+
spec.version = Olm::VERSION
|
10
|
+
spec.authors = ["Takahiro Noda"]
|
11
|
+
spec.email = ["takahiro.noda+rubygems@gmail.com"]
|
12
|
+
spec.summary = %q{A glue library to manipulate MS Outlook Mail.}
|
13
|
+
spec.description = %q{Olm is designed for reading and writing Outlook mail using the win32ole library and against Outlook 2007.}
|
14
|
+
spec.homepage = "https://github.com/tnoda/olm"
|
15
|
+
spec.license = "MIT"
|
16
|
+
spec.files = `git ls-files -z`.split("\x0")
|
17
|
+
spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
18
|
+
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
19
|
+
spec.require_paths = ["lib"]
|
20
|
+
|
21
|
+
spec.add_development_dependency "bundler", "~> 1.6"
|
22
|
+
spec.add_development_dependency "rake"
|
23
|
+
end
|
metadata
ADDED
@@ -0,0 +1,80 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: olm
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Takahiro Noda
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2014-07-12 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: bundler
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ~>
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '1.6'
|
20
|
+
type: :development
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ~>
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '1.6'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: rake
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - '>='
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - '>='
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0'
|
41
|
+
description: Olm is designed for reading and writing Outlook mail using the win32ole
|
42
|
+
library and against Outlook 2007.
|
43
|
+
email:
|
44
|
+
- takahiro.noda+rubygems@gmail.com
|
45
|
+
executables: []
|
46
|
+
extensions: []
|
47
|
+
extra_rdoc_files: []
|
48
|
+
files:
|
49
|
+
- .gitignore
|
50
|
+
- LICENSE
|
51
|
+
- README.md
|
52
|
+
- lib/olm.rb
|
53
|
+
- lib/olm/app.rb
|
54
|
+
- olm.el
|
55
|
+
- olm.gemspec
|
56
|
+
homepage: https://github.com/tnoda/olm
|
57
|
+
licenses:
|
58
|
+
- MIT
|
59
|
+
metadata: {}
|
60
|
+
post_install_message:
|
61
|
+
rdoc_options: []
|
62
|
+
require_paths:
|
63
|
+
- lib
|
64
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - '>='
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0'
|
69
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
70
|
+
requirements:
|
71
|
+
- - '>='
|
72
|
+
- !ruby/object:Gem::Version
|
73
|
+
version: '0'
|
74
|
+
requirements: []
|
75
|
+
rubyforge_project:
|
76
|
+
rubygems_version: 2.0.14
|
77
|
+
signing_key:
|
78
|
+
specification_version: 4
|
79
|
+
summary: A glue library to manipulate MS Outlook Mail.
|
80
|
+
test_files: []
|