Navigation over new messages

This commit is contained in:
Denis Zheleztsov 2017-10-03 16:27:14 +03:00
parent eb06c3e0da
commit e00a8c65d0

78
idec.el
View File

@ -121,13 +121,15 @@ Not used if `idec-smart-fetching' is not nil."
(defun idec-close-message-buffer () (defun idec-close-message-buffer ()
"Close buffer with message." "Close buffer with message."
(kill-buffer (current-buffer))) (kill-this-buffer))
(defvar idec-mode-hook nil) (defvar idec-mode-hook nil)
(defvar idec-mode-map (defvar idec-mode-map
(let ((map (make-keymap))) (let ((map (make-keymap)))
(define-key map "\C-c \C-c" 'kill-this-buffer) (define-key map "\C-c \C-c" 'kill-this-buffer)
(define-key map "\C-c \C-n" 'idec-next-message)
(define-key map "\C-c \C-b" 'idec-previous-message)
map) map)
"Keymapping for IDEC mode.") "Keymapping for IDEC mode.")
@ -144,7 +146,7 @@ Not used if `idec-smart-fetching' is not nil."
"Quotes highligting for IDEC mode.") "Quotes highligting for IDEC mode.")
(defvar idec-font-lock-keywords idec-font-lock-keywords-2 (defvar idec-font-lock-keywords idec-font-lock-keywords-2
"Default highlighting expressions for WPDL mode.") "Default highlighting expressions for IDEC mode.")
(defvar idec-mode-syntax-table (defvar idec-mode-syntax-table
(let ((st (make-syntax-table))))) (let ((st (make-syntax-table)))))
@ -154,7 +156,7 @@ Not used if `idec-smart-fetching' is not nil."
(interactive) (interactive)
(kill-all-local-variables) (kill-all-local-variables)
;; Mode definition ;; Mode definition
;; (set-syntax-table idec-mode-syntax-table) (set-syntax-table idec-mode-syntax-table)
(use-local-map idec-mode-map) (use-local-map idec-mode-map)
(set (make-local-variable 'font-lock-defaults) '(idec-font-lock-keywords)) (set (make-local-variable 'font-lock-defaults) '(idec-font-lock-keywords))
(setq major-mode 'idec-mode) (setq major-mode 'idec-mode)
@ -162,15 +164,25 @@ Not used if `idec-smart-fetching' is not nil."
(setq imenu-generic-expression "*IDEC") (setq imenu-generic-expression "*IDEC")
(run-hooks 'idec-mode-hook)) (run-hooks 'idec-mode-hook))
;; (define-derived-mode idec-mode ;; NAVIGATION FUNCTIONS
;; text-mode "[idec]" ;; ;;;;;;;;;;;;;;;;;;;;
;; "Major mode for view and editing IDEC messages."
;; (kill-all-local-variables) (defun idec-next-message ()
;; ;; Mode definition "Show next message."
;; (setq major-mode 'idec-mode) (interactive)
;; (setq mode-name "[idec]") (kill-this-buffer)
;; (use-local-map idec-mode-map) (forward-button 1)
;; (setq imenu-generic-expression "*IDEC")) (push-button))
(defun idec-previous-message ()
"Show next message."
(interactive)
(kill-this-buffer)
(backward-button 1)
(push-button))
;; END OF NAVIGATION FUNCTIONS
;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; END OF MODE ;; END OF MODE
;; ;;;;;;;;;;; ;; ;;;;;;;;;;;
@ -253,21 +265,9 @@ White space here is any of: space, tab, Emacs newline (line feed, ASCII 10)."
(trim-string (nth 6 (split-string msg "\n")))) (trim-string (nth 6 (split-string msg "\n"))))
(defun get-message-body (msg) (defun get-message-body (msg)
"Get MSG body text." "Get MSG body text.
(goto-char (point-min)) Return list with body content."
(forward-line 8) (-drop 8 (split-string msg "\n")))
(substring msg (point) (point-max)))
;; (s-join "\n" (last (split-string msg "\n") 7)))
;; (defvar msg-counter 1)
;; (defvar msg-body '())
;; (defvar msg-list (split-string msg "\n"))
;; (dolist (line msg-list)
;; (if (not (= msg-counter 7))
;; (setq msg-counter (1+ msg-counter))
;; (setq msg-body (append msg-body '(line)))))
;; (dolist (b msg-body)
;; (message b))
;; (s-join "\n" msg-body))
(defun get-longest-field (field msg-list) (defun get-longest-field (field msg-list)
"Return longest FIELD in MSG-LIST." "Return longest FIELD in MSG-LIST."
@ -278,12 +278,7 @@ White space here is any of: space, tab, Emacs newline (line feed, ASCII 10)."
(when (> (length (get-message-field msg field)) (when (> (length (get-message-field msg field))
field-max) field-max)
(setq field-max (length (get-message-field msg field))))) (setq field-max (length (get-message-field msg field)))))
field-max field-max)
;; Populate list
;; (dolist (msg msg-list)
;; (setq field-legth (append field-legth (length (get-message-field msg field)))))
;; (last (sort field-legth '<))
)
(defun get-message-field (msg field) (defun get-message-field (msg field)
"Get message MSG FIELD." "Get message MSG FIELD."
@ -316,13 +311,14 @@ White space here is any of: space, tab, Emacs newline (line feed, ASCII 10)."
(interactive) (interactive)
(defvar current-echo nil) (defvar current-echo nil)
(defvar new-messages '()) (defvar new-messages '())
(dolist (line (split-string (download-subscriptions) "\n")) (let (new-messages-list)
(if (string-match "\\." line) (dolist (line (split-string (download-subscriptions) "\n"))
(and (setq current-echo line) (if (string-match "\\." line)
(store-echo-counter line)) (and (setq current-echo line)
(when (and (check-message-in-echo line current-echo) (store-echo-counter line))
(> (length line) 1)) (when (and (check-message-in-echo line current-echo)
(download-message current-echo line)))) (> (length line) 1))
(download-message current-echo line)))))
(display-new-messages)) (display-new-messages))
(defun display-message (msg) (defun display-message (msg)
@ -339,7 +335,7 @@ White space here is any of: space, tab, Emacs newline (line feed, ASCII 10)."
(princ (concat "At: " (get-message-field msg "time") "\n")) (princ (concat "At: " (get-message-field msg "time") "\n"))
(princ (concat "Subject: " (get-message-field msg "subj") "\n")) (princ (concat "Subject: " (get-message-field msg "subj") "\n"))
(princ (concat "__________________________________\n\n" (princ (concat "__________________________________\n\n"
(get-message-field msg "body"))) (s-join "\n" (get-message-field msg "body"))))
(princ "\n__________________________________\n") (princ "\n__________________________________\n")
(princ "[") (princ "[")
(insert-button "Answer" (insert-button "Answer"