commit
04c8a6b72d
1 changed files with 143 additions and 0 deletions
@ -0,0 +1,143 @@
@@ -0,0 +1,143 @@
|
||||
;;; tiddlermode.el -*- lexical-binding: t; -*- |
||||
;;; TIDDLER-MODE |
||||
;; A mode for viewing Tiddlywiki Tiddlers (.tid files) with some |
||||
;; nice colors that make them easier to read in emacs |
||||
;; So far this is just colors and formatting |
||||
;; requires: olivetti (makes the tiddlers look nicer, adds a margin) |
||||
;; TODO fix some of the bugs (some colors aren't applied) |
||||
;; TODO perhaps hide some of the markup |
||||
;; TODO replace [img[imagename]] links with the actual images |
||||
;; TODO create some follow-link functionality (click <enter> on [[stuff]] will load the file stuff.tid) |
||||
;; |
||||
;; Chris Beckstrom September 28, 2021 |
||||
;; |
||||
;; lots of code borrowed from |
||||
;; https://emacs-fu.blogspot.com/2010/04/creating-custom-modes-easy-way-with.html |
||||
;; http://makble.com/how-to-define-emacs-custom-faces-for-text-highlighting |
||||
;; https://raw.githubusercontent.com/mwfogleman/tid-mode/master/tid-mode.el |
||||
|
||||
(require 'generic-x) ;; we need this ... ? |
||||
|
||||
(defvar tiddler-title 'tiddler-title "Face name to use for tiddler-title.") |
||||
(defface tiddler-title '((((class color) (min-colors 88) (background light)) |
||||
:foreground "#0080ff" |
||||
;:background "#E9FFD4" |
||||
;; TODO get the title to be bigger |
||||
;; TODO also: why isn't this formatting being applied? |
||||
:height 200 |
||||
) |
||||
(t :inverse-video t)) |
||||
"Basic face for tiddler-titleing." |
||||
:group 'basic-faces) |
||||
|
||||
|
||||
(defvar strong-bold 'strong-bold "Face name to use for strong.") |
||||
(defface strong-bold |
||||
'((((class color) (min-colors 88) (background light)) :foreground "black" :weight bold ) |
||||
(((class color) (min-colors 88) (background dark)) :foreground "#ffff00" :weight bold ) |
||||
(t :inverse-video t)) |
||||
"Basic face for strong." |
||||
:group 'basic-faces) |
||||
|
||||
|
||||
(defvar wikilink 'wikilink "Face name to use for wikilinks.") |
||||
(defface wikilink |
||||
'((((class color) (min-colors 88) (background light)) :foreground "#660066" :weight bold ) |
||||
(((class color) (min-colors 88) (background dark)) :foreground "#ff9900" :weight bold ) |
||||
(t :inverse-video t)) |
||||
"Basic face for wikilinks." |
||||
:group 'basic-faces) |
||||
|
||||
(defvar tiddler-comment 'tiddler-comment "Face name to use for tiddler-comments.") |
||||
(defface tiddler-comment |
||||
'((((class color) (min-colors 88) (background light)) :foreground "#808080" ) |
||||
(((class color) (min-colors 88) (background dark)) :foreground "#808080" ) |
||||
(t :inverse-video t)) |
||||
"Basic face for tiddler-comments." |
||||
:group 'basic-faces) |
||||
|
||||
(defvar tiddler-quoteblock 'tiddler-quoteblock "Face name to use for tiddler-quoteblocks.") |
||||
(defface tiddler-quoteblock |
||||
'((((class color) (min-colors 88) (background light)) :foreground "#808080" ) |
||||
(((class color) (min-colors 88) (background dark)) :foreground "#ffff00" ) |
||||
(t :inverse-video t)) |
||||
"Basic face for tiddler-quoteblocks." |
||||
:group 'basic-faces) |
||||
|
||||
(defvar tiddler-code 'tiddler-code "Face name to use for tiddler-code.") |
||||
(defface tiddler-code |
||||
'((((class color) (min-colors 88) (background light)) |
||||
:foreground "red" |
||||
:background "green") |
||||
(t :inverse-video t)) |
||||
"Basic face for tiddler-code." |
||||
:group 'basic-faces) |
||||
|
||||
|
||||
(defvar tiddler-highlight 'tiddler-highlight "Face name to use for tiddler-highlight.") |
||||
(defface tiddler-highlight '((((class color) (min-colors 88) (background light)) |
||||
:foreground "#009900" |
||||
;:background "#E9FFD4" |
||||
) |
||||
(t :inverse-video t)) |
||||
"Basic face for tiddler-highlighting." |
||||
:group 'basic-faces) |
||||
|
||||
|
||||
(defun test-font-lock-extend-region () |
||||
"Extend the search region to include an entire block of text." |
||||
;; Avoid compiler warnings about these global variables from font-lock.el. |
||||
;; See the documentation for variable `font-lock-extend-region-functions'. |
||||
(eval-when-compile (defvar font-lock-beg) (defvar font-lock-end)) |
||||
(save-excursion |
||||
(goto-char font-lock-beg) |
||||
(let ((found (or (re-search-backward "\n\n" nil t) (point-min)))) |
||||
(goto-char font-lock-end) |
||||
(when (re-search-forward "\n\n" nil t) |
||||
(beginning-of-line) |
||||
(setq font-lock-end (point))) |
||||
(setq font-lock-beg found)))) |
||||
|
||||
(define-derived-mode tiddler-mode fundamental-mode "tiddler-mode" |
||||
;; TODO |
||||
;; is it possible to replace <<< , ```, etc like what happens in markdown-mode? |
||||
(setq tiddlermode-highlights '( |
||||
;("code:hide\\(.\\|\n\\)*?code:end" . (0 font-lock-comment-face t)) |
||||
("''.*?''" . (0 strong-bold t)) |
||||
("\\[\\[.*?\\]\\]" . (0 wikilink t)) |
||||
("http.*?\s" . (0 wikilink t)) |
||||
;("https:.*?\n" . (0 wikilink t)) |
||||
;("^\\[.*?\\]\\]?" . (0 sub-title t)) |
||||
("`.*?`" . (0 tiddler-code t)) |
||||
;; code blocks, including new lines |
||||
;; https://stackoverflow.com/questions/320590/regexps-in-elisp-to-include-newlines |
||||
( "\\(\`\\{3\\}\\(.*\n?\\)*?\`\\{3\\}\\)" . (0 tiddler-code t)) |
||||
( "\\(<\\{3\\}\\(.*\n?\\)*?<\\{3\\}\\)" . (0 tiddler-quoteblock t)) |
||||
;("\*.*?" . (0 code t)) |
||||
("!.*?\n" . (0 tiddler-highlight t)) |
||||
;; frontmatter |
||||
("^created:.*$" . (0 tiddler-comment t)) |
||||
("^modified:.*$" . (0 tiddler-comment t)) |
||||
("^rating:.*$" . (0 tiddler-comment t)) |
||||
("^tags:.*$" . (0 tiddler-comment t)) |
||||
("^leaf_collected:.*$" . (0 tiddler-comment t)) |
||||
("^latinname:.*$" . (0 tiddler-comment t)) |
||||
("^source:.*$" . (0 tiddler-comment t)) |
||||
("^source:.*$" . (0 tiddler-comment t)) |
||||
("^title:.*$" . (0 tiddler-title t)) |
||||
("^type:.*$" . (0 tiddler-comment t)) |
||||
) |
||||
) |
||||
(setq font-lock-defaults '(tiddlermode-highlights)) |
||||
(message "deriving mode tiddlermode") |
||||
(olivetti-mode) ;; when my tiddler mode is activated, also activate olivetti mode |
||||
(variable-pitch-mode t) ;; nice text |
||||
;(add-hook 'tiddler-mode-hook ) |
||||
|
||||
(set (make-local-variable 'font-lock-multiline) t) |
||||
(add-hook 'font-lock-extend-region-functions |
||||
'test-font-lock-extend-region) |
||||
) |
||||
|
||||
(add-to-list 'auto-mode-alist '("\\.tid\\'" . tiddler-mode)) |
||||
(provide 'tiddler-mode) |
Loading…
Reference in new issue