summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--trivium.el124
1 files changed, 124 insertions, 0 deletions
diff --git a/trivium.el b/trivium.el
new file mode 100644
index 0000000..0cfe761
--- /dev/null
+++ b/trivium.el
@@ -0,0 +1,124 @@
+;;; trivium.el --- convenience functions for the Trivium blogging system
+;; 04oct2008  +chris+
+
+(defface trivium-field-face
+  '((t (:bold t :underline t :background "grey25")))
+  "Face to use for RFC822 header fields in trivium-mode."
+  :group 'font-lock-highlighting-faces)
+
+(defface trivium-value-face
+  '((t (:bold t :background "grey25")))
+  "Face to use for RFC822 header values in trivium-mode."
+  :group 'font-lock-highlighting-faces)
+
+(defface trivium-leading-space-face
+  '((t (:background "grey40")))
+  "Face to use for leading space in trivium-mode."
+  :group 'font-lock-highlighting-faces)
+
+(defface trivium-trailing-space-face
+  '((t (:background "grey40")))
+  "Face to use for trailing space in trivium-mode."
+  :group 'font-lock-highlighting-faces)
+
+(defun trivium-update-blog ()
+  "Update the blog."
+  (interactive)
+  (compile "cd .. ; ruby trivium.rb"))
+
+(defun trivium-upload-blog ()
+  "Upload the blog."
+  (interactive)
+  (compile "cd .. ; ruby trivium.rb && ./upload"))
+
+(defun trivium-insert-link-markup ()
+  "Insert a '.link'."
+  (interactive)
+  (insert ".link \n")
+  (save-excursion
+    (insert "\n.link.\n")))
+
+(defun trivium-find-highest-link ()
+  (save-excursion
+    (goto-char (point-min))
+    (let ((highest 0))
+      (while (re-search-forward "\\[\\([0-9]+\\)\\]:" nil t)
+        (setq highest (max highest (string-to-number (match-string 1)))))
+      highest)))
+
+(defun trivium-insert-link (region-as-id)
+  "Insert a Markdown link.
+With prefix argument, the region is used as link id, else a
+unique number will be used.
+
+Enter the URL, press C-x C-x to get back to the text."
+  (interactive "N")
+  (let ((id (if region-as-id
+                (buffer-substring (region-beginning) (region-end))
+              (int-to-string (1+ (trivium-find-highest-link)))))
+        (start (region-beginning))
+        (end (region-end)))
+    (when region-as-id
+      (goto-char start))
+    (insert "[")
+    (if region-as-id
+        (progn
+          (goto-char (1+ end))
+          (insert "][]")
+          (push-mark))
+      (push-mark)
+      (insert "][" id "]"))
+
+    (forward-paragraph)
+
+    (if (looking-at "\n  \\[")
+        (forward-paragraph)
+      (when (eobp)
+        (insert "\n"))
+      (insert "\n"))
+
+    (insert "  [" id "]: ")
+    (save-excursion
+      (unless (looking-at "\n\n")
+        (insert "\n")))
+    (message "Enter the URL, press C-x C-x to get back to the text.")))
+
+(defun trivium-new-blog-entry ()
+  "Start a new blog entry.\n
+Call this function inside an empty buffer."
+  (interactive)
+  (goto-char (point-min))
+  (insert "Date: " (format-time-string "%a, %_d %b %Y %H:%M:%S %z" (current-time))
+	  "\n\n")
+  (goto-char (point-max))
+  (trivium-mode))
+
+(define-derived-mode trivium-mode
+  text-mode "Trivium"
+  "Major mode for editing Trivium weblog entries."
+  (make-local-variable 'font-lock-defaults)
+  (setq font-lock-defaults
+	'((("^\\([A-Z][A-Za-z0-9_]*:\\)\\(.*\n\\)"
+	    (1 'trivium-field-face)
+	    (2 'trivium-value-face))
+	   ("^\t" . 'trivium-leading-space-face)
+	   ("^    " . 'trivium-leading-space-face)
+	   ("  $" . 'trivium-trailing-space-face)
+	   )
+	  t nil))
+  (make-local-variable 'paragraph-separate)
+  (make-local-variable 'paragraph-start)
+  (setq paragraph-separate "[ \t\f]*$\\|\\.")
+  (setq paragraph-start "\f\\|[ 	]*$\\|\\.")
+  (font-lock-mode 1)
+  (set-buffer-file-coding-system 'utf-8 nil t))
+
+(define-key trivium-mode-map (kbd "C-c C-c") 'trivium-update-blog)
+(define-key trivium-mode-map (kbd "C-c C-u") 'trivium-upload-blog)
+
+(define-key trivium-mode-map (kbd "C-c C-l") 'trivium-insert-link-markup)
+(define-key trivium-mode-map (kbd "C-c l") 'trivium-insert-link)
+
+(global-set-key (kbd "C-x M") 'trivium-new-blog-entry)
+
+(provide 'trivium)