Add some shell icons

- Added function-based matching.
- Currently everything should be cached, except for things where
  function matching occurs. (may need some expansion)
- Should address Issue #36
This commit is contained in:
Matthew L. Fidler 2016-08-05 12:59:29 -05:00
parent a31a43b90a
commit 2e799a5d7b
6 changed files with 467 additions and 22 deletions

View file

@ -10,6 +10,10 @@ This project adheres to [Semantic Versioning](http://semver.org/).
- Icon for spacemacs buffer. - Icon for spacemacs buffer.
- Icon for Isearch (from Font Awesome) - Icon for Isearch (from Font Awesome)
- Icon for Org-Agenda (From Font Awesome) - Icon for Org-Agenda (From Font Awesome)
- Icon for Powershell
- Icon for Windows cmd
- Icon for MSYS shell
- Icon for Cygwin shell
- Added option mode-icons-line-height-adjust to allow imagmagick to - Added option mode-icons-line-height-adjust to allow imagmagick to
adjust icons up or down a bit compared to what emacs returns as the adjust icons up or down a bit compared to what emacs returns as the
mode-line height. mode-line height.

46
icons/cmd.xpm Normal file
View file

@ -0,0 +1,46 @@
/* XPM */
static char * d:\EmacsPortable_App\Data\src\mode_icons\icons\cmd_xpm[] = {
"16 16 27 1",
" g None",
". g #FFFFFF",
"+ g #000000",
"@ g #505050",
"# g #989898",
"$ g #6B6B6B",
"% g #E8E8E8",
"& g #111111",
"* g #F6F6F6",
"= g #080808",
"- g #FDFDFD",
"; g #BBBBBB",
"> g #353535",
", g #8D8D8D",
"' g #5A5A5A",
") g #5F5F5F",
"! g #7E7E7E",
"~ g #323232",
"{ g #A3A3A3",
"] g #FAFAFA",
"^ g #0A0A0A",
"/ g #FBFBFB",
"( g #070707",
"_ g #C3C3C3",
": g #646464",
"< g #A8A8A8",
"[ g #606060",
"................",
".++++++++++++++.",
".++++++++++++++.",
"................",
".++++++++++++++.",
".++++++++++++++.",
".+@#$+++%&+++++.",
".+*=-+++;>+++++.",
".+.+++++,'+++++.",
".+.+++.+)!+++++.",
".+.+.+++~{+++++.",
".+]^/+++(_+++++.",
".+:<[+.++_+++++.",
".++++++++++...;.",
".++++++++++++++.",
"................"};

22
icons/cygwin.xpm Normal file
View file

@ -0,0 +1,22 @@
/* XPM */
static char * d:\EmacsPortable_App\Data\src\mode_icons\icons\cygwin_xpm[] = {
"16 16 3 1",
" c None",
". c #000000",
"+ c #00FF00",
" ",
" ........... ",
" .............. ",
" .......... ",
" .... ",
" ... ",
" ... +++++ ",
" ... ++++++++ ",
" ... ++++++++ ",
" ... +++++ ",
" ... ",
" .... ",
" .......... ",
" .............. ",
" ........... ",
" "};

146
icons/msys.xpm Normal file
View file

@ -0,0 +1,146 @@
/* XPM */
static char * d:\EmacsPortable_App\Data\src\mode_icons\icons\msys_xpm[] = {
"16 16 127 2",
" c None",
". c #7A536A",
"+ c #4E92CF",
"@ c #A4BDD8",
"# c #89545B",
"$ c #536B9B",
"% c #5D9CD0",
"& c #9DC2E6",
"* c #676086",
"= c #3F89CC",
"- c #89C0E6",
"; c #987984",
"> c #6A4253",
", c #4585C7",
"' c #5DA5D9",
") c #A8B7D4",
"! c #7C3C4A",
"~ c #4B94D4",
"{ c #4D8ACA",
"] c #75B3DF",
"^ c #B4B0C4",
"/ c #5D82B5",
"( c #56A0D7",
"_ c #6FAFDE",
": c #B0BDD6",
"< c #657AA7",
"[ c #93B7DA",
"} c #6280BC",
"| c #7BA4D5",
"1 c #C4DCF0",
"2 c #7A556D",
"3 c #69A9DE",
"4 c #5E82C2",
"5 c #8ABBE1",
"6 c #BCC8DD",
"7 c #66353E",
"8 c #8BAFD8",
"9 c #ABA3B5",
"0 c #7875A0",
"a c #83A4D5",
"b c #D7F3FF",
"c c #622122",
"d c #778FB9",
"e c #AFBACF",
"f c #707BB0",
"g c #95BDE2",
"h c #D0E8F9",
"i c #9B89A3",
"j c #C2E1F9",
"k c #864145",
"l c #827091",
"m c #8FA6D7",
"n c #D9F0FD",
"o c #AB8893",
"p c #B8D7EF",
"q c #82444D",
"r c #7B85B1",
"s c #A0BFE3",
"t c #DCF2FD",
"u c #99606A",
"v c #B6D1EF",
"w c #C0A3AA",
"x c #8D5F73",
"y c #9DABDC",
"z c #D1E4F3",
"A c #D5E8F6",
"B c #C0A2AA",
"C c #868AB2",
"D c #B3C6E6",
"E c #E1F4FD",
"F c #B08D91",
"G c #ABA9C5",
"H c #DBE4EF",
"I c #724344",
"J c #773231",
"K c #A6A9D9",
"L c #D1E0F1",
"M c #E3ECF3",
"N c #784848",
"O c #9C86AA",
"P c #B2B6DF",
"Q c #E3F2FA",
"R c #DDD7D8",
"S c #937379",
"T c #ECF9FF",
"U c #C6AAAC",
"V c #A7829D",
"W c #D9E0F0",
"X c #DBD1D4",
"Y c #77363B",
"Z c #B6B6DC",
"` c #BA9AA6",
" . c #EDEFF3",
".. c #8C6D6E",
"+. c #B6969A",
"@. c #B69196",
"#. c #5D2A2D",
"$. c #D6CEDA",
"%. c #84494C",
"&. c #4A2424",
"*. c #965253",
"=. c #E9DEDF",
"-. c #A57379",
";. c #57191A",
">. c #804446",
",. c #A48B8F",
"'. c #B39193",
"). c #7C3434",
"!. c #E1D4D7",
"~. c #A26F72",
"{. c #531111",
"]. c #F4EEF1",
"^. c #914142",
"/. c #E4D7D9",
"(. c #CFB1B6",
"_. c #5C1E1E",
":. c #9C5659",
"<. c #BFA4A5",
"[. c #B7888C",
"}. c #C69FA4",
"|. c #602F2F",
"1. c #D6BDC1",
"2. c #220000",
"3. c #B79094",
"4. c #BB8E93",
"5. c #411D1D",
"6. c #A97378",
" ",
" . + @ # $ % & ",
" * = - ; > , ' ) ",
" ! ~ { ] ^ / ( _ : ",
" < [ } | 1 2 3 4 5 6 ",
" 7 8 9 0 a b c d e f g h ",
" i j k l m n o p q r s t ",
" u v w x y z A B C D E F ",
" G H I J K L M N O P Q R ",
"S T U V W X Y Z ` ...",
"+.@. #.$.%. &.*.=.-. ",
" ;.>.,.'.).!.~. ",
" {.].^./.(._.:.<. ",
" [.}.|.1. ",
" 2.3.4.5.6. ",
" "};

197
icons/powershell.xpm Normal file
View file

@ -0,0 +1,197 @@
/* XPM */
static char * d:\EmacsPortable_App\Data\src\mode_icons\icons\powershell_xpm[] = {
"16 16 178 2",
" c None",
". c #13B5D8",
"+ c #13B6D9",
"@ c #14B6D9",
"# c #12B4D7",
"$ c #13B2D5",
"% c #12B1D3",
"& c #13AFD2",
"* c #14ADD0",
"= c #14ABCE",
"- c #14A9CC",
"; c #14A8CA",
"> c #14A6C8",
", c #14A4C5",
"' c #12BFE3",
") c #A2E6F5",
"! c #52CAE3",
"~ c #10B8DC",
"{ c #13B6DA",
"] c #14B4D7",
"^ c #14B1D4",
"/ c #14AFD2",
"( c #14ADCF",
"_ c #14AACD",
": c #14A6C7",
"< c #13BEE2",
"[ c #12BDE1",
"} c #9BDDEC",
"| c #FFFEFE",
"1 c #21B8D9",
"2 c #13B4D7",
"3 c #14B2D5",
"4 c #14A9CB",
"5 c #14A2C4",
"6 c #13B3D6",
"7 c #13BBDF",
"8 c #0AB5D9",
"9 c #CDEBF2",
"0 c #C3E8F1",
"a c #0DAFD3",
"b c #14B0D3",
"c c #14AED0",
"d c #14A7C9",
"e c #14A4C6",
"f c #14A1C2",
"g c #13B7DB",
"h c #13BADE",
"i c #12B8DB",
"j c #1BB2D4",
"k c #F2F8FA",
"l c #83D0E3",
"m c #12AED1",
"n c #14ACCE",
"o c #14A5C7",
"p c #13A3C4",
"q c #159FC0",
"r c #13B8DB",
"s c #13B5D9",
"t c #11B4D7",
"u c #6DC9DE",
"v c #F4FAFC",
"w c #2BAFCC",
"x c #14AACC",
"y c #13A3C5",
"z c #12BBDF",
"A c #13B9DC",
"B c #12B6DA",
"C c #0EB0D4",
"D c #C4EAF3",
"E c #E6F2F6",
"F c #1CA1C0",
"G c #14A1C3",
"H c #159FC1",
"I c #13B9DD",
"J c #12B7DA",
"K c #23B7D8",
"L c #C8ECF4",
"M c #D7ECF2",
"N c #33A7C3",
"O c #13AACD",
"P c #13A4C6",
"Q c #14A2C3",
"R c #159DBF",
"S c #13ADCF",
"T c #1AB5D7",
"U c #C6EAF4",
"V c #CFE5EB",
"W c #25A7C5",
"X c #05A4C8",
"Y c #08A3C6",
"Z c #09A0C4",
"` c #14A3C4",
" . c #15A0C2",
".. c #149EBF",
"+. c #159BBC",
"@. c #16B4D7",
"#. c #DCF1F7",
"$. c #CDE9F1",
"%. c #1BA3C2",
"&. c #56C4DD",
"*. c #CDEFF7",
"=. c #C9ECF6",
"-. c #B1E2EE",
";. c #14A0C2",
">. c #149EC0",
",. c #159CBE",
"'. c #159ABB",
"). c #13B1D4",
"!. c #17B2D5",
"~. c #9DCFDC",
"{. c #1FA7C6",
"]. c #12ABCD",
"^. c #3DB7D3",
"/. c #80C6D7",
"(. c #7EC4D7",
"_. c #70BDD0",
":. c #149FC1",
"<. c #159DBE",
"[. c #159ABC",
"}. c #1599BA",
"|. c #16B5D7",
"1. c #16B2D5",
"2. c #16AFD2",
"3. c #16ABCD",
"4. c #16A9CA",
"5. c #15A6C8",
"6. c #15A4C6",
"7. c #15A2C3",
"8. c #16A0C1",
"9. c #169EBE",
"0. c #169BBC",
"a. c #1699B9",
"b. c #AEC2C5",
"c. c #AABFC2",
"d. c #A9BEC0",
"e. c #A7BCBE",
"f. c #A8BDC0",
"g. c #A6BBBE",
"h. c #A5BABD",
"i. c #A3B8BB",
"j. c #AABDC0",
"k. c #9FB5B7",
"l. c #9DB3B5",
"m. c #99AEB1",
"n. c #B9CED1",
"o. c #B5C9CC",
"p. c #B4C8CB",
"q. c #B3C7CA",
"r. c #637A7E",
"s. c #5F7679",
"t. c #5F7579",
"u. c #5E7579",
"v. c #6E8387",
"w. c #A7BBBF",
"x. c #5C7377",
"y. c #A5B8BA",
"z. c #B8CDD0",
"A. c #B6CACD",
"B. c #9EB4B7",
"C. c #9CB3B6",
"D. c #9AB1B4",
"E. c #99AFB3",
"F. c #9DB2B5",
"G. c #8EA4A8",
"H. c #94ACAF",
"I. c #91A9AD",
"J. c #92A6A8",
"K. c #A3B6B8",
"L. c #A0B4B6",
"M. c #9FB2B5",
"N. c #9DB1B3",
"O. c #9CAFB1",
"P. c #9AAEB0",
"Q. c #99ACAF",
"R. c #96AAAC",
"S. c #90A4A6",
"T. c #94A9AA",
"U. c #93A7AA",
" . + @ # $ % & * = - ; > , ",
" ' ' ) ! ~ { ] ^ / ( _ ; : ",
" < [ } | 1 2 3 / ( _ 4 > 5 ",
" 6 < 7 8 9 0 a b c = 4 d e f ",
" g 7 h i j k l m n 4 ; o p q ",
" [ h r s t u v w x ; o y f ",
" z A B ] C D E F ; > e G H ",
" I J 2 K L M N O d P Q H R ",
" S i . T U V W X Y Z ` ...+. ",
" & s @.#.$.%.&.*.=.-.;.>.,.'. ",
" ).] !.~.{.].^./.(._.:.<.[.}. ",
" |.1.2.( 3.4.5.6.7.8.9.0.a. ",
" b.c.d.e.c.f.g.h.i.j.k.l.m. ",
" n.o.p.q.r.s.t.u.v.w.x.x.m. ",
"y.z.A.p.q.B.C.D.E.F.G.H.I.J. ",
" K.L.M.N.N.O.P.Q.R.S.T.U. "};

View file

@ -207,6 +207,11 @@ This was stole/modified from `c-save-buffer-state'"
("\\`Spacemacs buffer\\'" "spacemacs" png) ("\\`Spacemacs buffer\\'" "spacemacs" png)
("\\` ?emoji\\'" "emoji" png) ("\\` ?emoji\\'" "emoji" png)
("\\`Org-Agenda" #xf046 FontAwesome) ("\\`Org-Agenda" #xf046 FontAwesome)
("\\`PS\\'" "powershell" xpm)
(mode-icons-powershell-p "powershell" xpm)
(mode-icons-cmd-p "cmd" xpm-bw)
(mode-icons-msys-p "msys" xpm)
(mode-icons-cygwin-p "cygwin" xpm)
(read-only #xf023 FontAwesome) (read-only #xf023 FontAwesome)
(writable #xf09c FontAwesome) (writable #xf09c FontAwesome)
(save #xf0c7 FontAwesome) (save #xf0c7 FontAwesome)
@ -281,6 +286,23 @@ without the extension. And the third being the type of icon."
(symbol :tag "Font")))) (symbol :tag "Font"))))
:group 'mode-icons) :group 'mode-icons)
(defun mode-icons-powershell-p (&optional match)
"Is the current mode a powershell process?"
(let ((proc (get-buffer-process (current-buffer))))
(and proc (string-match-p (or match "powershell") (car (process-command proc))))))
(defun mode-icons-cmd-p ()
"Is the current mode a CMD shell?"
(mode-icons-powershell-p "cmdproxy"))
(defun mode-icons-cygwin-p ()
"Is the current mode a CMD shell?"
(mode-icons-powershell-p "cygwin"))
(defun mode-icons-msys-p ()
"Is the current mode a CMD shell?"
(mode-icons-powershell-p "msys"))
(defvar mode-icons-get-xpm-string (make-hash-table :test 'equal)) (defvar mode-icons-get-xpm-string (make-hash-table :test 'equal))
(defun mode-icons-get-xpm-string (icon-path) (defun mode-icons-get-xpm-string (icon-path)
"Get XPM file contents for ICON-PATH. "Get XPM file contents for ICON-PATH.
@ -1230,10 +1252,11 @@ ACTIVE is a flag to tell if the current window is active."
(defvar mode-icons-get-icon-spec (make-hash-table :test 'equal) (defvar mode-icons-get-icon-spec (make-hash-table :test 'equal)
"Hash table of icon-specifications.") "Hash table of icon-specifications.")
(defun mode-icons-get-icon-spec (mode) (defun mode-icons-get-icon-spec (mode &optional is-major-mode-p)
"Get icon spec for MODE based on regular expression." "Get icon spec for MODE based on regular expression."
(or (gethash mode mode-icons-get-icon-spec) (or (gethash mode mode-icons-get-icon-spec)
(puthash mode (let* (case-fold-search (let* (case-fold-search
(ignore-cache nil)
(icon-spec (catch 'found-mode (icon-spec (catch 'found-mode
(dolist (item mode-icons) (dolist (item mode-icons)
(when (and (mode-icons-supported-p item) (when (and (mode-icons-supported-p item)
@ -1245,14 +1268,21 @@ ACTIVE is a flag to tell if the current window is active."
(and (and
(symbolp (car item)) (symbolp (car item))
(symbolp mode) (symbolp mode)
(eq mode (car item))))) (eq mode (car item)))
(and
is-major-mode-p
(symbolp (car item))
(functionp (car item))
(and (ignore-errors (funcall (car item)))
(setq ignore-cache t)))))
(throw 'found-mode item))) (throw 'found-mode item)))
nil))) nil)))
(when (and icon-spec (eq (nth 2 icon-spec) 'emoji) (when (and icon-spec (eq (nth 2 icon-spec) 'emoji)
(file-exists-p (mode-icons--get-emoji-xpm-file icon-spec))) (file-exists-p (mode-icons--get-emoji-xpm-file icon-spec)))
(setq icon-spec (list (nth 0 icon-spec) (mode-icons--get-emoji-xpm-file icon-spec t) 'xpm))) (setq icon-spec (list (nth 0 icon-spec) (mode-icons--get-emoji-xpm-file icon-spec t) 'xpm)))
icon-spec) (unless ignore-cache
mode-icons-get-icon-spec))) (puthash mode icon-spec mode-icons-get-icon-spec))
icon-spec)))
(defcustom mode-icons-show-mode-name nil (defcustom mode-icons-show-mode-name nil
"Show Icon and `mode-name'." "Show Icon and `mode-name'."
@ -1277,7 +1307,7 @@ icon as well."
FACE represents the face used when the icon is a xpm-bw image. FACE represents the face used when the icon is a xpm-bw image.
ACTIVE represents if the window is active." ACTIVE represents if the window is active."
(let* ((mode-name (format-mode-line mode)) (let* ((mode-name (format-mode-line mode))
(icon-spec (mode-icons-get-icon-spec mode-name)) (icon-spec (mode-icons-get-icon-spec mode-name t))
(face (mode-icons--get-face face active)) (face (mode-icons--get-face face active))
ret) ret)
(when (and (not icon-spec) mode-icons-use-default-icon) (when (and (not icon-spec) mode-icons-use-default-icon)