stmcrblog-mode.el
changeset 831 2fb6f961702d
parent 830 52df3d263c55
child 832 6ee7dee9df3a
equal deleted inserted replaced
830:52df3d263c55 831:2fb6f961702d
     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