[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[elpa] externals/tramp-theme 0bd97ef 1/8: Add tramp-theme
From: |
Stefan Monnier |
Subject: |
[elpa] externals/tramp-theme 0bd97ef 1/8: Add tramp-theme |
Date: |
Tue, 1 Dec 2020 17:30:57 -0500 (EST) |
branch: externals/tramp-theme
commit 0bd97eff08be6afb79a5026bce4a88527017eb6e
Author: Michael Albinus <michael.albinus@gmx.de>
Commit: Michael Albinus <michael.albinus@gmx.de>
Add tramp-theme
* packages/tramp-theme/README:
* packages/tramp-theme/tramp-theme.el: New files.
---
README | 11 ++++
tramp-theme.el | 160 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++
2 files changed, 171 insertions(+)
diff --git a/README b/README
new file mode 100644
index 0000000..093c1f0
--- /dev/null
+++ b/README
@@ -0,0 +1,11 @@
+This is a custom theme for remote buffers.
+
+It is not an own custom theme by itself. Rather, it is a custom
+theme to run on top of other custom themes. It shall be loaded
+always as the last custom theme, because it inherits existing
+settings.
+
+This custom theme extends `mode-line-buffer-identification' by the
+name of the remote host. It also allows to change faces according
+to the value of `default-directory' of a buffer. See
+`tramp-theme-face-remapping-alist' for customization options.
diff --git a/tramp-theme.el b/tramp-theme.el
new file mode 100644
index 0000000..3e80257
--- /dev/null
+++ b/tramp-theme.el
@@ -0,0 +1,160 @@
+;;; tramp-theme.el --- Custom theme for remote buffers
+
+;; Copyright (C) 2016 Free Software Foundation, Inc.
+
+;; Author: Michael Albinus <michael.albinus@gmx.de>
+;; Package: tramp-theme
+;; Version: 0.1
+
+;; This file is part of GNU Emacs.
+
+;; GNU Emacs is free software: you can redistribute it and/or modify
+;; it under the terms of the GNU General Public License as published by
+;; the Free Software Foundation, either version 3 of the License, or
+;; (at your option) any later version.
+
+;; GNU Emacs is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+;; GNU General Public License for more details.
+
+;; You should have received a copy of the GNU General Public License
+;; along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>.
+
+;;; Commentary:
+
+;; This is not an own custom theme by itself. Rather, it is a custom
+;; theme to run on top of other custom themes. It shall be loaded
+;; always as the last custom theme, because it inherits existing
+;; settings.
+
+;; This custom theme extends `mode-line-buffer-identification' by the
+;; name of the remote host. It also allows to change faces according
+;; to the value of `default-directory' of a buffer. See
+;; `tramp-theme-face-remapping-alist' for customization options.
+
+;;; Code:
+
+(deftheme tramp
+ "A custom theme to decorate buffers when they are remote.
+It can be combined with other custom themes.")
+
+(defcustom tramp-theme-face-remapping-alist
+ `((nil "^root$"
+ (mode-line-buffer-id
+ (:inherit mode-line-buffer-id
+ :inverse-video
+ ;; If the face uses already :inverse-video, we deactivate it.
+ ;; Happens on displays of type 'tty, for example.
+ ,(null
+ (face-inverse-video-p
+ 'mode-line-buffer-id nil '(mode-line default)))))))
+ "Face remapping for decoration of a remote buffer.
+This is an alist of items (HOST USER REMAPPING-LIST). HOST and
+USER are regular expressions, or nil. REMAPPING-LIST must be an
+alist of face remappings as used by `face-remapping-alist'. If
+USER matches the remote user part of `default-directory', and
+HOST matches the remote host part of `default-directory',
+REMAPPING-LIST is applied to the current buffer.
+
+For instance, the following settings change the background color
+to \"Red\" for frames connected to the remote host \"foo\", it
+changes the background color to \"Green\" for frames connected to
+the remote host \"bar\", and it inverses the fringe face for
+frames using the remote user \"root\":
+
+ '((nil \"^root$\" (fringe (:inherit fringe :inverse-video t)))
+ (\"^foo$\" nil (default (:background \"Red\")))
+ (\"^bar$\" nil (default (:background \"Green\"))))
+
+Per default, `mode-line-buffer-identification' is displayed
+inverse for buffers which are editable with \"root\" permissions."
+ :group 'tramp
+ :type `(repeat (list (choice :tag "Host regexp" regexp (const nil))
+ (choice :tag "User regexp" regexp (const nil))
+ (list :tag "Face Remapping"
+ face (plist :value-type sexp)))))
+
+(defun tramp-theme-original-value (variable)
+ "Return the original value of VARIABLE before loading `tramp-theme'."
+ (let ((theme-value (get variable 'theme-value)))
+ (or (cdr (car (delete (assoc 'tramp theme-value) theme-value)))
+ (get variable 'tramp-theme-original-value))))
+
+(defun tramp-theme-mode-line-buffer-identification ()
+ "Return a list suitable for `mode-line-buffer-identification'.
+It indicates the remote host being used, if any."
+ (append
+ (when (custom-theme-enabled-p 'tramp)
+ (let ((host (file-remote-p default-directory 'host))
+ (user (file-remote-p default-directory 'user))
+ remapping-alist)
+ ;; Apply `tramp-theme-face-remapping-alist'.
+ (dolist (elt tramp-theme-face-remapping-alist)
+ (when (and (string-match (or (nth 0 elt) "") (or host ""))
+ (string-match (or (nth 1 elt) "") (or user "")))
+ (setq remapping-alist (cons (nth 2 elt) remapping-alist))))
+ (setq-local face-remapping-alist (nreverse remapping-alist))
+
+ ;; The extended string.
+ (when host
+ ;; Do not use FQDN.
+ (when (string-match "^[^0-9][^.]*\\(\\..*\\)" host)
+ (setq host (substring host 0 (match-beginning 1))))
+ (list
+ (propertize
+ (concat (propertize host 'help-echo (purecopy "Host name")) ": ")
+ 'face 'mode-line-buffer-id 'mouse-face 'mode-line-highlight)))))
+
+ ;; That's the original definition.
+ (tramp-theme-original-value 'mode-line-buffer-identification)))
+
+(defun tramp-theme-hook-function ()
+ "Modify `mode-line-buffer-indication'.
+Used in different hooks, in order to accelerate the redisplay."
+ (setq
+ mode-line-buffer-identification
+ (tramp-theme-mode-line-buffer-identification)))
+
+(unless (custom-theme-enabled-p 'tramp)
+ ;; Save the original value.
+ (unless (get 'mode-line-buffer-identification 'tramp-theme-original-value)
+ (put 'mode-line-buffer-identification
+ 'tramp-theme-original-value
+ mode-line-buffer-identification))
+
+ (custom-theme-set-variables
+ 'tramp
+ ;; Extend `mode-line-buffer-identification' by host name.
+ '(mode-line-buffer-identification
+ '(:eval (tramp-theme-mode-line-buffer-identification)))
+ ;; `dired-mode' overwrites `mode-line-buffer-identification'. We
+ ;; want to use our own extension.
+ '(dired-mode-hook
+ (cons
+ 'tramp-theme-hook-function
+ (delete 'tramp-theme-hook-function dired-mode-hook)))
+ ;; Redisplay doesn't happen immediately. So we trigger it via
+ ;; `find-file-hook' and `eshell-directory-change-hook'.
+ '(find-file-hook
+ (cons
+ 'tramp-theme-hook-function
+ (delete 'tramp-theme-hook-function find-file-hook)))
+ '(eshell-directory-change-hook
+ (cons
+ 'tramp-theme-hook-function
+ (delete 'tramp-theme-hook-function eshell-directory-change-hook)))))
+
+(provide-theme 'tramp)
+
+;;; TODO:
+
+;; * Use a :type for `tramp-theme-face-remapping-alist' which allows
+;; to edit the faces. Maybe use (widget-get custom-face-edit :args)
+;; for this.
+
+;; Local Variables:
+;; no-byte-compile: t
+;; End:
+
+;;; tramp-theme.el ends here
- [elpa] branch externals/tramp-theme created (now d525e97), Stefan Monnier, 2020/12/01
- [elpa] externals/tramp-theme d525e97 8/8: * .gitignore: New file, Stefan Monnier, 2020/12/01
- [elpa] externals/tramp-theme feb4b1b 2/8: ; Minor changes to tramp-theme.el, Stefan Monnier, 2020/12/01
- [elpa] externals/tramp-theme 01f3242 3/8: Oops, release tramp-theme 0.1.1, Stefan Monnier, 2020/12/01
- [elpa] externals/tramp-theme 2c1ec49 6/8: Fix some quoting problems in doc strings, Stefan Monnier, 2020/12/01
- [elpa] externals/tramp-theme 0a5febb 5/8: * packages/tramp-theme/tramp-theme.el: Remove file-local variables., Stefan Monnier, 2020/12/01
- [elpa] externals/tramp-theme e23d7a3 7/8: * packages/tramp-theme/tramp-theme.el: Increase Version to 0.2., Stefan Monnier, 2020/12/01
- [elpa] externals/tramp-theme 0bd97ef 1/8: Add tramp-theme,
Stefan Monnier <=
- [elpa] externals/tramp-theme 0439a98 4/8: * packages/tramp-theme/tramp-theme.el: Add autoload cookie., Stefan Monnier, 2020/12/01