mirror of
https://github.com/ryuslash/mode-icons.git
synced 2024-11-24 10:30:30 +01:00
Staging additional changes for Issue #22
This commit is contained in:
parent
5644871fa3
commit
2812f30418
1 changed files with 53 additions and 35 deletions
|
@ -436,27 +436,44 @@ specified by type 'xpm-bw."
|
||||||
(face (or face (and active 'mode-line) 'mode-line-inactive))
|
(face (or face (and active 'mode-line) 'mode-line-inactive))
|
||||||
(key (list icon type face active
|
(key (list icon type face active
|
||||||
mode-icons-desaturate-inactive mode-icons-desaturate-active
|
mode-icons-desaturate-inactive mode-icons-desaturate-active
|
||||||
mode-icons-grayscale-transform custom-enabled-themes)))
|
mode-icons-grayscale-transform custom-enabled-themes))
|
||||||
|
tmp)
|
||||||
(or (gethash key mode-icons-get-icon-display)
|
(or (gethash key mode-icons-get-icon-display)
|
||||||
(puthash key
|
(puthash key
|
||||||
(let ((icon-path (mode-icons-get-icon-file
|
(cond
|
||||||
(concat icon "." (or (and (eq type 'xpm-bw) "xpm")
|
((memq type '(png xpm xpm-bw gif jpeg jpg xbm xpm))
|
||||||
(symbol-name type))))))
|
(let ((icon-path (mode-icons-get-icon-file
|
||||||
(cond
|
(concat icon "." (or (and (eq type 'xpm-bw) "xpm")
|
||||||
((and mode-icons-grayscale-transform (eq type 'xpm-bw))
|
(symbol-name type))))))
|
||||||
|
(cond
|
||||||
|
((and mode-icons-grayscale-transform (eq type 'xpm-bw))
|
||||||
(create-image (mode-icons-get-icon-display-xpm-bw-face icon-path face)
|
(create-image (mode-icons-get-icon-display-xpm-bw-face icon-path face)
|
||||||
'xpm t :ascent 'center
|
'xpm t :ascent 'center
|
||||||
:face face))
|
:face face
|
||||||
((eq type 'xpm-bw)
|
:xpm-bw t
|
||||||
`(image :type xpm :file ,icon-path :ascent center :face ',face))
|
:icon icon))
|
||||||
((and (eq type 'xpm)
|
((eq type 'xpm-bw)
|
||||||
(or (and active mode-icons-desaturate-active)
|
`(image :type xpm :file ,icon-path :ascent center :face ',face :icon ,icon))
|
||||||
(and (not active) mode-icons-desaturate-inactive)))
|
((and (eq type 'xpm)
|
||||||
(create-image (mode-icons-desaturate-xpm icon-path face)
|
(or (and active mode-icons-desaturate-active)
|
||||||
|
(and (not active) mode-icons-desaturate-inactive)))
|
||||||
|
(create-image (mode-icons-desaturate-xpm icon-path face)
|
||||||
'xpm t :ascent 'center
|
'xpm t :ascent 'center
|
||||||
:face face))
|
:face face :icon icon))
|
||||||
(t
|
(t
|
||||||
`(image :type ,(or (and (eq type 'jpg) 'jpeg) type) :file ,icon-path :ascent center :face ',face))))
|
`(image :type ,(or (and (eq type 'jpg) 'jpeg) type) :file ,icon-path :ascent center :face ',face :icon ,icon)))))
|
||||||
|
((eq type 'emoji)
|
||||||
|
(setq tmp (mode-icons--get-emoji " " (list "" icon type) face))
|
||||||
|
(get-text-property 0 'display tmp))
|
||||||
|
((eq type 'ext) ;; Shouldn't get here...
|
||||||
|
(setq tmp (mode-icons--ext-available-p (list "" icon type)))
|
||||||
|
(when tmp
|
||||||
|
(mode-icons-get-icon-display (concat "ext-" (downcase icon)) 'xpm-bw face)))
|
||||||
|
((and (image-type-available-p 'xpm)
|
||||||
|
(setq tmp (mode-icons--get-font-xpm-file (list "" icon type)))
|
||||||
|
(file-exists-p tmp))
|
||||||
|
(mode-icons-get-icon-display (mode-icons--get-font-xpm-file (list "" icon type) t) 'xpm-bw face))
|
||||||
|
(t nil))
|
||||||
mode-icons-get-icon-display))))
|
mode-icons-get-icon-display))))
|
||||||
|
|
||||||
(defcustom mode-icons-minor-mode-base-text-properties
|
(defcustom mode-icons-minor-mode-base-text-properties
|
||||||
|
@ -788,8 +805,8 @@ When nil, don't stop the gimp inferior mode.")
|
||||||
If not, try `mode-icons--convert-ext-to-xpm'."
|
If not, try `mode-icons--convert-ext-to-xpm'."
|
||||||
(when (eq (nth 2 icon-spec) 'ext)
|
(when (eq (nth 2 icon-spec) 'ext)
|
||||||
(let ((xpm (mode-icons-get-icon-file (concat "ext-" (downcase (nth 1 icon-spec)) ".xpm"))))
|
(let ((xpm (mode-icons-get-icon-file (concat "ext-" (downcase (nth 1 icon-spec)) ".xpm"))))
|
||||||
(if (file-exists-p xpm)
|
(if (file-readable-p xpm)
|
||||||
t
|
xpm
|
||||||
(mode-icons--convert-ext-to-xpm (nth 1 icon-spec))
|
(mode-icons--convert-ext-to-xpm (nth 1 icon-spec))
|
||||||
nil))))
|
nil))))
|
||||||
|
|
||||||
|
@ -988,7 +1005,6 @@ the actual font."
|
||||||
:type 'boolean
|
:type 'boolean
|
||||||
:group 'mode-icons)
|
:group 'mode-icons)
|
||||||
|
|
||||||
|
|
||||||
(defun mode-icons--get-emoji (mode icon-spec &optional face)
|
(defun mode-icons--get-emoji (mode icon-spec &optional face)
|
||||||
"Get MODE emoji for ICON-SPEC using FACE."
|
"Get MODE emoji for ICON-SPEC using FACE."
|
||||||
(let* ((xpm (mode-icons--get-emoji-xpm-file icon-spec))
|
(let* ((xpm (mode-icons--get-emoji-xpm-file icon-spec))
|
||||||
|
@ -1087,7 +1103,7 @@ the actual font."
|
||||||
MODE should be a string, the name of the mode to propertize.
|
MODE should be a string, the name of the mode to propertize.
|
||||||
ICON-SPEC should be a specification from `mode-icons'.
|
ICON-SPEC should be a specification from `mode-icons'.
|
||||||
FACE is the face to match when a xpm-bw image is used."
|
FACE is the face to match when a xpm-bw image is used."
|
||||||
(let (tmp)
|
(let (tmp new-icon-spec)
|
||||||
(mode-icons-save-buffer-state ;; Otherwise may cause issues with trasient mark mode
|
(mode-icons-save-buffer-state ;; Otherwise may cause issues with trasient mark mode
|
||||||
(cond
|
(cond
|
||||||
((and (stringp mode) (get-text-property 0 'mode-icons-p mode))
|
((and (stringp mode) (get-text-property 0 'mode-icons-p mode))
|
||||||
|
@ -1097,15 +1113,10 @@ FACE is the face to match when a xpm-bw image is used."
|
||||||
((and (stringp (nth 1 icon-spec)) (not (nth 2 icon-spec)))
|
((and (stringp (nth 1 icon-spec)) (not (nth 2 icon-spec)))
|
||||||
(propertize (nth 1 icon-spec) 'display (nth 1 icon-spec)
|
(propertize (nth 1 icon-spec) 'display (nth 1 icon-spec)
|
||||||
'mode-icons-p icon-spec))
|
'mode-icons-p icon-spec))
|
||||||
((or (mode-icons-supported-font-p (nth 1 icon-spec) (nth 2 icon-spec))
|
((mode-icons-supported-font-p (nth 1 icon-spec) (nth 2 icon-spec))
|
||||||
(and (image-type-available-p 'xpm)
|
;; (propertize mode 'display (nth 1 icon-spec) 'mode-icons-p t)
|
||||||
(mode-icons--get-font-xpm-file icon-spec)
|
|
||||||
(file-exists-p (mode-icons--get-font-xpm-file icon-spec))))
|
|
||||||
(mode-icons--get-font mode icon-spec face))
|
(mode-icons--get-font mode icon-spec face))
|
||||||
((and (eq (nth 2 icon-spec) 'emoji)
|
((and (stringp (nth 1 icon-spec)) (eq (nth 2 icon-spec) 'emoji))
|
||||||
(or (and (image-type-available-p 'png) (featurep 'emojify))
|
|
||||||
(and (image-type-available-p 'xpm)
|
|
||||||
(file-exists-p (mode-icons--get-emoji-xpm-file icon-spec)))))
|
|
||||||
(mode-icons--get-emoji mode icon-spec face))
|
(mode-icons--get-emoji mode icon-spec face))
|
||||||
((and (stringp (nth 1 icon-spec)) (eq (nth 2 icon-spec) 'png))
|
((and (stringp (nth 1 icon-spec)) (eq (nth 2 icon-spec) 'png))
|
||||||
(mode-icons--get-png mode icon-spec face))
|
(mode-icons--get-png mode icon-spec face))
|
||||||
|
@ -1120,13 +1131,20 @@ FACE is the face to match when a xpm-bw image is used."
|
||||||
'mode-icons-p (list (nth 0 icon-spec)
|
'mode-icons-p (list (nth 0 icon-spec)
|
||||||
(concat "ext-" (nth 1 icon-spec))
|
(concat "ext-" (nth 1 icon-spec))
|
||||||
'xpm-bw)))
|
'xpm-bw)))
|
||||||
(t (propertize (format "%s" mode) 'display
|
(t (setq tmp (mode-icons-get-icon-display
|
||||||
(mode-icons-get-icon-display (nth 1 icon-spec) (nth 2 icon-spec)
|
(nth 1 icon-spec) (nth 2 icon-spec)
|
||||||
(or face
|
(or face
|
||||||
(and (mode-icons--selected-window-active)
|
(and (mode-icons--selected-window-active)
|
||||||
'mode-line)
|
'mode-line)
|
||||||
'mode-line-inactive))
|
'mode-line-inactive)))
|
||||||
'mode-icons-p icon-spec))))))
|
(cond
|
||||||
|
((and (plist-get tmp :xpm-bw) (plist-get tmp :icon))
|
||||||
|
(setq new-icon-spec (list (nth 0 icon-spec) (plist-get tmp :icon) 'xpm-bw)))
|
||||||
|
((and (eq (plist-get tmp :type) 'xpm) (plist-get tmp :icon))
|
||||||
|
(setq new-icon-spec (list (nth 0 icon-spec) (plist-get tmp :icon) 'xpm)))
|
||||||
|
(t (setq new-icon-spec icon-spec)))
|
||||||
|
(propertize (format "%s" mode) 'display tmp
|
||||||
|
'mode-icons-p new-icon-spec))))))
|
||||||
|
|
||||||
(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.")
|
||||||
|
|
Loading…
Reference in a new issue