mhc 1.1.1 → 1.2.0
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 +5 -5
- data/bin/mhc +66 -3
- data/emacs/Cask +1 -1
- data/emacs/mhc-date.el +1 -1
- data/emacs/mhc-day.el +1 -1
- data/emacs/mhc-db.el +57 -38
- data/emacs/mhc-draft.el +36 -22
- data/emacs/mhc-face.el +1 -1
- data/emacs/mhc-header.el +20 -1
- data/emacs/mhc-minibuf.el +12 -7
- data/emacs/mhc-parse.el +1 -1
- data/emacs/mhc-process.el +26 -9
- data/emacs/mhc-ps.el +1 -1
- data/emacs/mhc-schedule.el +5 -2
- data/emacs/mhc-summary.el +31 -12
- data/emacs/mhc-vars.el +15 -2
- data/emacs/mhc.el +50 -24
- data/lib/mhc.rb +3 -1
- data/lib/mhc/builder.rb +5 -1
- data/lib/mhc/calendar.rb +5 -1
- data/lib/mhc/command/cache.rb +5 -4
- data/lib/mhc/converter.rb +3 -2
- data/lib/mhc/datastore.rb +52 -13
- data/lib/mhc/date_enumerator.rb +2 -2
- data/lib/mhc/event.rb +42 -21
- data/lib/mhc/formatter.rb +17 -312
- data/lib/mhc/formatter/base.rb +125 -0
- data/lib/mhc/formatter/emacs.rb +47 -0
- data/lib/mhc/formatter/howm.rb +35 -0
- data/lib/mhc/formatter/icalendar.rb +17 -0
- data/lib/mhc/formatter/json.rb +27 -0
- data/lib/mhc/formatter/mail.rb +20 -0
- data/lib/mhc/formatter/org_table.rb +24 -0
- data/lib/mhc/formatter/symbolic_expression.rb +42 -0
- data/lib/mhc/formatter/text.rb +29 -0
- data/lib/mhc/occurrence.rb +27 -5
- data/lib/mhc/occurrence_enumerator.rb +1 -1
- data/lib/mhc/property_value.rb +6 -0
- data/lib/mhc/property_value/date.rb +23 -14
- data/lib/mhc/property_value/date_time.rb +19 -0
- data/lib/mhc/property_value/integer.rb +5 -1
- data/lib/mhc/property_value/list.rb +7 -6
- data/lib/mhc/property_value/period.rb +3 -1
- data/lib/mhc/property_value/range.rb +1 -1
- data/lib/mhc/property_value/time.rb +8 -1
- data/lib/mhc/version.rb +1 -1
- data/spec/mhc_spec.rb +83 -0
- metadata +13 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 537f2bfe5826a0763c8c41fa53f6a035de6a796c7f515990b5cda8017b01e4ab
|
4
|
+
data.tar.gz: c264417ac39a7b1cdbf037378e2d67540861a48caeab5945a58adad350a24b00
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 172010da102859b39e05ad9ba54f28c4faf8327e4a0c8cc30bed00599f1e8ba37bc36a7f752e24e959395066e3b32413f1b044f67cf00b4209dde455f79f783d
|
7
|
+
data.tar.gz: 0e6be200e4cd65828aba8a5e0216f3e641b3b351f430fe02de21cdd194248b66406fd859d97b82e0c590256687c7bf678091e49ec4b6da61e6b5f5f1ba981846
|
data/bin/mhc
CHANGED
@@ -110,9 +110,32 @@ class MhcCLI < Thor
|
|
110
110
|
named_option :repository
|
111
111
|
|
112
112
|
def cache
|
113
|
-
Mhc::Command::Cache.new(
|
113
|
+
Mhc::Command::Cache.new(builder.datastore)
|
114
114
|
end
|
115
115
|
|
116
|
+
# Command: todo
|
117
|
+
desc "todo", "List Todo entries in MHC calendar"
|
118
|
+
|
119
|
+
named_option :repository
|
120
|
+
method_option :show_all, :desc => "Include all finished tasks."
|
121
|
+
|
122
|
+
def todo
|
123
|
+
calendar.tasks.each do |task|
|
124
|
+
if task.recurring?
|
125
|
+
# Yearly: today - 90days .. today + 365d - 90days ?
|
126
|
+
# Weekly: today - 7days .. today + 7days
|
127
|
+
search_range = Mhc::PropertyValue::Date.parse_range("today+365d")
|
128
|
+
# search_range = nil
|
129
|
+
else
|
130
|
+
search_range = nil
|
131
|
+
end
|
132
|
+
next if task.in_category?("done") && !options[:show_all]
|
133
|
+
occurrence = task.occurrences(range: search_range).first
|
134
|
+
deadline = occurrence.dtstart
|
135
|
+
puts format("%s %s", deadline.strftime("%Y/%m/%d %a"), task.subject)
|
136
|
+
end
|
137
|
+
end # todo
|
138
|
+
|
116
139
|
################################################################
|
117
140
|
# Command: completions
|
118
141
|
################################################################
|
@@ -185,7 +208,7 @@ class MhcCLI < Thor
|
|
185
208
|
def scan(range)
|
186
209
|
begin
|
187
210
|
Mhc::Command::Scan.new(calendar, range, **symbolize_keys(options))
|
188
|
-
rescue Mhc::PropertyValue::ParseError, Mhc::
|
211
|
+
rescue Mhc::PropertyValue::ParseError, Mhc::Formatter::NameError, Mhc::Query::ParseError => e
|
189
212
|
STDERR.print "Error: " + e.message + "\n"
|
190
213
|
end
|
191
214
|
return self
|
@@ -236,6 +259,40 @@ class MhcCLI < Thor
|
|
236
259
|
return self
|
237
260
|
end
|
238
261
|
|
262
|
+
################################################################
|
263
|
+
# Command: validate
|
264
|
+
################################################################
|
265
|
+
desc "validate FILE", "Validate event FILE"
|
266
|
+
|
267
|
+
named_option :format
|
268
|
+
|
269
|
+
def validate(file)
|
270
|
+
full_path = File.expand_path(file)
|
271
|
+
|
272
|
+
unless File.exist?(full_path)
|
273
|
+
puts Mhc::Converter::Emacs.new.to_emacs("No such file #{file}.")
|
274
|
+
return 1
|
275
|
+
end
|
276
|
+
|
277
|
+
errors = Mhc::Event.validate(File.open(full_path) {|f| f.read})
|
278
|
+
|
279
|
+
string = ""
|
280
|
+
exit_on_error do
|
281
|
+
errors.each do |err, key|
|
282
|
+
string += "#{err.to_s.capitalize}"
|
283
|
+
string += " in X-SC-#{key.capitalize}" if key
|
284
|
+
string += ".\n"
|
285
|
+
end
|
286
|
+
end
|
287
|
+
if errors.empty?
|
288
|
+
puts Mhc::Converter::Emacs.new.to_emacs("OK")
|
289
|
+
return 0
|
290
|
+
end
|
291
|
+
|
292
|
+
puts Mhc::Converter::Emacs.new.to_emacs(string)
|
293
|
+
return 1
|
294
|
+
end
|
295
|
+
|
239
296
|
################################################################
|
240
297
|
# add some hooks to Thor
|
241
298
|
|
@@ -312,4 +369,10 @@ class MhcCLI < Thor
|
|
312
369
|
end
|
313
370
|
end
|
314
371
|
|
315
|
-
|
372
|
+
result = MhcCLI.start(ARGV)
|
373
|
+
|
374
|
+
if result.is_a?(Numeric)
|
375
|
+
exit result
|
376
|
+
else
|
377
|
+
exit 0
|
378
|
+
end
|
data/emacs/Cask
CHANGED
data/emacs/mhc-date.el
CHANGED
data/emacs/mhc-day.el
CHANGED
data/emacs/mhc-db.el
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
;;;
|
1
|
+
;;; mhc-db.el --- Database Interface to MHC.
|
2
2
|
|
3
3
|
;; Author: Yoshinari Nomura <nom@quickhack.net>,
|
4
4
|
;; TSUCHIYA Masatoshi <tsuchiya@namazu.org>
|
@@ -18,18 +18,38 @@
|
|
18
18
|
(require 'mhc-process)
|
19
19
|
(require 'mhc-schedule)
|
20
20
|
|
21
|
-
(defun mhc-db-scan (
|
21
|
+
(defun mhc-db-scan (begin-date end-date &optional nosort category search)
|
22
|
+
"Scan MHC database from BEGIN-DATE to END-DATE.
|
23
|
+
If optional NOSORT is non-nil, returned value is not sort.
|
24
|
+
If optional CATEGORY is non-nil, returned value is clipped by category.
|
25
|
+
If optional SEARCH is non-nil returned value is clipped by search string."
|
22
26
|
(mhc-process-send-command
|
23
27
|
(format "scan --format=emacs %04d%02d%02d-%04d%02d%02d%s%s"
|
24
|
-
(mhc-date-yy
|
25
|
-
(mhc-date-mm
|
26
|
-
(mhc-date-dd
|
27
|
-
(mhc-date-yy
|
28
|
-
(mhc-date-mm
|
29
|
-
(mhc-date-dd
|
28
|
+
(mhc-date-yy begin-date)
|
29
|
+
(mhc-date-mm begin-date)
|
30
|
+
(mhc-date-dd begin-date)
|
31
|
+
(mhc-date-yy end-date)
|
32
|
+
(mhc-date-mm end-date)
|
33
|
+
(mhc-date-dd end-date)
|
30
34
|
(if category (format " --category=%s" category) "")
|
31
35
|
(if search (format " --search='%s'" search) ""))))
|
32
36
|
|
37
|
+
(defun mhc-db-scan-flat (begin-date end-date &optional nosort category search)
|
38
|
+
"Scan MHC database from BEGIN-DATE to END-DATE.
|
39
|
+
Unlike `mhc-db-scan`, returned value is not grouped by date.
|
40
|
+
For example:
|
41
|
+
((date . mhc-schedule) (date . mhc-schedule) ...)
|
42
|
+
If optional NOSORT is non-nil, returned value is not sort.
|
43
|
+
If optional CATEGORY is non-nil, returned value is clipped by category.
|
44
|
+
If optional SEARCH is non-nil returned value is clipped by search string."
|
45
|
+
(let ((dayinfo-list (mhc-db-scan begin-date end-date nosort category search)))
|
46
|
+
(apply 'append
|
47
|
+
(mapcar (lambda (dayinfo)
|
48
|
+
(let ((date (mhc-day-date dayinfo))
|
49
|
+
(schedules (mhc-day-schedules dayinfo)))
|
50
|
+
(mapcar (lambda (sch) (cons date sch)) schedules)))
|
51
|
+
dayinfo-list))))
|
52
|
+
|
33
53
|
(defun mhc-db-search (&rest query)
|
34
54
|
(let ((b (mhc-date-new 1970 1 1))
|
35
55
|
(e (mhc-date-yy+ (mhc-date-now) 10)))
|
@@ -60,32 +80,33 @@
|
|
60
80
|
nosort
|
61
81
|
category)))
|
62
82
|
|
63
|
-
(defun mhc-db-
|
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
|
-
|
83
|
+
(defun mhc-db-record-path-from-buffer (buffer)
|
84
|
+
"Return file path in MHC spool bound to BUFFER.
|
85
|
+
File path is taken from X-SC-Record-Id field."
|
86
|
+
(with-current-buffer buffer
|
87
|
+
(let ((spool-directory (file-name-as-directory
|
88
|
+
(expand-file-name
|
89
|
+
"spool" (mhc-config-base-directory))))
|
90
|
+
(record-id (mhc-draft-record-id)))
|
91
|
+
(expand-file-name (concat record-id ".mhc") spool-directory))))
|
92
|
+
|
93
|
+
(defun mhc-db-add-record-from-buffer (buffer &optional allow-overwrite)
|
94
|
+
"Add current mhc-draft BUFFER to MHC db.
|
95
|
+
If optional ALLOW-OVERWRITE is non-nil, do not ask overwrite."
|
96
|
+
(let* ((path (mhc-db-record-path-from-buffer buffer))
|
97
|
+
(directory (file-name-directory path))
|
98
|
+
(overwriting (file-exists-p path)))
|
99
|
+
(if (or (not overwriting)
|
100
|
+
allow-overwrite
|
101
|
+
(y-or-n-p (format "Overwrite existing %s? " path)))
|
102
|
+
(with-current-buffer buffer
|
103
|
+
(mhc-draft-increment-sequence)
|
104
|
+
(mhc-draft-translate)
|
105
|
+
(mhc-file-make-directory directory)
|
106
|
+
(mhc-write-region-as-coding-system
|
107
|
+
mhc-default-coding-system
|
108
|
+
(point-min) (point-max) path nil 'nomsg)
|
109
|
+
(set-buffer-modified-p nil)
|
89
110
|
(mhc-misc-touch-directory directory)
|
90
111
|
t))))
|
91
112
|
|
@@ -118,9 +139,7 @@
|
|
118
139
|
(mhc-schedule-condition schedule))))
|
119
140
|
" "))))
|
120
141
|
(mhc-record-set-name record (mhc-record-name original-record))
|
121
|
-
(mhc-db-add-record-from-buffer
|
122
|
-
|
123
|
-
|
142
|
+
(mhc-db-add-record-from-buffer (current-buffer) t)))))
|
124
143
|
|
125
144
|
(provide 'mhc-db)
|
126
145
|
|
@@ -155,4 +174,4 @@
|
|
155
174
|
;; ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
|
156
175
|
;; OF THE POSSIBILITY OF SUCH DAMAGE.
|
157
176
|
|
158
|
-
;;; mhc-db.el ends here
|
177
|
+
;;; mhc-db.el ends here
|
data/emacs/mhc-draft.el
CHANGED
@@ -17,14 +17,10 @@
|
|
17
17
|
|
18
18
|
(defconst mhc-draft-buffer-name "*mhc draft*")
|
19
19
|
|
20
|
-
(defcustom mhc-draft-
|
21
|
-
'("
|
22
|
-
"
|
23
|
-
|
24
|
-
"X-Dispatcher:" "X-Filter:" "X-Gnus-Mail-Source:" "X-Mailer:" "X-Received:"
|
25
|
-
"X-Sender:" "X-Seqno:" "X-Spam-Flag:" "X-Spam-Probability:" "X-UIDL:"
|
26
|
-
"Xref:")
|
27
|
-
"*These headers are removed when article is imported."
|
20
|
+
(defcustom mhc-draft-import-header-list
|
21
|
+
'("Subject:" "From:" "To:" "Cc:" "Date:" "Message-Id:"
|
22
|
+
"X-GM-THRID:" "X-GM-MSGID:" "X-GM-LABELS:")
|
23
|
+
"*These headers are used when article is imported."
|
28
24
|
:group 'mhc
|
29
25
|
:type '(repeat string))
|
30
26
|
|
@@ -199,7 +195,7 @@ If optional argument NO-CONFIRM is non-nil, kill without confirmation."
|
|
199
195
|
(defun mhc-draft-delete-garbage-headers ()
|
200
196
|
(mhc-header-narrowing
|
201
197
|
(mhc-header-delete-header
|
202
|
-
(concat "^\\(" (mhc-regexp-opt mhc-draft-
|
198
|
+
(concat "^\\(" (mhc-regexp-opt mhc-draft-import-header-list) "\\)")
|
203
199
|
'regexp)))
|
204
200
|
|
205
201
|
(defun mhc-draft-setup-headers (&optional headers-values)
|
@@ -217,22 +213,40 @@ HEADERS-VALUES is a list of cons-cell like: ((header-name . value) ...)."
|
|
217
213
|
(mhc-header-put-value xsc ""))))
|
218
214
|
xsc-headers))))
|
219
215
|
|
216
|
+
(defun mhc-draft-record-id ()
|
217
|
+
"Get X-SC-Record-Id header value in draft buffer."
|
218
|
+
(mhc-header-narrowing
|
219
|
+
(mhc-header-get-value "x-sc-record-id")))
|
220
|
+
|
221
|
+
(defun mhc-draft-validate-buffer (&optional buffer)
|
222
|
+
"Validate mhc draft BUFFER.
|
223
|
+
If BUFFER is omitted, current buffer will be validated."
|
224
|
+
(interactive)
|
225
|
+
(let ((validation (mhc-process-send-command-with-buffer
|
226
|
+
"validate --format=emacs"
|
227
|
+
(or buffer (current-buffer)))))
|
228
|
+
(if (and (stringp validation)
|
229
|
+
(string-match "^OK" validation))
|
230
|
+
(message "Validation passed.")
|
231
|
+
;; \\' means end of string (not end of each line)
|
232
|
+
(error "ERROR: %s" (replace-regexp-in-string "[.\r\n]+\\'" "" validation)))))
|
233
|
+
|
220
234
|
(defun mhc-draft-finish ()
|
221
235
|
"Add current draft as a schedule."
|
222
236
|
(interactive)
|
223
|
-
(
|
224
|
-
|
225
|
-
|
226
|
-
|
227
|
-
|
228
|
-
|
229
|
-
(
|
230
|
-
|
231
|
-
|
232
|
-
|
233
|
-
|
234
|
-
|
235
|
-
|
237
|
+
(mhc-draft-validate-buffer)
|
238
|
+
(mhc-calendar-input-exit)
|
239
|
+
(if (mhc-db-add-record-from-buffer
|
240
|
+
(current-buffer)
|
241
|
+
(not (called-interactively-p 'interactive)))
|
242
|
+
(progn
|
243
|
+
(kill-buffer (current-buffer))
|
244
|
+
(mhc-window-pop)
|
245
|
+
(or (and (mhc-summary-buffer-p)
|
246
|
+
(mhc-rescan-month mhc-default-hide-private-schedules))
|
247
|
+
(and (mhc-calendar-p) (mhc-calendar-rescan)))
|
248
|
+
(run-hooks 'mhc-draft-finish-hook)
|
249
|
+
(message "Successfully registered."))))
|
236
250
|
|
237
251
|
(provide 'mhc-draft)
|
238
252
|
|
data/emacs/mhc-face.el
CHANGED
@@ -68,7 +68,7 @@ refer to mhc-calendar-hnf-face-alist-internal.")
|
|
68
68
|
(1 font-lock-type-face)
|
69
69
|
(2 font-lock-comment-face)
|
70
70
|
(3 font-lock-builtin-face))
|
71
|
-
("\\(X-SC-\\(Subject\\|Location\\|Day\\|Time\\|Category\\|Priority\\|Recurrence-Tag\\|Mission-Tag
|
71
|
+
("\\(X-SC-\\(Subject\\|Location\\|Day\\|Time\\|Category\\|Priority\\|Recurrence-Tag\\|Mission-Tag\\|Cond\\|Duration\\|Alarm\\|Record-Id\\|Sequence\\):\\)"
|
72
72
|
(1 font-lock-keyword-face))
|
73
73
|
("\\(\\[End of message\\]\\)"
|
74
74
|
(1 mhc-message-face-eof-marker))
|
data/emacs/mhc-header.el
CHANGED
@@ -63,6 +63,25 @@
|
|
63
63
|
(memq (following-char) '(? ?\t)))))
|
64
64
|
|
65
65
|
|
66
|
+
(defun mhc-header-distill-header (header &optional regexp)
|
67
|
+
"Remove all headers except X-SC-* and HEADER.
|
68
|
+
If REGEXP is non-nil, HEADER is a regular expression."
|
69
|
+
(save-excursion
|
70
|
+
(let ((case-fold-search t)
|
71
|
+
(header-top)
|
72
|
+
(header-name)
|
73
|
+
(all-regexp "^[^:]+:")
|
74
|
+
(use-regexp (if regexp header (concat "^" (regexp-quote header) ":")))
|
75
|
+
(xsc-regexp (concat "^\\(" (mhc-regexp-opt (mhc-header-list)) "\\)")))
|
76
|
+
(goto-char (point-min))
|
77
|
+
(while (re-search-forward all-regexp nil t)
|
78
|
+
(setq header-top (match-beginning 0)
|
79
|
+
header-name (match-string 0))
|
80
|
+
(mhc-header-goto-end)
|
81
|
+
(unless (or (string-match use-regexp header-name)
|
82
|
+
(string-match xsc-regexp header-name))
|
83
|
+
(delete-region header-top (point)))))))
|
84
|
+
|
66
85
|
(defun mhc-header-delete-header (header &optional regexp) "\
|
67
86
|
Remove HEADER in the narrowed buffer.
|
68
87
|
If REGEXP, HEADER is a regular expression."
|
@@ -177,4 +196,4 @@ If REGEXP, HEADER is a regular expression."
|
|
177
196
|
;; ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
|
178
197
|
;; OF THE POSSIBILITY OF SUCH DAMAGE.
|
179
198
|
|
180
|
-
;;; mhc-header.el ends here
|
199
|
+
;;; mhc-header.el ends here
|
data/emacs/mhc-minibuf.el
CHANGED
@@ -189,7 +189,7 @@
|
|
189
189
|
(if (not (pos-visible-in-window-p b))
|
190
190
|
(recenter))
|
191
191
|
(if (not non-minibuf)
|
192
|
-
(
|
192
|
+
(select-window (minibuffer-window)))
|
193
193
|
;; in minibuffer
|
194
194
|
(if non-minibuf
|
195
195
|
()
|
@@ -254,12 +254,17 @@
|
|
254
254
|
(mhc-date-format default
|
255
255
|
"%04d/%02d/%02d" yy mm dd))
|
256
256
|
((listp default)
|
257
|
-
(
|
258
|
-
|
259
|
-
|
260
|
-
|
261
|
-
|
262
|
-
|
257
|
+
(let ((sep " ") (datelist default))
|
258
|
+
(if (null (cdr (last default)))
|
259
|
+
()
|
260
|
+
(setq sep "-")
|
261
|
+
(setq datelist (list (car default) (cdr default))))
|
262
|
+
(mapconcat
|
263
|
+
(lambda (date)
|
264
|
+
(mhc-date-format date
|
265
|
+
"%04d/%02d/%02d" yy mm dd))
|
266
|
+
datelist
|
267
|
+
sep)))
|
263
268
|
(t
|
264
269
|
nil)))
|
265
270
|
(current-buffer)
|
data/emacs/mhc-parse.el
CHANGED
data/emacs/mhc-process.el
CHANGED
@@ -1,34 +1,51 @@
|
|
1
|
-
(
|
1
|
+
(require 'mhc-vars)
|
2
2
|
|
3
|
-
(
|
3
|
+
(defvar mhc-process nil)
|
4
4
|
|
5
5
|
(defun mhc-process-send-command (command)
|
6
6
|
(unless (and (processp mhc-process)
|
7
7
|
(eq (process-status mhc-process) 'run))
|
8
8
|
(mhc-start-process))
|
9
|
-
(message "COMMAND: %s" command)
|
10
9
|
(with-current-buffer (process-buffer mhc-process)
|
11
10
|
(delete-region (point-min) (point-max))
|
12
11
|
(process-send-string mhc-process (concat command "\n"))
|
13
12
|
(let ((i 1))
|
14
13
|
(while (not (and (> (point-max) 1)
|
15
14
|
(eq (char-after (1- (point-max))) ?\n)))
|
16
|
-
(message (format "Waiting mhc process...%d" i))
|
15
|
+
(if (< 2 i) (message (format "Waiting mhc process...%d" i)))
|
17
16
|
(setq i (1+ i))
|
18
17
|
(accept-process-output mhc-process 0.5)))
|
19
18
|
(read (buffer-substring (point-min) (1- (point-max))))))
|
20
19
|
|
20
|
+
(defun mhc-process-send-command-with-buffer (command buffer)
|
21
|
+
"Send COMMAND to mhc process with BUFFER via temporal file."
|
22
|
+
(let ((temp-file (make-temp-file "mhc")))
|
23
|
+
(unwind-protect
|
24
|
+
(with-current-buffer buffer
|
25
|
+
(mhc-write-region-as-coding-system
|
26
|
+
mhc-default-coding-system
|
27
|
+
(point-min)
|
28
|
+
(point-max)
|
29
|
+
temp-file
|
30
|
+
nil 'nomsg)
|
31
|
+
(mhc-process-send-command
|
32
|
+
(format "%s %s" command temp-file)))
|
33
|
+
(delete-file temp-file))))
|
34
|
+
|
21
35
|
(defun mhc-start-process ()
|
22
36
|
(interactive)
|
23
37
|
(let ((process-connection-type nil)) ;; use PIPE not tty
|
24
38
|
(if (and (processp mhc-process)
|
25
39
|
(eq (process-status mhc-process) 'run))
|
26
40
|
(kill-process mhc-process))
|
27
|
-
(setq mhc-process
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
41
|
+
(setq mhc-process
|
42
|
+
(apply 'start-process
|
43
|
+
(delq nil `("mhc"
|
44
|
+
,(get-buffer-create " *mhc-scan-process*")
|
45
|
+
,mhc-ruby-program-name
|
46
|
+
,mhc-program-name
|
47
|
+
"server"))))
|
48
|
+
(set-process-coding-system mhc-process 'utf-8 'utf-8)
|
32
49
|
(set-process-query-on-exit-flag mhc-process nil)
|
33
50
|
mhc-process))
|
34
51
|
|