1 ;;; stmcrblog-mode.el --- static micro-blogging engine from Emacs |
|
2 |
|
3 ;; Copyright (C) 2011 by Oleksandr Gavenko <gavenkoa@gmail.com> |
|
4 |
|
5 ;; You can do anything with this file without any warranty. |
|
6 |
|
7 ;; Author: Oleksandr Gavenko <gavenkoa@gmail.com> |
|
8 ;; Maintainer: Oleksandr Gavenko <gavenkoa@gmail.com> |
|
9 ;; Created: 2011-11-10 |
|
10 ;; Version: 0.1 |
|
11 ;; Keywords: blog, microblog, blogging, gtd |
|
12 |
|
13 ;;; Commentary: |
|
14 ;; |
|
15 ;; Very pure release. |
|
16 ;; |
|
17 ;; Depricated. Use 'jdone' mode. |
|
18 |
|
19 ;;; Code: |
|
20 |
|
21 (defconst stmcrblog-major-version 0 |
|
22 "stmcrblog major version.") |
|
23 |
|
24 (defconst stmcrblog-minor-version 1 |
|
25 "stmcrblog major version.") |
|
26 |
|
27 (defun stmcrblog-version (&optional here) |
|
28 "Return stmcrblog version." |
|
29 (interactive "P") |
|
30 (let ( (version-string (format "stmcrblog %d.%d" stmcrblog-major-version stmcrblog-minor-version)) ) |
|
31 (if here |
|
32 (insert version-string) |
|
33 (if (called-interactively-p 'interactive) |
|
34 (message "%s" version-string) |
|
35 version-string)) |
|
36 )) |
|
37 |
|
38 (defvar stmcrblog-file "~/.stmcrblog" |
|
39 "Blog entries storage file name.") |
|
40 |
|
41 (defvar stmcrblog-after-add-entry-hook nil |
|
42 "`stmcrblog-after-add-entry-hook' called after adding entries. |
|
43 You can use this hook to render and publish `stmcrblog-file'.") |
|
44 |
|
45 (defun stmcrblog-add-entry (msg) |
|
46 "Add post to blog. |
|
47 Automatically set time to current value. Only first line of MSG |
|
48 was added. |
|
49 |
|
50 `stmcrblog-after-add-entry-hook' called after adding entries. You |
|
51 can use this hook to render and publish `stmcrblog-file'." |
|
52 (let ( |
|
53 (coding-system-for-read 'utf-8) |
|
54 (coding-system-for-write 'utf-8) |
|
55 pos |
|
56 ) |
|
57 (setq pos (string-match "\n" msg)) |
|
58 (when pos |
|
59 (setq msg (substring msg 0 pos))) |
|
60 (save-excursion ;save-window-excursion |
|
61 (find-file stmcrblog-file) |
|
62 (beginning-of-buffer) |
|
63 (insert |
|
64 (format-time-string "%Y-%m-%d %H:%M" (current-time)) |
|
65 " " |
|
66 msg |
|
67 "\n") |
|
68 (save-buffer) |
|
69 (kill-buffer) |
|
70 ) |
|
71 (run-hooks 'stmcrblog-after-add-entry-hook) |
|
72 )) |
|
73 |
|
74 (defvar stmcrblog-buffer-name "*stmcrblog-entry*" |
|
75 "`stmcrblog' buffer name for composing editing message") |
|
76 |
|
77 (defun stmcrblog-post-edit (&optional msg) |
|
78 (let ( |
|
79 (buffer (get-buffer-create stmcrblog-buffer-name)) |
|
80 (current-buffer (current-buffer)) |
|
81 ) |
|
82 (switch-to-buffer buffer) |
|
83 (local-key-binding ) |
|
84 (kill-buffer buffer) |
|
85 (error "not-implemented") |
|
86 )) |
|
87 |
|
88 ;;;###autoload |
|
89 (defun stmcrblog-post (&optional prefix start end) |
|
90 "Post entry. |
|
91 Interactively, in Transient Mark mode when the mark is active, |
|
92 operate on the contents of the region. Otherwise, open |
|
93 `stmcrblog-buffer-name' buffer for message editing." |
|
94 (interactive "P\nr") |
|
95 (let ( msg ) |
|
96 (when (and (called-interactively-p 'interactive) transient-mark-mode mark-active) |
|
97 (setq msg (buffer-substring-no-properties start end)) |
|
98 ) |
|
99 (if msg |
|
100 (stmcrblog-add-entry msg) |
|
101 ) |
|
102 )) |
|
103 |
|
104 ;;;###autoload |
|
105 (defun stmcrblog-post-current-line (prefix) |
|
106 "Post current line. |
|
107 With prefix remove current line." |
|
108 (interactive "P") |
|
109 (stmcrblog-add-entry (buffer-substring-no-properties (line-beginning-position) (line-end-position))) |
|
110 (when prefix |
|
111 (move-beginning-of-line 1) |
|
112 (kill-line) |
|
113 ) |
|
114 ) |
|
115 |
|
116 (provide 'stmcrblog-mode) |
|
117 |
|
118 ;;; stmcrblog-mode.el ends here |
|