;;; eaf-markdown-previewer.el --- Markdown previewer ;; Filename: eaf-markdown-previewer.el ;; Description: Markdown previewer ;; Author: Andy Stewart ;; Maintainer: Andy Stewart ;; Copyright (C) 2021, Andy Stewart, all rights reserved. ;; Created: 2021-07-31 17:15:43 ;; Version: 0.1 ;; Last-Updated: 2021-07-31 17:15:43 ;; By: Andy Stewart ;; URL: http://www.emacswiki.org/emacs/download/eaf-markdown-previewer.el ;; Keywords: ;; Compatibility: GNU Emacs 28.0.50 ;; ;; Features that might be required by this library: ;; ;; ;; ;;; This file is NOT part of GNU Emacs ;;; License ;; ;; 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 this program; see the file COPYING. If not, write to ;; the Free Software Foundation, Inc., 51 Franklin Street, Fifth ;; Floor, Boston, MA 02110-1301, USA. ;;; Commentary: ;; ;; Markdown previewer ;; ;;; Installation: ;; ;; Put eaf-markdown-previewer.el to your load-path. ;; The load-path is usually ~/elisp/. ;; It's set in your ~/.emacs like this: ;; (add-to-list 'load-path (expand-file-name "~/elisp")) ;; ;; And the following to your ~/.emacs startup file. ;; ;; (require 'eaf-markdown-previewer) ;; ;; No need more. ;;; Customize: ;; ;; ;; ;; All of the above can customize by: ;; M-x customize-group RET eaf-markdown-previewer RET ;; ;;; Change log: ;; ;; 2021/07/31 ;; * First released. ;; ;;; Acknowledgements: ;; ;; ;; ;;; TODO ;; ;; ;; ;;; Require ;;; Code: (defcustom eaf-markdown-dark-mode "follow" "" :type 'string) (defcustom eaf-markdown-previewer-keybinding '(("C--" . "zoom_out") ("C-=" . "zoom_in") ("C-0" . "zoom_reset") ("C-s" . "search_text_forward") ("C-r" . "search_text_backward") ("C-n" . "scroll_up") ("C-p" . "scroll_down") ("C-f" . "scroll_right") ("C-b" . "scroll_left") ("C-v" . "scroll_up_page") ("C-y" . "yank_text") ("C-w" . "kill_text") ("M-e" . "atomic_edit") ("M-c" . "caret_toggle_browsing") ("M-D" . "select_text") ("M-s" . "open_link") ("M-S" . "open_link_new_buffer") ("M-B" . "open_link_background_buffer") ("C-/" . "undo_action") ("M-_" . "redo_action") ("M-w" . "copy_text") ("M-f" . "history_forward") ("M-b" . "history_backward") ("M-q" . "clear_cookies") ("C-t" . "toggle_password_autofill") ("C-d" . "save_page_password") ("M-a" . "toggle_adblocker") ("C-M-q" . "clear_history") ("C-M-i" . "import_chrome_history") ("M-v" . "scroll_down_page") ("M-<" . "scroll_to_begin") ("M->" . "scroll_to_bottom") ("M-p" . "duplicate_page") ("M-t" . "new_blank_page") ("M-d" . "toggle_dark_mode") ("SPC" . "insert_or_scroll_up_page") ("J" . "insert_or_select_left_tab") ("K" . "insert_or_select_right_tab") ("j" . "insert_or_scroll_up") ("k" . "insert_or_scroll_down") ("h" . "insert_or_scroll_left") ("l" . "insert_or_scroll_right") ("f" . "insert_or_open_link") ("F" . "insert_or_open_link_new_buffer") ("B" . "insert_or_open_link_background_buffer") ("c" . "insert_or_caret_at_line") ("u" . "insert_or_scroll_down_page") ("d" . "insert_or_scroll_up_page") ("H" . "insert_or_history_backward") ("L" . "insert_or_history_forward") ("t" . "insert_or_new_blank_page") ("T" . "insert_or_recover_prev_close_page") ("i" . "insert_or_focus_input") ("I" . "insert_or_open_downloads_setting") ("r" . "insert_or_refresh_page") ("g" . "insert_or_scroll_to_begin") ("x" . "insert_or_close_buffer") ("G" . "insert_or_scroll_to_bottom") ("-" . "insert_or_zoom_out") ("=" . "insert_or_zoom_in") ("0" . "insert_or_zoom_reset") ("m" . "insert_or_save_as_bookmark") ("o" . "insert_or_open_browser") ("y" . "insert_or_download_youtube_video") ("Y" . "insert_or_download_youtube_audio") ("p" . "insert_or_toggle_device") ("P" . "insert_or_duplicate_page") ("1" . "insert_or_save_as_pdf") ("2" . "insert_or_save_as_single_file") ("3" . "insert_or_save_as_screenshot") ("v" . "insert_or_view_source") ("e" . "insert_or_edit_url") ("n" . "insert_or_export_text") ("," . "insert_or_switch_to_reader_mode") ("." . "insert_or_translate_text") (";" . "insert_or_translate_page") ("C-M-c" . "copy_code") ("C-M-l" . "copy_link") ("C-a" . "select_all_or_input_text") ("M-u" . "clear_focus") ("C-j" . "open_downloads_setting") ("M-o" . "eval_js") ("M-O" . "eval_js_file") ("" . "eaf-browser-send-esc-or-exit-fullscreen") ("M-," . "eaf-send-down-key") ("M-." . "eaf-send-up-key") ("M-m" . "eaf-send-return-key") ("" . "refresh_page") ("" . "open_devtools") ("" . "eaf-send-ctrl-return-sequence") ) "The keybinding of EAF Markdown Previewer." :type 'cons) (defcustom eaf-markdown-extension-list '("md") "The extension list of markdown previewer application." :type 'cons) (defun eaf--markdown-preview-display (buf) "Given BUF, split window to show file and previewer." (eaf-split-preview-windows (buffer-local-value 'eaf--buffer-url buf)) (switch-to-buffer buf) (other-window +1)) (add-to-list 'eaf-app-binding-alist '("markdown-previewer" . eaf-markdown-previewer-keybinding)) (setq eaf-markdown-previewer-path (concat (file-name-directory load-file-name) "buffer.py")) (add-to-list 'eaf-app-module-path-alist '("markdown-previewer" . eaf-markdown-previewer-path)) (add-to-list 'eaf-preview-display-function-alist '("markdown-previewer" . eaf--markdown-preview-display)) (add-to-list 'eaf-app-extensions-alist '("markdown-previewer" . eaf-markdown-extension-list)) (provide 'eaf-markdown-previewer) ;;; eaf-markdown-previewer.el ends here