markdown preview mode initial commit
This commit is contained in:
parent
0f0c7e4387
commit
9478b592a0
@ -1,4 +1,9 @@
|
||||
Markdown preview minor mode
|
||||
Markdown preview mode
|
||||
===========================
|
||||
|
||||
Markdown mode extention with realtime preview
|
||||
Markdown mode extension with realtime preview. Minor mode.
|
||||
|
||||
Depends on:
|
||||
|
||||
* markdown-mode
|
||||
* websocket.el
|
||||
|
94
markdown-preview-mode.el
Normal file
94
markdown-preview-mode.el
Normal file
@ -0,0 +1,94 @@
|
||||
;;; markdown-preview-mode.el --- markdown realtime preview.
|
||||
|
||||
;; Copyright (C) 2014 <igor.shimko@gmail.com>
|
||||
|
||||
;; Author: Kostafey <kostafey@gmail.com>
|
||||
;; URL: https://github.com/ancane/markdown-preview-mode
|
||||
;; Keywords: markdown, preview
|
||||
;; Package-Requires: ((websocket "1.3"))
|
||||
|
||||
;; This file is not part of GNU Emacs.
|
||||
|
||||
;; This program is free software; you can redistribute it and/or modify
|
||||
;; it under the terms of the GNU General Public License as published by
|
||||
;; the Free Software Foundation; either version 3, or (at your option)
|
||||
;; any later version.
|
||||
;;
|
||||
;; This program is distributed in the hope that it will be useful,
|
||||
;; but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
;; GNU General Public License for more details.
|
||||
;;
|
||||
;; You should have received a copy of the GNU General Public License
|
||||
;; along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
(eval-when-compile (require 'cl))
|
||||
|
||||
(require 'websocket)
|
||||
(require 'markdown-mode)
|
||||
|
||||
(defgroup markdown-preview-mode nil
|
||||
"Markdown preview mode"
|
||||
:group 'text
|
||||
:prefix "mdpm:")
|
||||
|
||||
(defvar mdpm:websocket-port 7379)
|
||||
(defvar mdpm:websocket-server nil)
|
||||
(defvar mdpm:websocket-clients nil)
|
||||
(defvar mdpm:directory (file-name-directory load-file-name))
|
||||
|
||||
;; (setq mdpm:websocket-server (get-process "websocket server on port 7379"))
|
||||
|
||||
(defun mdpm:start-websocket-server ()
|
||||
(when (not mdpm:websocket-server)
|
||||
(setq mdpm:websocket-server
|
||||
(websocket-server
|
||||
mdpm:websocket-port
|
||||
:on-message (lambda (websocket frame)
|
||||
(mapc (lambda (ws)
|
||||
;; send frame only if ws != websocket
|
||||
(websocket-send-text
|
||||
ws
|
||||
(websocket-frame-payload frame))))
|
||||
mdpm:websocket-clients)
|
||||
:on-open (lambda (websocket)
|
||||
(push websocket mdpm:websocket-clients))
|
||||
:on-close (lambda (websocket)
|
||||
(delete websocket mdpm:websocket-clients))))))
|
||||
|
||||
(defun mdpm:stop-websocket-server ()
|
||||
(when mdpm:websocket-server
|
||||
(delete-process mdpm:websocket-server)
|
||||
(setq mdpm:websocket-server nil
|
||||
mdpm:websocket-clients nil)))
|
||||
|
||||
(defun mdpm:send ())
|
||||
|
||||
(defun mdpm:start ()
|
||||
(message "MDP: Start")
|
||||
(mdpm:start-websocket-server)
|
||||
(browse-url (concat mdpm:directory "preview.html"))
|
||||
(add-hook 'kill-emacs-hook 'mdpm:stop-websocket-server)
|
||||
(add-hook 'after-save-hook 'mdpm:send nil t))
|
||||
|
||||
(defun mdpm:stop ()
|
||||
(message "MDP: Stop")
|
||||
(mdpm:stop-websocket-server)
|
||||
(remove-hook 'kill-emacs-hook 'mdpm:stop-websocket-server)
|
||||
(remove-hook 'after-save-hook 'mdpm:send))
|
||||
|
||||
(define-minor-mode markdown-preview-mode
|
||||
"Markdown preview mode"
|
||||
:group 'markdown-preview-mode
|
||||
:init-value nil
|
||||
|
||||
(when (not (equal major-mode 'markdown-mode))
|
||||
(markdown-mode))
|
||||
|
||||
(if (not markdown-preview-mode)
|
||||
(mdpm:start)
|
||||
(mdpm:stop)))
|
||||
|
||||
(provide 'markdown-preview-mode)
|
||||
|
||||
;;; markdown-preview-mode.el ends here
|
33
preview.html
Normal file
33
preview.html
Normal file
@ -0,0 +1,33 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1, minimal-ui">
|
||||
<title>Markdown preview</title>
|
||||
<script>
|
||||
var socket = new WebSocket("ws://localhost:7379");
|
||||
socket.onopen = function() {
|
||||
alert("Connection established.");
|
||||
};
|
||||
socket.onclose = function(event) {
|
||||
if (event.wasClean) {
|
||||
alert('Connection closed gracefully.');
|
||||
} else {
|
||||
alert('Connection terminated.');
|
||||
}
|
||||
alert('Code: ' + event.code + ' reason: ' + event.reason);
|
||||
};
|
||||
socket.onmessage = function(event) {
|
||||
alert("Message received: " + event.data);
|
||||
};
|
||||
socket.onerror = function(error) {
|
||||
alert("Error: " + error.message);
|
||||
};
|
||||
</script>
|
||||
</head>
|
||||
<body>
|
||||
<article id="markdown-body">
|
||||
<p>Markdown preview</p>
|
||||
</article>
|
||||
</body>
|
||||
</html>
|
Loading…
Reference in New Issue
Block a user