;;; Code:
;;
-(eval-when-compile (require 'cl))
+(eval-when-compile
+ (require 'cl)
+ (require 'static))
(require 'elmo-vars)
(require 'elmo-date)
(require 'mcharset)
(fset 'elmo-base64-decode-string
(mel-find-function 'mime-decode-string "base64"))
-(if elmo-use-hardlink
- (defalias 'elmo-add-name-to-file 'add-name-to-file)
- (defun elmo-add-name-to-file
- (filename newname &optional ok-if-already-exists)
- (copy-file filename newname ok-if-already-exists t)))
+(eval-and-compile
+ (if elmo-use-hardlink
+ (defalias 'elmo-add-name-to-file 'add-name-to-file)
+ (defun elmo-add-name-to-file
+ (filename newname &optional ok-if-already-exists)
+ (copy-file filename newname ok-if-already-exists t))))
(defmacro elmo-set-work-buf (&rest body)
"Execute BODY on work buffer. Work buffer remains."
- (` (save-excursion
- (set-buffer (get-buffer-create elmo-work-buf-name))
- (set-buffer-multibyte default-enable-multibyte-characters)
- (erase-buffer)
- (,@ body))))
+ `(with-current-buffer (get-buffer-create elmo-work-buf-name)
+ (set-buffer-multibyte default-enable-multibyte-characters)
+ (erase-buffer)
+ ,@body))
(put 'elmo-set-work-buf 'lisp-indent-function 0)
(def-edebug-spec elmo-set-work-buf t)
(defmacro elmo-bind-directory (dir &rest body)
"Set current directory DIR and execute BODY."
- (` (let ((default-directory (file-name-as-directory (, dir))))
- (,@ body))))
+ `(let ((default-directory (file-name-as-directory ,dir)))
+ ,@body))
(put 'elmo-bind-directory 'lisp-indent-function 1)
(def-edebug-spec elmo-bind-directory
(goto-char (point-min))
(setq case-fold-search nil)
(re-search-forward "^;;;coding system: "
- ;;(+ (point-min) 3000) t))
+;;; (+ (point-min) 3000) t))
nil t))
(looking-at "[^\t\n\r ]+")
(find-coding-system
(defsubst elmo-delete-char (char string &optional unibyte)
(save-match-data
(elmo-set-work-buf
- (let ((coding-system-for-read 'no-conversion)
- (coding-system-for-write 'no-conversion))
- (if unibyte (set-buffer-multibyte nil))
- (insert string)
- (goto-char (point-min))
- (while (search-forward (char-to-string char) nil t)
- (replace-match ""))
- (buffer-string)))))
+ (let ((coding-system-for-read 'no-conversion)
+ (coding-system-for-write 'no-conversion))
+ (if unibyte (set-buffer-multibyte nil))
+ (insert string)
+ (goto-char (point-min))
+ (while (search-forward (char-to-string char) nil t)
+ (replace-match ""))
+ (buffer-string)))))
(defsubst elmo-delete-cr-buffer ()
"Delete CR from buffer."
(defun elmo-delete-cr (string)
(save-match-data
(elmo-set-work-buf
- (insert string)
- (goto-char (point-min))
- (while (search-forward "\r\n" nil t)
- (replace-match "\n"))
- (buffer-string))))
+ (insert string)
+ (goto-char (point-min))
+ (while (search-forward "\r\n" nil t)
+ (replace-match "\n"))
+ (buffer-string))))
(defun elmo-last (list)
(and list (nth (1- (length list)) list)))
(setq list (cdr list))))
list)
+(defun elmo-union (l1 l2)
+ "Make a union of two lists"
+ (elmo-uniq-sorted-list (sort (append l1 l2) #'<)))
+
(defun elmo-list-insert (list element after)
(let* ((match (memq after list))
(rest (and match (cdr (memq after list)))))
(defun elmo-get-file-string (filename &optional remove-final-newline)
(elmo-set-work-buf
- (let (insert-file-contents-pre-hook ; To avoid autoconv-xmas...
- insert-file-contents-post-hook)
- (when (file-exists-p filename)
- (if filename
- (as-binary-input-file (insert-file-contents filename)))
- (when (and remove-final-newline
- (> (buffer-size) 0)
- (= (char-after (1- (point-max))) ?\n))
- (goto-char (point-max))
- (delete-backward-char 1))
- (buffer-string)))))
+ (let (insert-file-contents-pre-hook ; To avoid autoconv-xmas...
+ insert-file-contents-post-hook)
+ (when (file-exists-p filename)
+ (if filename
+ (as-binary-input-file (insert-file-contents filename)))
+ (when (and remove-final-newline
+ (> (buffer-size) 0)
+ (= (char-after (1- (point-max))) ?\n))
+ (goto-char (point-max))
+ (delete-char -1))
+ (buffer-string)))))
(defun elmo-save-string (string filename)
(if string
(elmo-set-work-buf
- (as-binary-output-file
- (insert string)
- (write-region (point-min) (point-max)
- filename nil 'no-msg))
- )))
+ (as-binary-output-file
+ (insert string)
+ (write-region (point-min) (point-max)
+ filename nil 'no-msg))
+ )))
(defun elmo-max-of-list (nlist)
(let ((l nlist)
print-length print-level)
(prin1 elmo-passwd-alist (current-buffer))
(princ "\n" (current-buffer))
-;;; (if (and (file-exists-p filename)
+;;; (if (and (file-exists-p filename)
;;; (not (equal 384 (file-modes filename))))
;;; (error "%s is not safe.chmod 600 %s!" filename filename))
(if (file-writable-p filename)
(elmo-base64-encode-string pass)))))
(if elmo-passwd-life-time
(run-with-timer elmo-passwd-life-time nil
- (` (lambda () (elmo-remove-passwd (, key))))))
+ `(lambda () (elmo-remove-passwd ,key))))
pass)))
(defun elmo-remove-passwd (key)
(defun elmo-string-to-list (string)
(elmo-set-work-buf
- (insert string)
- (goto-char (point-min))
- (insert "(")
- (goto-char (point-max))
- (insert ")")
- (goto-char (point-min))
- (read (current-buffer))))
+ (insert string)
+ (goto-char (point-min))
+ (insert "(")
+ (goto-char (point-max))
+ (insert ")")
+ (goto-char (point-min))
+ (read (current-buffer))))
(defun elmo-list-to-string (list)
(let ((tlist list)
(directory-files path t "^[^\\.]")
(error nil)))
(result 0.0))
- ;; (result (nth 7 file-attr))) ... directory size
+;;; (result (nth 7 file-attr))) ; ... directory size
(while files
(setq result (+ result (or (elmo-disk-usage (car files)) 0)))
(setq files (cdr files)))
(and (eq (car diff) 0)
(< diff-time (nth 1 diff)))))
-(if (fboundp 'std11-fetch-field)
- (defalias 'elmo-field-body 'std11-fetch-field) ;;no narrow-to-region
- (defalias 'elmo-field-body 'std11-field-body))
+(eval-and-compile
+ (if (fboundp 'std11-fetch-field)
+ (defalias 'elmo-field-body 'std11-fetch-field) ;;no narrow-to-region
+ (defalias 'elmo-field-body 'std11-field-body)))
(defun elmo-unfold-field-body (name)
(let ((value (elmo-field-body name)))
(defmacro elmo-string (string)
"STRING without text property."
- (` (let ((obj (copy-sequence (, string))))
- (and obj (set-text-properties 0 (length obj) nil obj))
- obj)))
+ `(let ((obj (copy-sequence ,string)))
+ (and obj (set-text-properties 0 (length obj) nil obj))
+ obj))
(defun elmo-flatten (list-of-list)
"Flatten LIST-OF-LIST."
prev
(nconc
(list
- ;; (beg . (1- number))
+;;; (beg . (1- number))
(let ((new (cons (car elem) (1- number))))
(if (eq (car new) (cdr new))
(car new)
new))
- ;; ((1+ number) . end)
+;;; ((1+ number) . end)
(let ((new (cons (1+ number) (cdr elem))))
(if (eq (car new) (cdr new))
(car new)
'section means partial section cache exists.
'entire means entire cache exists.
If the cache is partial file-cache, TYPE is 'partial."
- (` (cons (, path) (, status))))
+ `(cons ,path ,status))
(defmacro elmo-file-cache-path (file-cache)
"Returns the file path of the FILE-CACHE."
- (` (car (, file-cache))))
+ `(car ,file-cache))
(defmacro elmo-file-cache-status (file-cache)
"Returns the status of the FILE-CACHE."
- (` (cdr (, file-cache))))
+ `(cdr ,file-cache))
(defsubst elmo-cache-to-msgid (filename)
(concat "<" (elmo-recover-string-from-filename filename) ">"))
"Return file name for the file-cache corresponds to the section.
PATH is the file-cache path.
SECTION is the section string."
- (` (expand-file-name (or (, section) "") (, path))))
+ `(expand-file-name (or ,section "") ,path))
(defun elmo-file-cache-delete (path)
"Delete a cache on PATH."
(cons (car (car cfl))
(car flist)))))
(setq cfl (cdr cfl)))
-;;; (prin1 firsts)
+;;; (prin1 firsts)
(while firsts
(if (and (not oldest-entity)
(cdr (cdr (car firsts))))
"Expire cache file by age.
Optional argument DAYS specifies the days to expire caches."
(interactive)
- (let ((age (or (and days (int-to-string days))
+ (let ((age (or (and days (number-to-string days))
(and (interactive-p)
(read-from-minibuffer
(format "Enter days (%s): "
elmo-cache-expire-default-age)))
- (int-to-string elmo-cache-expire-default-age)))
+ (number-to-string elmo-cache-expire-default-age)))
(dirs (directory-files
elmo-cache-directory
t "^[^\\.]"))
curtime)
(if (string= age "")
(setq age elmo-cache-expire-default-age)
- (setq age (string-to-int age)))
+ (setq age (string-to-number age)))
(setq curtime (current-time))
(setq curtime (+ (* (nth 0 curtime)
(float 65536)) (nth 1 curtime)))
(save-match-data
(let (beg)
(elmo-set-work-buf
- (insert string)
- (goto-char (point-max))
- (when (search-backward "<" nil t)
- (setq beg (point))
- (if (search-forward ">" nil t)
- (elmo-replace-in-string
- (buffer-substring beg (point)) "\n[ \t]*" ""))))))))
+ (insert string)
+ (goto-char (point-max))
+ (when (search-backward "<" nil t)
+ (setq beg (point))
+ (if (search-forward ">" nil t)
+ (elmo-replace-in-string
+ (buffer-substring beg (point)) "\n[ \t]*" ""))))))))
(defun elmo-msgdb-get-message-id-from-buffer ()
(let ((msgid (elmo-field-body "message-id")))
file nil beg
(incf beg elmo-msgdb-file-header-chop-length))))
(prog1 (not (search-forward "\n\n" nil t))
- (goto-char (point-max))))))))
+ (goto-char (point-max)))))
+ (elmo-delete-cr-buffer))))
;;
;; overview handling