[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Emacsweblogs] weblogger & major mode
From: |
Mark A. Hershberger |
Subject: |
[Emacsweblogs] weblogger & major mode |
Date: |
Thu, 17 Sep 2009 23:29:03 -0400 |
User-agent: |
Gnus/5.13 (Gnus v5.13) Emacs/23.1.50 (gnu/linux) |
Based on David Abrahams' and Andrea Crotti's feedback, I've put together
a quick hack to toggle the weblogger-entry buffer between the major mode
of your choice.
I'd like to see what you guys think before committing this, so I've made
my changes available at <http://winkyfrown.com/weblogger.el>.
Some notes on the use of this:
* There are three new customizations:
+ weblogger-edit-mode - The major mode to switch to for editing the
content.
+ weblogger-edit-mode-toggle-hook - hook to run when switching to
the above mode.
+ weblogger-weblogger-mode-toggle-hook - hook to run when switching
back to weblogger-entry-mode
* In the weblogger-entry-mode, I've added a keybinding (C-c C-e) to
switch to editting the body in the major-mode you put in
weblogger-edit-mode (defaults to nxml-mode, but I'm open to
suggestions for a better mode).
When you switch major modes this way, the header is removed, the
hooks are run and you can edit the body using whatever you're used
to.
* When you want to switch back to edit the meta-data and/or submit
the entry, you would do “M-x weblogger-toggle-edit-body RET” and
the headers will be inserted back into the buffer and the buffer
will be switched back to weblogger-entry-mode.
Let me know what you think!
Mark.
--
http://hexmode.com/
Every day, mindful practice. When the mind is disciplined, then the
Way can work for us. Otherwise, all we do is talk of the Way; everything
is just words; and the world will know us as its one great fool.
=== modified file 'lisp/weblogger.el'
--- lisp/weblogger.el 2009-09-13 06:15:53 +0000
+++ lisp/weblogger.el 2009-09-18 02:26:58 +0000
@@ -242,6 +242,21 @@
:group 'weblogger
:type 'hook)
+(defcustom weblogger-edit-mode 'nxml-mode
+ "Major mode to use for editing weblog entries"
+ :group 'weblogger
+ :type 'function)
+
+(defcustom weblogger-edit-mode-toggle-hook nil
+ "Hook to call when switching to edit mode"
+ :group 'weblogger
+ :type 'hook)
+
+(defcustom weblogger-weblogger-mode-toggle-hook nil
+ "Hook to call when switching back to weblogger mode"
+ :group 'weblogger
+ :type 'hook)
+
(defvar weblogger-entry-list nil
"List of weblog entries that we know about. Chronological
order, with newest first.")
@@ -305,6 +320,9 @@
(defvar menu-bar-weblogger-menu nil)
+(defvar weblogger-header nil
+ "Holds the weblog header")
+
(defconst weblogger-blogger-app-key
"07C72E6970E0FBA5DE21BA9F4800C44534C19870"
"OBSOLETE. The appkey to send to weblog server. Generally this
@@ -400,6 +418,7 @@
(define-key map "\C-c\C-o" 'weblogger-change-server)
(define-key map "\C-c\C-w" 'weblogger-change-weblog)
(define-key map "\C-c\C-u" 'weblogger-change-user)
+ (define-key map "\C-c\C-e" 'weblogger-toggle-edit-body)
map)))
(unless weblogger-template-mode-map
@@ -514,17 +533,14 @@
(weblogger-select-texttype))))
(goto-char point-save)))
-(defun weblogger-entry-mode ()
+(define-derived-mode weblogger-entry-mode message-mode "Weblog"
"Major mode for editing text for Weblogger. Based on message-mode."
- (interactive)
- (message-mode)
- (message-disassociate-draft)
- (use-local-map weblogger-entry-mode-map)
- (setq mode-name "weblogger-entry")
- (setq major-mode 'weblogger-entry-mode)
+ ;; (interactive)
+ ;; (message-mode)
+ ;; (message-disassociate-draft)
+ ;; (use-local-map weblogger-entry-mode-map)
(unless weblogger-entry-ring
- (setq weblogger-entry-ring (make-ring weblogger-max-entries-in-ring)))
- (run-hooks 'weblogger-entry-mode-hook))
+ (setq weblogger-entry-ring (make-ring weblogger-max-entries-in-ring))))
(defun weblogger-template-mode ()
"Major mode for editing templates for Weblogger. Based on text-mode."
@@ -1329,6 +1345,24 @@
(buffer-substring-no-properties
(point) (point-max)))))))))
+(defun weblogger-toggle-edit-body ()
+ "Toggle between editting the body and editting the headers"
+ (interactive)
+ (if (string= mode-name "Weblog")
+ (progn
+ (message-goto-body)
+ (setq weblogger-header (buffer-substring (point-min) (point)))
+ (delete-region (point-min) (point))
+ (run-hooks 'weblogger-edit-mode-toggle-hook)
+ (funcall weblogger-edit-mode)
+ (make-local-variable 'weblogger-header))
+ (if (not (assoc 'weblogger-header (buffer-local-variables)))
+ (error "You didn't come here from a weblogger buffer, so we can switch
back")
+ (goto-char (point-min))
+ (insert weblogger-header)
+ (run-hooks 'weblogger-weblogger-mode-toggle-hook)
+ (weblogger-entry-mode))))
+
;; TODO -- Support for toolbar
;; (eval-when-compile (defvar tool-bar-map))
;; (if (featurep 'xemacs)