Instant Github-flavored Markdown/Org preview using Grip (GitHub Readme Instant Preview) or mdopen.
- mdopen:
cargo install mdopen
From melpa, M-x package-install RET grip-mode RET
.
;; Make a keybinding: `C-c C-c g'
(define-key markdown-mode-command-map (kbd "g") #'grip-mode)
;; Or start grip when opening a markdown/org buffer
(add-hook 'markdown-mode-hook #'grip-mode)
(add-hook 'org-mode-hook #'grip-mode)
;; Use keybindings
(use-package grip-mode
:ensure t
:config (setq grip-use-mdopen t) ;; to use `mdopen` instead of `grip`
:bind (:map markdown-mode-command-map
("g" . grip-mode)))
;; Or using hooks
(use-package grip-mode
:ensure t
:config (setq grip-use-mdopen t) ;; to use `mdopen` instead of `grip`
:hook ((markdown-mode org-mode) . grip-mode))
mdopen
opens markdown
preview in default browser, and doesn't support emacs webkit preview.
Run M-x grip-mode
to preview the markdown and org buffers in the embedded
webkit browser if Emacs supports (built with --with-xwidgets
), or in the
default browser (Chrome, Firefox, etc.).
ox-gfm is optional, but it brings better rendering for org files.
Enjoy! 😄
Run M-x customize-group RET grip RET
or set the variables.
;; Path to the grip binary
(setq grip-binary-path "/path/to/grip")
;; Use embedded webkit to preview
;; This requires GNU/Emacs version >= 26 and built with the `--with-xwidgets` option.
(setq grip-preview-use-webkit t)
;; You can use this variable to define another browser
;; to use when loading previews. By default this value is `nil`
;; meaning use default browser defined by your system.
;; It respects `grip-preview-use-webkit'.
(setq grip-url-browser "custom_browser")
;; If you want to pass arguements to your custom browser then use
(setq grip-url-args '("arg1" "arg2" "etc"))
;; A base URL to another GitHub API.
(setq grip-github-api-url "")
;; A GitHub username for API authentication
(setq grip-github-user "")
;; A GitHub password or auth token for API auth
(setq grip-github-password "")
;; When nil, update the preview after file saves only, instead of also
;; after every text change
(setq grip-update-after-change nil)
;; Preview hostname
(setq grip-preview-host "localhost")
;; Sleep seconds to ensure the server starts
(setq grip-sleep-time 2)
If you don't set them you may have limitation to access Github APIs. Please visit Grip Access for details.
You can get the user name and password from ~/.authinfo
like this.
(require 'auth-source)
(let ((credential (auth-source-user-and-password "api.github.com")))
(setq grip-github-user (car credential)
grip-github-password (cadr credential)))
- Need to save to preview org buffers due to the performance trade-off.
-
How to resolve the issue: "GitHub Rate Limit Reached"?
You need to set your GitHub username to
grip-github-user
, then Creating a personal access token for the command line and set the new token togrip-github-password
.
If you think the it's helpful for you, please consider paying a cup of coffee for me. Thank you! 😄