Last active
February 28, 2024 01:27
-
-
Save DeLaGuardo/fe1f3d9397d6ef7468460d54d5601156 to your computer and use it in GitHub Desktop.
Snippet for support ligatures from PragmataPro font in Emacs
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
;; Enable ligatures without prettify-symbols | |
(provide 'add-pragmatapro-symbol-keywords) | |
(defconst pragmatapro-fontlock-keywords-alist | |
(mapcar (lambda (regex-char-pair) | |
`(,(car regex-char-pair) | |
(0 (prog1 () | |
(compose-region (match-beginning 1) | |
(match-end 1) | |
,(concat (list ?\C-i) | |
(list (decode-char 'ucs (cadr regex-char-pair))))))))) | |
'(("\\(\\[ERROR\\]\\)" #XE380) | |
("\\(\\[DEBUG\\]\\)" #XE381) | |
("\\(\\[INFO\\]\\)" #XE382) | |
("\\(\\[WARN\\]\\)" #XE383) | |
("\\(\\[WARNING\\]\\)" #XE384) | |
("\\(\\[ERR\\]\\)" #XE385) | |
("\\(\\[FATAL\\]\\)" #XE386) | |
("\\(\\[TRACE\\]\\)" #XE387) | |
("\\(!!\\)" #XE720) | |
("\\(!=\\)" #XE721) | |
("\\(!==\\)" #XE722) | |
("\\(!!!\\)" #XE723) | |
("\\(!≡\\)" #XE724) | |
("\\(!≡≡\\)" #XE725) | |
("[^<]\\(!>\\)" #XE726) | |
("\\(#(\\)" #XE740) | |
("\\(#_\\)" #XE741) | |
("\\(#{\\)" #XE742) | |
("\\(#\\?\\)" #XE743) | |
("[^<]\\(#>\\)" #XE744) | |
("\\(##\\)" #XE745) | |
("\\(%=\\)" #XE750) | |
("[^<]\\(%>\\)" #XE751) | |
("\\(&%\\)" #XE760) | |
("\\(&&\\)" #XE761) | |
("\\(&\\*\\)" #XE762) | |
("\\(&\\+\\)" #XE763) | |
("\\(&-\\)" #XE764) | |
("\\(&/\\)" #XE765) | |
("\\(&=\\)" #XE766) | |
("\\(&&&\\)" #XE767) | |
("[^<]\\(&>\\)" #XE768) | |
("\\(\\*\\*\\*\\)" #XE780) | |
("\\(\\*=\\)" #XE781) | |
("\\(\\*/\\)" #XE782) | |
("[^<]\\(\\*>\\)" #XE783) | |
("\\(\\+\\+\\)" #XE790) | |
("\\(\\+\\+\\+\\)" #XE791) | |
("[^\\+]\\(\\+=\\)" #XE792) | |
("[^<]\\(\\+>\\)" #XE793) | |
("\\(\\+\\+=\\)" #XE794) | |
("\\(--\\)" #XE7A0) | |
("[^-]\\(-<\\)" #XE7A1) | |
("\\(-<<\\)" #XE7A2) | |
("\\(-=\\)" #XE7A3) | |
("[^|]\\(->\\)" #XE7A4) | |
("[^|]\\(->>\\)" #XE7A5) | |
("\\(---\\)" #XE7A6) | |
("\\(-->\\)" #XE7A7) | |
("\\(-\\+-\\)" #XE7A8) | |
("\\(-\\\\/\\)" #XE7A9) | |
("[^\\^]\\(\\.\\.\\)" #XE7B0) | |
("\\(\\.\\.\\.\\)" #XE7B1) | |
("\\(\\.\\.<\\)" #XE7B2) | |
("\\(\\.>\\)" #XE7B3) | |
("\\(\\.~\\)" #XE7B4) | |
("\\(\\.=\\)" #XE7B5) | |
("\\(/\\*\\)" #XE7C0) | |
("\\(//\\)" #XE7C1) | |
("[^<]\\(/>\\)" #XE7C2) | |
("[^=]\\(/=\\)" #XE7C3) | |
("\\(/==\\)" #XE7C4) | |
("\\(///\\)" #XE7C5) | |
("\\(/\\*\\*\\)" #XE7C6) | |
("\\(::\\)" #XE7D0) | |
("\\(:=\\)" #XE7D1) | |
("[^≡]\\(:≡\\)" #XE7D2) | |
("\\(:>\\)" #XE7D3) | |
("\\(:=>\\)" #XE7D4) | |
("\\(<\\*\\)" #XE7E1) | |
("\\(<\\*>\\)" #XE7E2) | |
("[^<]\\(<-\\)" #XE7E4) | |
("[^-]\\(<<\\)" #XE7E5) | |
("\\(<<<\\)" #XE7E6) | |
("\\(<<=\\)" #XE7E7) | |
("[^<]\\(<=\\)" #XE7E8) | |
("\\(<=>\\)" #XE7E9) | |
("\\(<>\\)" #XE7EA) | |
("\\(<<-\\)" #XE7EC) | |
("\\(<|\\)" #XE7ED) | |
("\\(<|>\\)" #XE7EB) | |
("\\(<=<\\)" #XE7EE) | |
("[^<]\\(<~\\)" #XE7EF) | |
("\\(<~~\\)" #XE7F0) | |
("\\(<<~\\)" #XE7F1) | |
("\\(<\\$\\)" #XE7F2) | |
("\\(<\\$>\\)" #XE7E0) | |
("\\(<\\+\\)" #XE7F3) | |
("\\(<\\+>\\)" #XE7E3) | |
("\\(<~>\\)" #XE800) | |
("\\(<\\*\\*>\\)" #XE801) | |
("\\(<<\\^\\)" #XE802) | |
("\\(<!\\)" #XE803) | |
("\\(<!>\\)" #XE7F4) | |
("\\(<@\\)" #XE804) | |
("\\(<#\\)" #XE805) | |
("\\(<#>\\)" #XE7F6) | |
("\\(<%\\)" #XE806) | |
("\\(<%>\\)" #XE7F7) | |
("[^<]\\(<\\^\\)" #XE807) | |
("\\(<&\\)" #XE808) | |
("\\(<&>\\)" #XE7F9) | |
("\\(<\\?\\)" #XE809) | |
("\\(<\\.\\)" #XE80A) | |
("\\(<\\.>\\)" #XE7FB) | |
("\\(</\\)" #XE80B) | |
("\\(</>\\)" #XE7FC) | |
("\\(<\\\\\\)" #XE80C) | |
("\\(<\"\\)" #XE80D) | |
("\\(<\">\\)" #XE7FE) | |
("\\(<:\\)" #XE80E) | |
("\\(<:>\\)" #XE7FF) | |
("\\(<->\\)" #XE80F) | |
("\\(<!--\\)" #XE810) | |
("\\(<--\\)" #XE811) | |
("\\(<~<\\)" #XE812) | |
("\\(<==>\\)" #XE813) | |
("\\(==<\\)" #XE820) | |
("[^/!<=>]\\(==\\)[^><=]" #XE821) | |
("\\(===\\)" #XE822) | |
("[^<]\\(==>\\)" #XE823) | |
("[^=:<]\\(=>\\)" #XE824) | |
("\\(=~\\)" #XE825) | |
("\\(=>>\\)" #XE826) | |
("\\(=/=\\)" #XE827) | |
("[^!]\\(≡≡\\)" #XE830) | |
("\\(≡≡≡\\)" #XE831) | |
("\\(≡:≡\\)" #XE832) | |
("[^>]\\(>-\\)" #XE840) | |
("\\(>=\\)" #XE841) | |
("[^=-]\\(>>\\)" #XE842) | |
("\\(>>-\\)" #XE843) | |
("\\(>==\\)" #XE844) | |
("\\(>>>\\)" #XE845) | |
("\\(>=>\\)" #XE846) | |
("\\(>>\\^\\)" #XE847) | |
("\\(\\?\\?\\)" #XE860) | |
("\\(\\?~\\)" #XE861) | |
("\\(\\?=\\)" #XE862) | |
("\\(\\?>\\)" #XE863) | |
("\\(<\\?>\\)" #XE7FA) | |
("\\(\\?\\?\\?\\)" #XE864) | |
("\\(\\^=\\)" #XE868) | |
("\\(\\^\\.\\)" #XE869) | |
("\\(\\^\\?\\)" #XE86A) | |
("\\(\\^\\.\\.\\)" #XE86B) | |
("\\(\\^<<\\)" #XE86C) | |
("\\(\\^>\\)" #XE86E) | |
("\\(\\^>>\\)" #XE86D) | |
("\\(<\\^>\\)" #XE7F8) | |
("[^\\\\]\\(\\\\\\\\\\)" #XE870) | |
("[^<]\\(\\\\>\\)" #XE871) | |
("\\(<\\\\>\\)" #XE7FD) | |
("\\(\\\\/-\\)" #XE872) | |
("\\(@>\\)" #XE877) | |
("\\(<@>\\)" #XE7F5) | |
("\\(|=\\)" #XE880) | |
("\\(||\\)" #XE881) | |
("[^<]\\(|>\\)" #XE882) | |
("\\(|||\\)" #XE883) | |
("\\(|\\+|\\)" #XE884) | |
("\\(|->\\)" #XE885) | |
("\\(|-->\\)" #XE886) | |
("\\(|=>\\)" #XE887) | |
("\\(|==>\\)" #XE888) | |
("\\(~=\\)" #XE890) | |
("[^~<]\\(~>\\)" #XE891) | |
("\\(~~>\\)" #XE892) | |
("\\(~>>\\)" #XE893) | |
("[^<]\\(\">\\)" #XE8B0)))) | |
(defun add-pragmatapro-symbol-keywords () | |
(font-lock-add-keywords nil pragmatapro-fontlock-keywords-alist)) | |
(add-hook 'prog-mode-hook | |
#'add-pragmatapro-symbol-keywords) | |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
;; For emacs25 | |
(setq prettify-symbols-unprettify-at-point 'right-edge) | |
(defconst pragmatapro-prettify-symbols-alist | |
(mapcar (lambda (s) | |
`(,(car s) | |
. | |
,(vconcat | |
(apply 'vconcat (make-list (- (length (car s)) 1) (vector (decode-char 'ucs #X0020) '(Br . Bl)))) | |
(vector (decode-char 'ucs (cadr s)))))) | |
'(("[ERROR]" #XE380) | |
("[DEBUG]" #XE381) | |
("[INFO]" #XE382) | |
("[WARN]" #XE383) | |
("[WARNING]" #XE384) | |
("[ERR]" #XE385) | |
("[FATAL]" #XE386) | |
("[TRACE]" #XE387) | |
("!!" #XE720) | |
("!=" #XE721) | |
("!==" #XE722) | |
("!!!" #XE723) | |
("!≡" #XE724) | |
("!≡≡" #XE725) | |
("!>" #XE726) | |
("#(" #XE740) | |
("#_" #XE741) | |
("#{" #XE742) | |
("#?" #XE743) | |
("#>" #XE744) | |
("##" #XE745) | |
("%=" #XE750) | |
("%>" #XE751) | |
("&%" #XE760) | |
("&&" #XE761) | |
("&*" #XE762) | |
("&+" #XE763) | |
("&-" #XE764) | |
("&/" #XE765) | |
("&=" #XE766) | |
("&&&" #XE767) | |
("&>" #XE768) | |
("***" #XE780) | |
("*=" #XE781) | |
("*/" #XE782) | |
("*>" #XE783) | |
("++" #XE790) | |
("+++" #XE791) | |
("+=" #XE792) | |
("+>" #XE793) | |
("++=" #XE794) | |
("--" #XE7A0) | |
("-<" #XE7A1) | |
("-<<" #XE7A2) | |
("-=" #XE7A3) | |
("->" #XE7A4) | |
("->>" #XE7A5) | |
("---" #XE7A6) | |
("-->" #XE7A7) | |
("-+-" #XE7A8) | |
("-\\/" #XE7A9) | |
(".." #XE7B0) | |
("..." #XE7B1) | |
("..<" #XE7B2) | |
(".>" #XE7B3) | |
(".~" #XE7B4) | |
(".=" #XE7B5) | |
("/*" #XE7C0) | |
("//" #XE7C1) | |
("/>" #XE7C2) | |
("/=" #XE7C3) | |
("/==" #XE7C4) | |
("///" #XE7C5) | |
("/**" #XE7C6) | |
("::" #XE7D0) | |
(":=" #XE7D1) | |
(":≡" #XE7D2) | |
(":>" #XE7D3) | |
(":=>" #XE7D4) | |
("<$>" #XE7E0) | |
("<*" #XE7E1) | |
("<*>" #XE7E2) | |
("<+>" #XE7E3) | |
("<-" #XE7E4) | |
("<<" #XE7E5) | |
("<<<" #XE7E6) | |
("<<=" #XE7E7) | |
("<=" #XE7E8) | |
("<=>" #XE7E9) | |
("<>" #XE7EA) | |
("<|>" #XE7EB) | |
("<<-" #XE7EC) | |
("<|" #XE7ED) | |
("<=<" #XE7EE) | |
("<~" #XE7EF) | |
("<~~" #XE7F0) | |
("<<~" #XE7F1) | |
("<$" #XE7F2) | |
("<+" #XE7F3) | |
("<!>" #XE7F4) | |
("<@>" #XE7F5) | |
("<#>" #XE7F6) | |
("<%>" #XE7F7) | |
("<^>" #XE7F8) | |
("<&>" #XE7F9) | |
("<?>" #XE7FA) | |
("<.>" #XE7FB) | |
("</>" #XE7FC) | |
("<\\>" #XE7FD) | |
("<\">" #XE7FE) | |
("<:>" #XE7FF) | |
("<~>" #XE800) | |
("<**>" #XE801) | |
("<<^" #XE802) | |
("<!" #XE803) | |
("<@" #XE804) | |
("<#" #XE805) | |
("<%" #XE806) | |
("<^" #XE807) | |
("<&" #XE808) | |
("<?" #XE809) | |
("<." #XE80A) | |
("</" #XE80B) | |
("<\\" #XE80C) | |
("<\"" #XE80D) | |
("<:" #XE80E) | |
("<->" #XE80F) | |
("<!--" #XE810) | |
("<--" #XE811) | |
("<~<" #XE812) | |
("<==>" #XE813) | |
("==<" #XE820) | |
("==" #XE821) | |
("===" #XE822) | |
("==>" #XE823) | |
("=>" #XE824) | |
("=~" #XE825) | |
("=>>" #XE826) | |
("=/=" #XE827) | |
("≡≡" #XE830) | |
("≡≡≡" #XE831) | |
("≡:≡" #XE832) | |
(">-" #XE840) | |
(">=" #XE841) | |
(">>" #XE842) | |
(">>-" #XE843) | |
(">==" #XE844) | |
(">>>" #XE845) | |
(">=>" #XE846) | |
(">>^" #XE847) | |
("??" #XE860) | |
("?~" #XE861) | |
("?=" #XE862) | |
("?>" #XE863) | |
("???" #XE864) | |
("^=" #XE868) | |
("^." #XE869) | |
("^?" #XE86A) | |
("^.." #XE86B) | |
("^<<" #XE86C) | |
("^>>" #XE86D) | |
("^>" #XE86E) | |
("\\\\" #XE870) | |
("\\>" #XE871) | |
("\\/-" #XE872) | |
("@>" #XE877) | |
("|=" #XE880) | |
("||" #XE881) | |
("|>" #XE882) | |
("|||" #XE883) | |
("|+|" #XE884) | |
("|->" #XE885) | |
("|-->" #XE886) | |
("|=>" #XE887) | |
("|==>" #XE888) | |
("~=" #XE890) | |
("~>" #XE891) | |
("~~>" #XE892) | |
("~>>" #XE893) | |
("\">" #XE8B0)))) | |
(defun add-pragmatapro-prettify-symbols-alist () | |
(dolist (alias pragmatapro-prettify-symbols-alist) | |
(push alias prettify-symbols-alist))) | |
(add-hook 'prog-mode-hook | |
#'add-pragmatapro-prettify-symbols-alist) | |
(global-prettify-symbols-mode +1) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
;; All ligatures (for testing) | |
;; [ERROR] | |
;; [DEBUG] | |
;; [INFO] | |
;; [WARN] | |
;; [WARNING] | |
;; [ERR] | |
;; [FATAL] | |
;; [TRACE] | |
;; !! | |
;; != | |
;; !== | |
;; !!! | |
;; !≡ | |
;; !≡≡ | |
;; !> | |
;; #( | |
;; #_ | |
;; #{ | |
;; #? | |
;; #> | |
;; ## | |
;; %= | |
;; %> | |
;; &% | |
;; && | |
;; &* | |
;; &+ | |
;; &- | |
;; &/ | |
;; &= | |
;; &&& | |
;; &> | |
;; *** | |
;; *= | |
;; */ | |
;; *> | |
;; ++ | |
;; +++ | |
;; += | |
;; +> | |
;; ++= | |
;; -- | |
;; -< | |
;; -<< | |
;; -= | |
;; -> | |
;; ->> | |
;; --- | |
;; --> | |
;; -+- | |
;; -\/ | |
;; .. | |
;; ... | |
;; ..< | |
;; .> | |
;; .~ | |
;; .= | |
;; /* | |
;; // | |
;; /> | |
;; /= | |
;; /== | |
;; /// | |
;; /** | |
;; :: | |
;; := | |
;; :≡ | |
;; :> | |
;; :=> | |
;; <$> | |
;; <* | |
;; <*> | |
;; <+> | |
;; <- | |
;; << | |
;; <<< | |
;; <<= | |
;; <= | |
;; <=> | |
;; <> | |
;; <|> | |
;; <<- | |
;; <| | |
;; <=< | |
;; <~ | |
;; <~~ | |
;; <<~ | |
;; <$ | |
;; <+ | |
;; <!> | |
;; <@> | |
;; <#> | |
;; <%> | |
;; <^> | |
;; <&> | |
;; <?> | |
;; <.> | |
;; </> | |
;; <\> | |
;; <"> | |
;; <:> | |
;; <~> | |
;; <**> | |
;; <<^ | |
;; <! | |
;; <@ | |
;; <# | |
;; <% | |
;; <^ | |
;; <& | |
;; <? | |
;; <. | |
;; </ | |
;; <\ | |
;; <" | |
;; <: | |
;; <-> | |
;; <!-- | |
;; <-- | |
;; <~< | |
;; <==> | |
;; ==< | |
;; == | |
;; === | |
;; ==> | |
;; => | |
;; =~ | |
;; =>> | |
;; =/= | |
;; ≡≡ | |
;; ≡≡≡ | |
;; ≡:≡ | |
;; >- | |
;; >= | |
;; >> | |
;; >>- | |
;; >== | |
;; >>> | |
;; >=> | |
;; >>^ | |
;; ?? | |
;; ?~ | |
;; ?= | |
;; ?> | |
;; ??? | |
;; ^= | |
;; ^. | |
;; ^? | |
;; ^.. | |
;; ^<< | |
;; ^>> | |
;; ^> | |
;; \\ | |
;; \> | |
;; \/- | |
;; @> | |
;; |= | |
;; || | |
;; |> | |
;; ||| | |
;; |+| | |
;; |-> | |
;; |--> | |
;; |=> | |
;; |==> | |
;; ~= | |
;; ~> | |
;; ~~> | |
;; ~>> | |
;; "> |
@OkanEsen Thanks for the update. Apparently the mappings have changed for version 0.825 and the original gist doesn't work anymore. The only annoyance I have is that when I move the cursor onto the ligature it reverts back to separate characters. Guess one can't do anything about that for now then.
@x-ji That's intentional as far as I know. This option turns this on: (setq prettify-symbols-unprettify-at-point 'right-edge)
.
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Here's the modified version for the 0.825 release: