add manage-minor-mode for finding minor mode names to use with diminish
This commit is contained in:
parent
e59e69b80b
commit
3c1fdc0a2c
|
@ -0,0 +1,38 @@
|
||||||
|
;;; manage-minor-mode-autoloads.el --- automatically extracted autoloads -*- lexical-binding: t -*-
|
||||||
|
;;
|
||||||
|
;;; Code:
|
||||||
|
|
||||||
|
(add-to-list 'load-path (directory-file-name
|
||||||
|
(or (file-name-directory #$) (car load-path))))
|
||||||
|
|
||||||
|
|
||||||
|
;;;### (autoloads nil "manage-minor-mode" "manage-minor-mode.el"
|
||||||
|
;;;;;; (0 0 0 0))
|
||||||
|
;;; Generated autoloads from manage-minor-mode.el
|
||||||
|
|
||||||
|
(autoload 'manage-minor-mode-set "manage-minor-mode" "\
|
||||||
|
Manage minor mode set." nil nil)
|
||||||
|
|
||||||
|
(autoload 'manage-minor-mode "manage-minor-mode" "\
|
||||||
|
The minor mode.
|
||||||
|
Record for the $LAST-TOGGLED-ITEM.
|
||||||
|
|
||||||
|
\(fn &optional $LAST-TOGGLED-ITEM)" t nil)
|
||||||
|
|
||||||
|
(autoload 'manage-minor-mode-bals "manage-minor-mode" "\
|
||||||
|
Eradicate all minor-modes in the current buffer.
|
||||||
|
This command may cause unexpected effect even to other buffers.
|
||||||
|
However, don't worry, restore command exists:
|
||||||
|
`manage-minor-mode-restore-from-bals'." t nil)
|
||||||
|
|
||||||
|
(register-definition-prefixes "manage-minor-mode" '("manage-minor-mode-"))
|
||||||
|
|
||||||
|
;;;***
|
||||||
|
|
||||||
|
;; Local Variables:
|
||||||
|
;; version-control: never
|
||||||
|
;; no-byte-compile: t
|
||||||
|
;; no-update-autoloads: t
|
||||||
|
;; coding: utf-8
|
||||||
|
;; End:
|
||||||
|
;;; manage-minor-mode-autoloads.el ends here
|
|
@ -0,0 +1,2 @@
|
||||||
|
;;; Generated package description from manage-minor-mode.el -*- no-byte-compile: t -*-
|
||||||
|
(define-package "manage-minor-mode" "20210108.1832" "Manage your minor-modes easily" '((emacs "24.3")) :commit "e1af20253fbc5a91034ccd01cf00141130c11863" :authors '(("Shingo Fukuyama - http://fukuyama.co")) :maintainer '("Jen-Chieh Shen" . "jcs090218@gmail.com") :keywords '("tools" "minor-mode" "manage" "emacs") :url "https://github.com/ShingoFukuyama/manage-minor-mode")
|
491
code/elpa/manage-minor-mode-20210108.1832/manage-minor-mode.el
Normal file
491
code/elpa/manage-minor-mode-20210108.1832/manage-minor-mode.el
Normal file
|
@ -0,0 +1,491 @@
|
||||||
|
;;; manage-minor-mode.el --- Manage your minor-modes easily -*- lexical-binding: t -*-
|
||||||
|
|
||||||
|
;; Copyright (C) 2014 by Shingo Fukuyama
|
||||||
|
;; Copyright (C) 2020-2021 Shen, Jen-Chieh
|
||||||
|
|
||||||
|
;; Version: 1.1
|
||||||
|
;; Package-Version: 20210108.1832
|
||||||
|
;; Package-Commit: e1af20253fbc5a91034ccd01cf00141130c11863
|
||||||
|
;; Author: Shingo Fukuyama - http://fukuyama.co
|
||||||
|
;; Maintainer: Jen-Chieh Shen <jcs090218@gmail.com>
|
||||||
|
;; URL: https://github.com/ShingoFukuyama/manage-minor-mode
|
||||||
|
;; Created: Mar 8 2014
|
||||||
|
;; Keywords: tools minor-mode manage emacs
|
||||||
|
;; Package-Requires: ((emacs "24.3"))
|
||||||
|
|
||||||
|
;; This program 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 2 of
|
||||||
|
;; the License, or (at your option) any later version.
|
||||||
|
|
||||||
|
;; This program 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.
|
||||||
|
|
||||||
|
;;; Commentary:
|
||||||
|
|
||||||
|
;; Usage:
|
||||||
|
;; 1. M-x manage-minor-mode
|
||||||
|
;; 2. Minor modes list buffer will appear
|
||||||
|
;; 3. Then type "RET" key on any minor-mode you want to toggle active/inactive
|
||||||
|
|
||||||
|
;;; Code:
|
||||||
|
|
||||||
|
(require 'cl-lib)
|
||||||
|
|
||||||
|
(defun manage-minor-mode--active-list ()
|
||||||
|
"Get a list of which minor modes are enabled in the current buffer."
|
||||||
|
(let ($list)
|
||||||
|
(mapc (lambda ($mode)
|
||||||
|
(condition-case nil
|
||||||
|
(if (and (symbolp $mode) (symbol-value $mode))
|
||||||
|
(setq $list (cons $mode $list)))
|
||||||
|
(error nil)))
|
||||||
|
minor-mode-list)
|
||||||
|
(sort $list 'string<)))
|
||||||
|
|
||||||
|
(defun manage-minor-mode--inactive-list ()
|
||||||
|
"Get a list of which minor modes are disabled in the current buffer."
|
||||||
|
(let ($list)
|
||||||
|
(mapc (lambda ($mode)
|
||||||
|
(condition-case nil
|
||||||
|
(if (and (symbolp $mode) (not (symbol-value $mode)))
|
||||||
|
(setq $list (cons $mode $list)))
|
||||||
|
(error nil)))
|
||||||
|
minor-mode-list)
|
||||||
|
(sort $list 'string<)))
|
||||||
|
|
||||||
|
(defgroup manage-minor-mode nil
|
||||||
|
"Group for manage minor modes"
|
||||||
|
:prefix "manage-minor-mode-"
|
||||||
|
:group 'convenience)
|
||||||
|
|
||||||
|
(defvar manage-minor-mode-buffer "*manage-minor-mode*")
|
||||||
|
|
||||||
|
(defface manage-minor-mode-face-active
|
||||||
|
'((t :inherit success :foreground "#33eeee"))
|
||||||
|
"Face for active minor modes"
|
||||||
|
:group 'manage-minor-mode)
|
||||||
|
|
||||||
|
(defface manage-minor-mode-face-inactive
|
||||||
|
'((t :inherit warning :foreground "#ff6666"))
|
||||||
|
"Face for inactive minor modes"
|
||||||
|
:group 'manage-minor-mode)
|
||||||
|
|
||||||
|
(defface manage-minor-mode-face-changed
|
||||||
|
'((t :inherit underline :foreground "#eeee00"))
|
||||||
|
"Face for last changed minor modes"
|
||||||
|
:group 'manage-minor-mode)
|
||||||
|
|
||||||
|
(defcustom manage-minor-mode-always-show-keybind t
|
||||||
|
"Show keybind on the top of the buffer."
|
||||||
|
:group 'manage-minor-mode :type 'boolean)
|
||||||
|
|
||||||
|
(defvar manage-minor-mode-map
|
||||||
|
(let (($map (make-sparse-keymap)))
|
||||||
|
(define-key $map (kbd "RET") 'manage-minor-mode-toggle)
|
||||||
|
(define-key $map (kbd "<mouse-1>") 'manage-minor-mode-toggle)
|
||||||
|
(define-key $map (kbd "g") 'manage-minor-mode-refresh)
|
||||||
|
(define-key $map (kbd "e") 'manage-minor-mode-whole-session-enable)
|
||||||
|
(define-key $map (kbd "d") 'manage-minor-mode-whole-session-disable)
|
||||||
|
(define-key $map (kbd "r") 'manage-minor-mode-whole-session-release)
|
||||||
|
$map))
|
||||||
|
|
||||||
|
(defun manage-minor-mode--goto-line ($line)
|
||||||
|
"Go to $LINE considering narrowing."
|
||||||
|
(goto-char (point-min))
|
||||||
|
(forward-line (- $line 1)))
|
||||||
|
|
||||||
|
(defsubst manage-minor-mode--enable ($mode)
|
||||||
|
"Enable $MODE."
|
||||||
|
(ignore-errors (funcall $mode 1)))
|
||||||
|
|
||||||
|
(defsubst manage-minor-mode--disable ($mode)
|
||||||
|
"Disable $MODE."
|
||||||
|
(ignore-errors (funcall $mode 0)))
|
||||||
|
|
||||||
|
(defvar manage-minor-mode-default nil
|
||||||
|
"Set `minor-mode' active/inactive when `major-mode' changed.
|
||||||
|
|
||||||
|
;; Value structure:
|
||||||
|
'((global (on minor-mode minor-mode ...)
|
||||||
|
(off minor-mode minor-mode ...))
|
||||||
|
(major-mode1 (on minor-mode minor-mode ...)
|
||||||
|
(off minor-mode minor-mode ...))
|
||||||
|
(major-mode2 (on minor-mode minor-mode ...)
|
||||||
|
(off minor-mode minor-mode ...))
|
||||||
|
...)
|
||||||
|
|
||||||
|
;; Example
|
||||||
|
(setq manage-minor-mode-default
|
||||||
|
'((global
|
||||||
|
(on rainbow-mode hl-line-mode)
|
||||||
|
(off line-number-mode))
|
||||||
|
(emacs-lisp-mode
|
||||||
|
(on rainbow-delimiters-mode eldoc-mode show-paren-mode))
|
||||||
|
(js2-mode
|
||||||
|
(on color-identifiers-mode)
|
||||||
|
(off flycheck-mode))))")
|
||||||
|
|
||||||
|
;;;###autoload
|
||||||
|
(defun manage-minor-mode-set ()
|
||||||
|
"Manage minor mode set."
|
||||||
|
(when manage-minor-mode-default
|
||||||
|
(let* (($global (assoc-default 'global manage-minor-mode-default))
|
||||||
|
($global-on (assoc-default 'on $global))
|
||||||
|
($global-off (assoc-default 'off $global))
|
||||||
|
($major (assoc-default major-mode manage-minor-mode-default))
|
||||||
|
($major-on (assoc-default 'on $major))
|
||||||
|
($major-off (assoc-default 'off $major))
|
||||||
|
($on (append $global-on $major-on))
|
||||||
|
($off (append $global-off $major-off)))
|
||||||
|
(mapc (lambda ($m) (manage-minor-mode--enable $m)) $on)
|
||||||
|
(mapc (lambda ($m) (manage-minor-mode--disable $m)) $off))))
|
||||||
|
|
||||||
|
(add-hook 'after-change-major-mode-hook 'manage-minor-mode-set t)
|
||||||
|
|
||||||
|
(defun manage-minor-mode-whole-session-enable ()
|
||||||
|
"Enable minor-mode on the whole session."
|
||||||
|
(interactive)
|
||||||
|
(let (($po (if (eolp) (- (point) 1) (point)))
|
||||||
|
$mode)
|
||||||
|
(when (get-text-property $po 'manage-minor-mode)
|
||||||
|
(setq $mode (intern (thing-at-point 'symbol)))
|
||||||
|
(mapc (lambda ($buf)
|
||||||
|
(with-current-buffer $buf
|
||||||
|
(manage-minor-mode--enable $mode)))
|
||||||
|
(buffer-list))
|
||||||
|
(let* (($global (assoc-default 'global manage-minor-mode-default))
|
||||||
|
($on (assq 'on $global))
|
||||||
|
($off (assq 'off $global)))
|
||||||
|
(cond ((not $global)
|
||||||
|
(setq manage-minor-mode-default
|
||||||
|
(cons '(global (on) (off)) manage-minor-mode-default)))
|
||||||
|
((and $global (not $on) $off)
|
||||||
|
(setf (cdr (assq 'global manage-minor-mode-default))
|
||||||
|
`((on) ,$off)))
|
||||||
|
((and $global (not $off) $on)
|
||||||
|
(setf (cdr (assq 'global manage-minor-mode-default))
|
||||||
|
`(,$on (off)))))
|
||||||
|
(setf (cdr (assq 'on (assoc-default 'global manage-minor-mode-default)))
|
||||||
|
(cons $mode (cdr $on)))
|
||||||
|
(setf (cdr (assq 'off (assoc-default 'global manage-minor-mode-default)))
|
||||||
|
(delq $mode (cdr $off))))
|
||||||
|
(manage-minor-mode-refresh $mode))))
|
||||||
|
|
||||||
|
(defun manage-minor-mode-whole-session-disable ()
|
||||||
|
"Disable minor-mode on the whole session."
|
||||||
|
(interactive)
|
||||||
|
(let (($po (if (eolp) (- (point) 1) (point)))
|
||||||
|
$mode)
|
||||||
|
(when (get-text-property $po 'manage-minor-mode)
|
||||||
|
(setq $mode (intern (thing-at-point 'symbol)))
|
||||||
|
(mapc (lambda ($buf)
|
||||||
|
(with-current-buffer $buf
|
||||||
|
(manage-minor-mode--disable $mode)))
|
||||||
|
(buffer-list))
|
||||||
|
(let* (($global (assoc-default 'global manage-minor-mode-default))
|
||||||
|
($on (assq 'on $global))
|
||||||
|
($off (assq 'off $global)))
|
||||||
|
(cond ((not $global)
|
||||||
|
(setq manage-minor-mode-default
|
||||||
|
(cons '(global (on) (off)) manage-minor-mode-default)))
|
||||||
|
((and $global (not $on) $off)
|
||||||
|
(setf (cdr (assq 'global manage-minor-mode-default))
|
||||||
|
`((on) ,$off)))
|
||||||
|
((and $global (not $off) $on)
|
||||||
|
(setf (cdr (assq 'global manage-minor-mode-default))
|
||||||
|
`(,$on (off)))))
|
||||||
|
(setf (cdr (assq 'on (assoc-default 'global manage-minor-mode-default)))
|
||||||
|
(delq $mode (cdr $on)))
|
||||||
|
(setf (cdr (assq 'off (assoc-default 'global manage-minor-mode-default)))
|
||||||
|
(cons $mode (cdr $off))))
|
||||||
|
(manage-minor-mode-refresh $mode))))
|
||||||
|
|
||||||
|
(defun manage-minor-mode-whole-session-release ()
|
||||||
|
"Disable minor-mode on the whole session."
|
||||||
|
(interactive)
|
||||||
|
(let ($mode)
|
||||||
|
(when (get-text-property (point) 'manage-minor-mode)
|
||||||
|
(setq $mode (intern (thing-at-point 'symbol)))
|
||||||
|
(let* (($global (assoc-default 'global manage-minor-mode-default))
|
||||||
|
($on (assq 'on $global))
|
||||||
|
($off (assq 'off $global)))
|
||||||
|
(cond ((not $global)
|
||||||
|
(setq manage-minor-mode-default
|
||||||
|
(cons '(global (on) (off)) manage-minor-mode-default)))
|
||||||
|
((and $global (not $on) $off)
|
||||||
|
(setf (cdr (assq 'global manage-minor-mode-default))
|
||||||
|
`((on) ,$off)))
|
||||||
|
((and $global (not $off) $on)
|
||||||
|
(setf (cdr (assq 'global manage-minor-mode-default))
|
||||||
|
`(,$on (off)))))
|
||||||
|
(setf (cdr (assq 'on (assoc-default 'global manage-minor-mode-default)))
|
||||||
|
(delq $mode (cdr $on)))
|
||||||
|
(setf (cdr (assq 'off (assoc-default 'global manage-minor-mode-default)))
|
||||||
|
(delq $mode (cdr $off))))
|
||||||
|
(manage-minor-mode-refresh))))
|
||||||
|
|
||||||
|
(defun manage-minor-mode-whole-session-show ()
|
||||||
|
"Show globally enable/disable list."
|
||||||
|
(let* (($global (assoc-default 'global manage-minor-mode-default))
|
||||||
|
($enable (assoc-default 'on $global))
|
||||||
|
($disable (assoc-default 'off $global)))
|
||||||
|
(when $enable
|
||||||
|
(mapc (lambda ($m)
|
||||||
|
(goto-char (point-min))
|
||||||
|
(when (re-search-forward (concat "\\_<"
|
||||||
|
(format "%s" $m)
|
||||||
|
"\\_>") nil t)
|
||||||
|
(let (($ov (make-overlay (match-beginning 0) (match-end 0))))
|
||||||
|
(if (not (save-excursion (goto-char (match-end 0)) (eolp)))
|
||||||
|
(delete-char 3))
|
||||||
|
(overlay-put $ov 'after-string
|
||||||
|
(propertize
|
||||||
|
"[E]"
|
||||||
|
'face '(:foreground "#ffff00" :background "#555555"))))))
|
||||||
|
$enable))
|
||||||
|
(when $disable
|
||||||
|
(mapc (lambda ($m)
|
||||||
|
(goto-char (point-min))
|
||||||
|
(when (re-search-forward (concat "\\_<"
|
||||||
|
(format "%s" $m)
|
||||||
|
"\\_>") nil t)
|
||||||
|
(let (($ov (make-overlay (match-beginning 0) (match-end 0))))
|
||||||
|
(overlay-put $ov 'after-string
|
||||||
|
(propertize
|
||||||
|
"[D]"
|
||||||
|
'face '(:foreground "#eeee00" :background "#333333"))))))
|
||||||
|
$disable))))
|
||||||
|
|
||||||
|
(defvar manage-minor-mode-window-config nil)
|
||||||
|
|
||||||
|
(defun manage-minor-mode--buffer-p ()
|
||||||
|
"Return non-nil if buffer-p."
|
||||||
|
(equal (buffer-name (current-buffer)) manage-minor-mode-buffer))
|
||||||
|
|
||||||
|
|
||||||
|
(defvar manage-minor-mode-target-info nil)
|
||||||
|
|
||||||
|
(defun manage-minor-mode--get-target-info ($key)
|
||||||
|
"Get target info $KEY."
|
||||||
|
(car (assoc-default $key manage-minor-mode-target-info)))
|
||||||
|
|
||||||
|
(defun manage-minor-mode-refresh (&optional $mode-for-highlight $line $column)
|
||||||
|
"Redraw the `*manabe-minor-mode*' buffer."
|
||||||
|
(interactive)
|
||||||
|
(let (($li (or $line (line-number-at-pos)))
|
||||||
|
($cl (or $column (current-column))))
|
||||||
|
(set-window-configuration manage-minor-mode-window-config)
|
||||||
|
(if (manage-minor-mode--buffer-p)
|
||||||
|
(with-current-buffer (manage-minor-mode--get-target-info 'buffer)
|
||||||
|
(manage-minor-mode $mode-for-highlight))
|
||||||
|
(manage-minor-mode $mode-for-highlight))
|
||||||
|
(manage-minor-mode--goto-line $li)
|
||||||
|
(line-move-to-column $cl)
|
||||||
|
(when (called-interactively-p 'any)
|
||||||
|
(message (format "Refreshed '%s'" manage-minor-mode-buffer)))))
|
||||||
|
|
||||||
|
(defun manage-minor-mode-toggle ()
|
||||||
|
"Toggle a minor-mode status under the cursor."
|
||||||
|
(interactive)
|
||||||
|
(let (($po (if (eolp) (- (point) 1) (point)))
|
||||||
|
($li (line-number-at-pos))
|
||||||
|
($cl (current-column))
|
||||||
|
($buf (manage-minor-mode--get-target-info 'buffer)))
|
||||||
|
(cl-case (get-text-property $po 'manage-minor-mode)
|
||||||
|
(active (let (($mode (intern (thing-at-point 'symbol))))
|
||||||
|
(with-current-buffer $buf
|
||||||
|
(manage-minor-mode--disable $mode)
|
||||||
|
(manage-minor-mode-refresh $mode $li $cl))))
|
||||||
|
(inactive (let (($mode (intern (thing-at-point 'symbol))))
|
||||||
|
(with-current-buffer $buf
|
||||||
|
(manage-minor-mode--enable $mode)
|
||||||
|
(manage-minor-mode-refresh $mode $li $cl)))))))
|
||||||
|
|
||||||
|
(defun manage-minor-mode--kill-buffer ($after-select-window)
|
||||||
|
"Kill $AFTER-SELECT-WINDOW."
|
||||||
|
(when (get-buffer manage-minor-mode-buffer)
|
||||||
|
(kill-buffer manage-minor-mode-buffer)
|
||||||
|
(select-window $after-select-window)))
|
||||||
|
|
||||||
|
;;;###autoload
|
||||||
|
(defun manage-minor-mode (&optional $last-toggled-item)
|
||||||
|
"The minor mode.
|
||||||
|
Record for the $LAST-TOGGLED-ITEM."
|
||||||
|
(interactive)
|
||||||
|
(and $last-toggled-item
|
||||||
|
(not (listp $last-toggled-item))
|
||||||
|
(setq $last-toggled-item (cons $last-toggled-item nil)))
|
||||||
|
(setq manage-minor-mode-window-config (current-window-configuration))
|
||||||
|
(let* (($act (manage-minor-mode--active-list))
|
||||||
|
($inact (manage-minor-mode--inactive-list))
|
||||||
|
($max-line (+ (length $act) (length $inact)))
|
||||||
|
($current-buf (current-buffer))
|
||||||
|
($current-win (get-buffer-window $current-buf))
|
||||||
|
($major-mode major-mode))
|
||||||
|
(manage-minor-mode--kill-buffer $current-win)
|
||||||
|
(pop-to-buffer manage-minor-mode-buffer)
|
||||||
|
(setq truncate-lines t)
|
||||||
|
(set (make-local-variable 'manage-minor-mode-target-info)
|
||||||
|
`((buffer ,$current-buf)
|
||||||
|
(window ,$current-win)
|
||||||
|
(major-mode ,$major-mode)))
|
||||||
|
(cl-dotimes (ignored $max-line)
|
||||||
|
(insert (format "| \n")))
|
||||||
|
;; Insert inactive minor-modes
|
||||||
|
(goto-char (point-min))
|
||||||
|
(mapc (lambda ($m)
|
||||||
|
(goto-char (point-at-eol))
|
||||||
|
(insert
|
||||||
|
(propertize
|
||||||
|
(format "%s" $m)
|
||||||
|
'face 'manage-minor-mode-face-inactive
|
||||||
|
'manage-minor-mode 'inactive
|
||||||
|
'pointer 'hand))
|
||||||
|
(forward-line))
|
||||||
|
$inact)
|
||||||
|
;; Insert active minor-modes
|
||||||
|
(goto-char (point-min))
|
||||||
|
(mapc (lambda ($m)
|
||||||
|
(insert
|
||||||
|
(concat
|
||||||
|
(propertize
|
||||||
|
(format "%s" $m)
|
||||||
|
'face 'manage-minor-mode-face-active
|
||||||
|
'manage-minor-mode 'active
|
||||||
|
'pointer 'hand)
|
||||||
|
" " ;; 5 spaces
|
||||||
|
))
|
||||||
|
(forward-line))
|
||||||
|
$act)
|
||||||
|
;; header
|
||||||
|
(goto-char (point-min))
|
||||||
|
(setq header-line-format
|
||||||
|
(concat "buffer: "
|
||||||
|
(propertize
|
||||||
|
(format "%s" $current-buf)
|
||||||
|
'face 'manage-minor-mode-face-active)
|
||||||
|
" major-mode: "
|
||||||
|
(propertize
|
||||||
|
(format "%s" $major-mode)
|
||||||
|
'face 'manage-minor-mode-face-active)))
|
||||||
|
(if manage-minor-mode-always-show-keybind
|
||||||
|
(insert (concat "g: Refresh this buffer\n"
|
||||||
|
"e: Enable in the whole session [E]\n"
|
||||||
|
"d: Disable in the whole session [D]\n"
|
||||||
|
"r: Release out of the enable/disable list\n"
|
||||||
|
"RET: Toggle active/inactive\n"
|
||||||
|
"\n")))
|
||||||
|
(insert (concat "Active" " | " "Inactive" "\n"))
|
||||||
|
;; Adjust buffer
|
||||||
|
(goto-char (point-min))
|
||||||
|
(while (re-search-forward "^\\s-*|\\s-*$" nil t)
|
||||||
|
(delete-region (match-beginning 0) (match-end 0)))
|
||||||
|
(align-regexp (point-min) (point-max) "\\(\\s-*\\)|")
|
||||||
|
(manage-minor-mode-whole-session-show)
|
||||||
|
;; highlight last toggled mode
|
||||||
|
(when $last-toggled-item
|
||||||
|
(mapc (lambda ($m)
|
||||||
|
(goto-char (point-min))
|
||||||
|
(when (re-search-forward (concat "\\_<"
|
||||||
|
(format "%s" $m)
|
||||||
|
"\\_>") nil t)
|
||||||
|
(put-text-property (match-beginning 0) (match-end 0)
|
||||||
|
'face 'manage-minor-mode-face-changed)))
|
||||||
|
$last-toggled-item))
|
||||||
|
(goto-char (point-min))
|
||||||
|
(when (re-search-forward "^Active" nil t)
|
||||||
|
(goto-char (point-at-bol)))
|
||||||
|
(read-only-mode)
|
||||||
|
(use-local-map manage-minor-mode-map)))
|
||||||
|
|
||||||
|
(defvar manage-minor-mode-modes-before-bals nil)
|
||||||
|
|
||||||
|
(defvar manage-minor-mode-bals-exclude-list nil
|
||||||
|
"Minor-modes list evade from the eradication by `manage-minor-mode-bals'.
|
||||||
|
|
||||||
|
;; Value structure:
|
||||||
|
'((global (minor-mode1 minor-mode2 ...))
|
||||||
|
(major-mode (minor-mode1 minor-mode2 ...))
|
||||||
|
(major-mode (minor-mode1 minor-mode2 ...))
|
||||||
|
...)
|
||||||
|
|
||||||
|
;; Example
|
||||||
|
(setq manage-minor-mode-bals-exclude-list
|
||||||
|
'((global (recentf-mode global-font-lock-mode
|
||||||
|
delete-selection-mode transient-mark-mode tabbar-mode))
|
||||||
|
(text-mode (line-number-mode))
|
||||||
|
(org-mode (line-number-mode blink-cursor-mode))))")
|
||||||
|
|
||||||
|
;;;###autoload
|
||||||
|
(defun manage-minor-mode-bals ()
|
||||||
|
"Eradicate all minor-modes in the current buffer.
|
||||||
|
This command may cause unexpected effect even to other buffers.
|
||||||
|
However, don't worry, restore command exists:
|
||||||
|
`manage-minor-mode-restore-from-bals'."
|
||||||
|
(interactive)
|
||||||
|
(let (($restore-variable (manage-minor-mode--active-list))
|
||||||
|
$switched)
|
||||||
|
(cl-flet
|
||||||
|
((set-restore-variable
|
||||||
|
() (set (make-local-variable 'manage-minor-mode-modes-before-bals)
|
||||||
|
$restore-variable))
|
||||||
|
(bals
|
||||||
|
() (let (($excludes
|
||||||
|
(append
|
||||||
|
(car (assoc-default 'global manage-minor-mode-bals-exclude-list))
|
||||||
|
(car (assoc-default
|
||||||
|
(if (manage-minor-mode--buffer-p)
|
||||||
|
(manage-minor-mode--get-target-info 'major-mode)
|
||||||
|
major-mode)
|
||||||
|
manage-minor-mode-bals-exclude-list)))))
|
||||||
|
(mapc (lambda ($m)
|
||||||
|
(unless (memq $m $excludes)
|
||||||
|
(manage-minor-mode--disable $m)
|
||||||
|
(setq $switched (cons $m $switched))))
|
||||||
|
$restore-variable))))
|
||||||
|
(if (manage-minor-mode--buffer-p)
|
||||||
|
(progn
|
||||||
|
(with-current-buffer (manage-minor-mode--get-target-info 'buffer)
|
||||||
|
(bals)
|
||||||
|
(set-restore-variable))
|
||||||
|
(manage-minor-mode-refresh $switched 2 1)
|
||||||
|
(set-restore-variable))
|
||||||
|
(set-restore-variable)
|
||||||
|
(bals)))))
|
||||||
|
|
||||||
|
(defun manage-minor-mode-restore-from-bals ()
|
||||||
|
"Restore minor modes to before `manage-minor-mode-bals' happened."
|
||||||
|
(interactive)
|
||||||
|
(if (manage-minor-mode--buffer-p)
|
||||||
|
(let ($switched)
|
||||||
|
(with-current-buffer (manage-minor-mode--get-target-info 'buffer)
|
||||||
|
(mapc (lambda ($m)
|
||||||
|
(manage-minor-mode--enable $m)
|
||||||
|
(setq $switched (cons $m $switched)))
|
||||||
|
manage-minor-mode-modes-before-bals))
|
||||||
|
(manage-minor-mode-refresh $switched 2 1))
|
||||||
|
(mapc (lambda ($m)
|
||||||
|
(manage-minor-mode--enable $m))
|
||||||
|
manage-minor-mode-modes-before-bals)))
|
||||||
|
|
||||||
|
;; Mouse click minor-mode in mode-line to popup "Manage minor modes"
|
||||||
|
(defadvice popup-menu (before manage-minor-mode-add-for-popup-menu disable)
|
||||||
|
"Advice `popup-menu'."
|
||||||
|
(ad-set-arg 0 (append (ad-get-arg 0)
|
||||||
|
'((manage-minor-mode
|
||||||
|
menu-item "Manage minor modes"
|
||||||
|
(lambda () (interactive) (manage-minor-mode)))))))
|
||||||
|
|
||||||
|
(defadvice minor-mode-menu-from-indicator (around manage-minor-mode-add-mode-line-menu activate)
|
||||||
|
"Advice for `minor-mode-menu-from-indicator'."
|
||||||
|
(ad-enable-advice 'popup-menu 'before 'manage-minor-mode-add-for-popup-menu)
|
||||||
|
(ad-activate 'popup-menu)
|
||||||
|
ad-do-it
|
||||||
|
(ad-disable-advice 'popup-menu 'before 'manage-minor-mode-add-for-popup-menu)
|
||||||
|
(ad-activate 'popup-menu))
|
||||||
|
|
||||||
|
(provide 'manage-minor-mode)
|
||||||
|
;;; manage-minor-mode.el ends here
|
|
@ -0,0 +1,38 @@
|
||||||
|
;;; manage-minor-mode-autoloads.el --- automatically extracted autoloads -*- lexical-binding: t -*-
|
||||||
|
;;
|
||||||
|
;;; Code:
|
||||||
|
|
||||||
|
(add-to-list 'load-path (directory-file-name
|
||||||
|
(or (file-name-directory #$) (car load-path))))
|
||||||
|
|
||||||
|
|
||||||
|
;;;### (autoloads nil "manage-minor-mode" "manage-minor-mode.el"
|
||||||
|
;;;;;; (0 0 0 0))
|
||||||
|
;;; Generated autoloads from manage-minor-mode.el
|
||||||
|
|
||||||
|
(autoload 'manage-minor-mode-set "manage-minor-mode" "\
|
||||||
|
Manage minor mode set." nil nil)
|
||||||
|
|
||||||
|
(autoload 'manage-minor-mode "manage-minor-mode" "\
|
||||||
|
The minor mode.
|
||||||
|
Record for the $LAST-TOGGLED-ITEM.
|
||||||
|
|
||||||
|
\(fn &optional $LAST-TOGGLED-ITEM)" t nil)
|
||||||
|
|
||||||
|
(autoload 'manage-minor-mode-bals "manage-minor-mode" "\
|
||||||
|
Eradicate all minor-modes in the current buffer.
|
||||||
|
This command may cause unexpected effect even to other buffers.
|
||||||
|
However, don't worry, restore command exists:
|
||||||
|
`manage-minor-mode-restore-from-bals'." t nil)
|
||||||
|
|
||||||
|
(register-definition-prefixes "manage-minor-mode" '("manage-minor-mode-"))
|
||||||
|
|
||||||
|
;;;***
|
||||||
|
|
||||||
|
;; Local Variables:
|
||||||
|
;; version-control: never
|
||||||
|
;; no-byte-compile: t
|
||||||
|
;; no-update-autoloads: t
|
||||||
|
;; coding: utf-8
|
||||||
|
;; End:
|
||||||
|
;;; manage-minor-mode-autoloads.el ends here
|
|
@ -0,0 +1,2 @@
|
||||||
|
;;; Generated package description from manage-minor-mode.el -*- no-byte-compile: t -*-
|
||||||
|
(define-package "manage-minor-mode" "20210108.1832" "Manage your minor-modes easily" '((emacs "24.3")) :commit "e1af20253fbc5a91034ccd01cf00141130c11863" :authors '(("Shingo Fukuyama - http://fukuyama.co")) :maintainer '("Jen-Chieh Shen" . "jcs090218@gmail.com") :keywords '("tools" "minor-mode" "manage" "emacs") :url "https://github.com/ShingoFukuyama/manage-minor-mode")
|
491
org/elpa/manage-minor-mode-20210108.1832/manage-minor-mode.el
Normal file
491
org/elpa/manage-minor-mode-20210108.1832/manage-minor-mode.el
Normal file
|
@ -0,0 +1,491 @@
|
||||||
|
;;; manage-minor-mode.el --- Manage your minor-modes easily -*- lexical-binding: t -*-
|
||||||
|
|
||||||
|
;; Copyright (C) 2014 by Shingo Fukuyama
|
||||||
|
;; Copyright (C) 2020-2021 Shen, Jen-Chieh
|
||||||
|
|
||||||
|
;; Version: 1.1
|
||||||
|
;; Package-Version: 20210108.1832
|
||||||
|
;; Package-Commit: e1af20253fbc5a91034ccd01cf00141130c11863
|
||||||
|
;; Author: Shingo Fukuyama - http://fukuyama.co
|
||||||
|
;; Maintainer: Jen-Chieh Shen <jcs090218@gmail.com>
|
||||||
|
;; URL: https://github.com/ShingoFukuyama/manage-minor-mode
|
||||||
|
;; Created: Mar 8 2014
|
||||||
|
;; Keywords: tools minor-mode manage emacs
|
||||||
|
;; Package-Requires: ((emacs "24.3"))
|
||||||
|
|
||||||
|
;; This program 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 2 of
|
||||||
|
;; the License, or (at your option) any later version.
|
||||||
|
|
||||||
|
;; This program 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.
|
||||||
|
|
||||||
|
;;; Commentary:
|
||||||
|
|
||||||
|
;; Usage:
|
||||||
|
;; 1. M-x manage-minor-mode
|
||||||
|
;; 2. Minor modes list buffer will appear
|
||||||
|
;; 3. Then type "RET" key on any minor-mode you want to toggle active/inactive
|
||||||
|
|
||||||
|
;;; Code:
|
||||||
|
|
||||||
|
(require 'cl-lib)
|
||||||
|
|
||||||
|
(defun manage-minor-mode--active-list ()
|
||||||
|
"Get a list of which minor modes are enabled in the current buffer."
|
||||||
|
(let ($list)
|
||||||
|
(mapc (lambda ($mode)
|
||||||
|
(condition-case nil
|
||||||
|
(if (and (symbolp $mode) (symbol-value $mode))
|
||||||
|
(setq $list (cons $mode $list)))
|
||||||
|
(error nil)))
|
||||||
|
minor-mode-list)
|
||||||
|
(sort $list 'string<)))
|
||||||
|
|
||||||
|
(defun manage-minor-mode--inactive-list ()
|
||||||
|
"Get a list of which minor modes are disabled in the current buffer."
|
||||||
|
(let ($list)
|
||||||
|
(mapc (lambda ($mode)
|
||||||
|
(condition-case nil
|
||||||
|
(if (and (symbolp $mode) (not (symbol-value $mode)))
|
||||||
|
(setq $list (cons $mode $list)))
|
||||||
|
(error nil)))
|
||||||
|
minor-mode-list)
|
||||||
|
(sort $list 'string<)))
|
||||||
|
|
||||||
|
(defgroup manage-minor-mode nil
|
||||||
|
"Group for manage minor modes"
|
||||||
|
:prefix "manage-minor-mode-"
|
||||||
|
:group 'convenience)
|
||||||
|
|
||||||
|
(defvar manage-minor-mode-buffer "*manage-minor-mode*")
|
||||||
|
|
||||||
|
(defface manage-minor-mode-face-active
|
||||||
|
'((t :inherit success :foreground "#33eeee"))
|
||||||
|
"Face for active minor modes"
|
||||||
|
:group 'manage-minor-mode)
|
||||||
|
|
||||||
|
(defface manage-minor-mode-face-inactive
|
||||||
|
'((t :inherit warning :foreground "#ff6666"))
|
||||||
|
"Face for inactive minor modes"
|
||||||
|
:group 'manage-minor-mode)
|
||||||
|
|
||||||
|
(defface manage-minor-mode-face-changed
|
||||||
|
'((t :inherit underline :foreground "#eeee00"))
|
||||||
|
"Face for last changed minor modes"
|
||||||
|
:group 'manage-minor-mode)
|
||||||
|
|
||||||
|
(defcustom manage-minor-mode-always-show-keybind t
|
||||||
|
"Show keybind on the top of the buffer."
|
||||||
|
:group 'manage-minor-mode :type 'boolean)
|
||||||
|
|
||||||
|
(defvar manage-minor-mode-map
|
||||||
|
(let (($map (make-sparse-keymap)))
|
||||||
|
(define-key $map (kbd "RET") 'manage-minor-mode-toggle)
|
||||||
|
(define-key $map (kbd "<mouse-1>") 'manage-minor-mode-toggle)
|
||||||
|
(define-key $map (kbd "g") 'manage-minor-mode-refresh)
|
||||||
|
(define-key $map (kbd "e") 'manage-minor-mode-whole-session-enable)
|
||||||
|
(define-key $map (kbd "d") 'manage-minor-mode-whole-session-disable)
|
||||||
|
(define-key $map (kbd "r") 'manage-minor-mode-whole-session-release)
|
||||||
|
$map))
|
||||||
|
|
||||||
|
(defun manage-minor-mode--goto-line ($line)
|
||||||
|
"Go to $LINE considering narrowing."
|
||||||
|
(goto-char (point-min))
|
||||||
|
(forward-line (- $line 1)))
|
||||||
|
|
||||||
|
(defsubst manage-minor-mode--enable ($mode)
|
||||||
|
"Enable $MODE."
|
||||||
|
(ignore-errors (funcall $mode 1)))
|
||||||
|
|
||||||
|
(defsubst manage-minor-mode--disable ($mode)
|
||||||
|
"Disable $MODE."
|
||||||
|
(ignore-errors (funcall $mode 0)))
|
||||||
|
|
||||||
|
(defvar manage-minor-mode-default nil
|
||||||
|
"Set `minor-mode' active/inactive when `major-mode' changed.
|
||||||
|
|
||||||
|
;; Value structure:
|
||||||
|
'((global (on minor-mode minor-mode ...)
|
||||||
|
(off minor-mode minor-mode ...))
|
||||||
|
(major-mode1 (on minor-mode minor-mode ...)
|
||||||
|
(off minor-mode minor-mode ...))
|
||||||
|
(major-mode2 (on minor-mode minor-mode ...)
|
||||||
|
(off minor-mode minor-mode ...))
|
||||||
|
...)
|
||||||
|
|
||||||
|
;; Example
|
||||||
|
(setq manage-minor-mode-default
|
||||||
|
'((global
|
||||||
|
(on rainbow-mode hl-line-mode)
|
||||||
|
(off line-number-mode))
|
||||||
|
(emacs-lisp-mode
|
||||||
|
(on rainbow-delimiters-mode eldoc-mode show-paren-mode))
|
||||||
|
(js2-mode
|
||||||
|
(on color-identifiers-mode)
|
||||||
|
(off flycheck-mode))))")
|
||||||
|
|
||||||
|
;;;###autoload
|
||||||
|
(defun manage-minor-mode-set ()
|
||||||
|
"Manage minor mode set."
|
||||||
|
(when manage-minor-mode-default
|
||||||
|
(let* (($global (assoc-default 'global manage-minor-mode-default))
|
||||||
|
($global-on (assoc-default 'on $global))
|
||||||
|
($global-off (assoc-default 'off $global))
|
||||||
|
($major (assoc-default major-mode manage-minor-mode-default))
|
||||||
|
($major-on (assoc-default 'on $major))
|
||||||
|
($major-off (assoc-default 'off $major))
|
||||||
|
($on (append $global-on $major-on))
|
||||||
|
($off (append $global-off $major-off)))
|
||||||
|
(mapc (lambda ($m) (manage-minor-mode--enable $m)) $on)
|
||||||
|
(mapc (lambda ($m) (manage-minor-mode--disable $m)) $off))))
|
||||||
|
|
||||||
|
(add-hook 'after-change-major-mode-hook 'manage-minor-mode-set t)
|
||||||
|
|
||||||
|
(defun manage-minor-mode-whole-session-enable ()
|
||||||
|
"Enable minor-mode on the whole session."
|
||||||
|
(interactive)
|
||||||
|
(let (($po (if (eolp) (- (point) 1) (point)))
|
||||||
|
$mode)
|
||||||
|
(when (get-text-property $po 'manage-minor-mode)
|
||||||
|
(setq $mode (intern (thing-at-point 'symbol)))
|
||||||
|
(mapc (lambda ($buf)
|
||||||
|
(with-current-buffer $buf
|
||||||
|
(manage-minor-mode--enable $mode)))
|
||||||
|
(buffer-list))
|
||||||
|
(let* (($global (assoc-default 'global manage-minor-mode-default))
|
||||||
|
($on (assq 'on $global))
|
||||||
|
($off (assq 'off $global)))
|
||||||
|
(cond ((not $global)
|
||||||
|
(setq manage-minor-mode-default
|
||||||
|
(cons '(global (on) (off)) manage-minor-mode-default)))
|
||||||
|
((and $global (not $on) $off)
|
||||||
|
(setf (cdr (assq 'global manage-minor-mode-default))
|
||||||
|
`((on) ,$off)))
|
||||||
|
((and $global (not $off) $on)
|
||||||
|
(setf (cdr (assq 'global manage-minor-mode-default))
|
||||||
|
`(,$on (off)))))
|
||||||
|
(setf (cdr (assq 'on (assoc-default 'global manage-minor-mode-default)))
|
||||||
|
(cons $mode (cdr $on)))
|
||||||
|
(setf (cdr (assq 'off (assoc-default 'global manage-minor-mode-default)))
|
||||||
|
(delq $mode (cdr $off))))
|
||||||
|
(manage-minor-mode-refresh $mode))))
|
||||||
|
|
||||||
|
(defun manage-minor-mode-whole-session-disable ()
|
||||||
|
"Disable minor-mode on the whole session."
|
||||||
|
(interactive)
|
||||||
|
(let (($po (if (eolp) (- (point) 1) (point)))
|
||||||
|
$mode)
|
||||||
|
(when (get-text-property $po 'manage-minor-mode)
|
||||||
|
(setq $mode (intern (thing-at-point 'symbol)))
|
||||||
|
(mapc (lambda ($buf)
|
||||||
|
(with-current-buffer $buf
|
||||||
|
(manage-minor-mode--disable $mode)))
|
||||||
|
(buffer-list))
|
||||||
|
(let* (($global (assoc-default 'global manage-minor-mode-default))
|
||||||
|
($on (assq 'on $global))
|
||||||
|
($off (assq 'off $global)))
|
||||||
|
(cond ((not $global)
|
||||||
|
(setq manage-minor-mode-default
|
||||||
|
(cons '(global (on) (off)) manage-minor-mode-default)))
|
||||||
|
((and $global (not $on) $off)
|
||||||
|
(setf (cdr (assq 'global manage-minor-mode-default))
|
||||||
|
`((on) ,$off)))
|
||||||
|
((and $global (not $off) $on)
|
||||||
|
(setf (cdr (assq 'global manage-minor-mode-default))
|
||||||
|
`(,$on (off)))))
|
||||||
|
(setf (cdr (assq 'on (assoc-default 'global manage-minor-mode-default)))
|
||||||
|
(delq $mode (cdr $on)))
|
||||||
|
(setf (cdr (assq 'off (assoc-default 'global manage-minor-mode-default)))
|
||||||
|
(cons $mode (cdr $off))))
|
||||||
|
(manage-minor-mode-refresh $mode))))
|
||||||
|
|
||||||
|
(defun manage-minor-mode-whole-session-release ()
|
||||||
|
"Disable minor-mode on the whole session."
|
||||||
|
(interactive)
|
||||||
|
(let ($mode)
|
||||||
|
(when (get-text-property (point) 'manage-minor-mode)
|
||||||
|
(setq $mode (intern (thing-at-point 'symbol)))
|
||||||
|
(let* (($global (assoc-default 'global manage-minor-mode-default))
|
||||||
|
($on (assq 'on $global))
|
||||||
|
($off (assq 'off $global)))
|
||||||
|
(cond ((not $global)
|
||||||
|
(setq manage-minor-mode-default
|
||||||
|
(cons '(global (on) (off)) manage-minor-mode-default)))
|
||||||
|
((and $global (not $on) $off)
|
||||||
|
(setf (cdr (assq 'global manage-minor-mode-default))
|
||||||
|
`((on) ,$off)))
|
||||||
|
((and $global (not $off) $on)
|
||||||
|
(setf (cdr (assq 'global manage-minor-mode-default))
|
||||||
|
`(,$on (off)))))
|
||||||
|
(setf (cdr (assq 'on (assoc-default 'global manage-minor-mode-default)))
|
||||||
|
(delq $mode (cdr $on)))
|
||||||
|
(setf (cdr (assq 'off (assoc-default 'global manage-minor-mode-default)))
|
||||||
|
(delq $mode (cdr $off))))
|
||||||
|
(manage-minor-mode-refresh))))
|
||||||
|
|
||||||
|
(defun manage-minor-mode-whole-session-show ()
|
||||||
|
"Show globally enable/disable list."
|
||||||
|
(let* (($global (assoc-default 'global manage-minor-mode-default))
|
||||||
|
($enable (assoc-default 'on $global))
|
||||||
|
($disable (assoc-default 'off $global)))
|
||||||
|
(when $enable
|
||||||
|
(mapc (lambda ($m)
|
||||||
|
(goto-char (point-min))
|
||||||
|
(when (re-search-forward (concat "\\_<"
|
||||||
|
(format "%s" $m)
|
||||||
|
"\\_>") nil t)
|
||||||
|
(let (($ov (make-overlay (match-beginning 0) (match-end 0))))
|
||||||
|
(if (not (save-excursion (goto-char (match-end 0)) (eolp)))
|
||||||
|
(delete-char 3))
|
||||||
|
(overlay-put $ov 'after-string
|
||||||
|
(propertize
|
||||||
|
"[E]"
|
||||||
|
'face '(:foreground "#ffff00" :background "#555555"))))))
|
||||||
|
$enable))
|
||||||
|
(when $disable
|
||||||
|
(mapc (lambda ($m)
|
||||||
|
(goto-char (point-min))
|
||||||
|
(when (re-search-forward (concat "\\_<"
|
||||||
|
(format "%s" $m)
|
||||||
|
"\\_>") nil t)
|
||||||
|
(let (($ov (make-overlay (match-beginning 0) (match-end 0))))
|
||||||
|
(overlay-put $ov 'after-string
|
||||||
|
(propertize
|
||||||
|
"[D]"
|
||||||
|
'face '(:foreground "#eeee00" :background "#333333"))))))
|
||||||
|
$disable))))
|
||||||
|
|
||||||
|
(defvar manage-minor-mode-window-config nil)
|
||||||
|
|
||||||
|
(defun manage-minor-mode--buffer-p ()
|
||||||
|
"Return non-nil if buffer-p."
|
||||||
|
(equal (buffer-name (current-buffer)) manage-minor-mode-buffer))
|
||||||
|
|
||||||
|
|
||||||
|
(defvar manage-minor-mode-target-info nil)
|
||||||
|
|
||||||
|
(defun manage-minor-mode--get-target-info ($key)
|
||||||
|
"Get target info $KEY."
|
||||||
|
(car (assoc-default $key manage-minor-mode-target-info)))
|
||||||
|
|
||||||
|
(defun manage-minor-mode-refresh (&optional $mode-for-highlight $line $column)
|
||||||
|
"Redraw the `*manabe-minor-mode*' buffer."
|
||||||
|
(interactive)
|
||||||
|
(let (($li (or $line (line-number-at-pos)))
|
||||||
|
($cl (or $column (current-column))))
|
||||||
|
(set-window-configuration manage-minor-mode-window-config)
|
||||||
|
(if (manage-minor-mode--buffer-p)
|
||||||
|
(with-current-buffer (manage-minor-mode--get-target-info 'buffer)
|
||||||
|
(manage-minor-mode $mode-for-highlight))
|
||||||
|
(manage-minor-mode $mode-for-highlight))
|
||||||
|
(manage-minor-mode--goto-line $li)
|
||||||
|
(line-move-to-column $cl)
|
||||||
|
(when (called-interactively-p 'any)
|
||||||
|
(message (format "Refreshed '%s'" manage-minor-mode-buffer)))))
|
||||||
|
|
||||||
|
(defun manage-minor-mode-toggle ()
|
||||||
|
"Toggle a minor-mode status under the cursor."
|
||||||
|
(interactive)
|
||||||
|
(let (($po (if (eolp) (- (point) 1) (point)))
|
||||||
|
($li (line-number-at-pos))
|
||||||
|
($cl (current-column))
|
||||||
|
($buf (manage-minor-mode--get-target-info 'buffer)))
|
||||||
|
(cl-case (get-text-property $po 'manage-minor-mode)
|
||||||
|
(active (let (($mode (intern (thing-at-point 'symbol))))
|
||||||
|
(with-current-buffer $buf
|
||||||
|
(manage-minor-mode--disable $mode)
|
||||||
|
(manage-minor-mode-refresh $mode $li $cl))))
|
||||||
|
(inactive (let (($mode (intern (thing-at-point 'symbol))))
|
||||||
|
(with-current-buffer $buf
|
||||||
|
(manage-minor-mode--enable $mode)
|
||||||
|
(manage-minor-mode-refresh $mode $li $cl)))))))
|
||||||
|
|
||||||
|
(defun manage-minor-mode--kill-buffer ($after-select-window)
|
||||||
|
"Kill $AFTER-SELECT-WINDOW."
|
||||||
|
(when (get-buffer manage-minor-mode-buffer)
|
||||||
|
(kill-buffer manage-minor-mode-buffer)
|
||||||
|
(select-window $after-select-window)))
|
||||||
|
|
||||||
|
;;;###autoload
|
||||||
|
(defun manage-minor-mode (&optional $last-toggled-item)
|
||||||
|
"The minor mode.
|
||||||
|
Record for the $LAST-TOGGLED-ITEM."
|
||||||
|
(interactive)
|
||||||
|
(and $last-toggled-item
|
||||||
|
(not (listp $last-toggled-item))
|
||||||
|
(setq $last-toggled-item (cons $last-toggled-item nil)))
|
||||||
|
(setq manage-minor-mode-window-config (current-window-configuration))
|
||||||
|
(let* (($act (manage-minor-mode--active-list))
|
||||||
|
($inact (manage-minor-mode--inactive-list))
|
||||||
|
($max-line (+ (length $act) (length $inact)))
|
||||||
|
($current-buf (current-buffer))
|
||||||
|
($current-win (get-buffer-window $current-buf))
|
||||||
|
($major-mode major-mode))
|
||||||
|
(manage-minor-mode--kill-buffer $current-win)
|
||||||
|
(pop-to-buffer manage-minor-mode-buffer)
|
||||||
|
(setq truncate-lines t)
|
||||||
|
(set (make-local-variable 'manage-minor-mode-target-info)
|
||||||
|
`((buffer ,$current-buf)
|
||||||
|
(window ,$current-win)
|
||||||
|
(major-mode ,$major-mode)))
|
||||||
|
(cl-dotimes (ignored $max-line)
|
||||||
|
(insert (format "| \n")))
|
||||||
|
;; Insert inactive minor-modes
|
||||||
|
(goto-char (point-min))
|
||||||
|
(mapc (lambda ($m)
|
||||||
|
(goto-char (point-at-eol))
|
||||||
|
(insert
|
||||||
|
(propertize
|
||||||
|
(format "%s" $m)
|
||||||
|
'face 'manage-minor-mode-face-inactive
|
||||||
|
'manage-minor-mode 'inactive
|
||||||
|
'pointer 'hand))
|
||||||
|
(forward-line))
|
||||||
|
$inact)
|
||||||
|
;; Insert active minor-modes
|
||||||
|
(goto-char (point-min))
|
||||||
|
(mapc (lambda ($m)
|
||||||
|
(insert
|
||||||
|
(concat
|
||||||
|
(propertize
|
||||||
|
(format "%s" $m)
|
||||||
|
'face 'manage-minor-mode-face-active
|
||||||
|
'manage-minor-mode 'active
|
||||||
|
'pointer 'hand)
|
||||||
|
" " ;; 5 spaces
|
||||||
|
))
|
||||||
|
(forward-line))
|
||||||
|
$act)
|
||||||
|
;; header
|
||||||
|
(goto-char (point-min))
|
||||||
|
(setq header-line-format
|
||||||
|
(concat "buffer: "
|
||||||
|
(propertize
|
||||||
|
(format "%s" $current-buf)
|
||||||
|
'face 'manage-minor-mode-face-active)
|
||||||
|
" major-mode: "
|
||||||
|
(propertize
|
||||||
|
(format "%s" $major-mode)
|
||||||
|
'face 'manage-minor-mode-face-active)))
|
||||||
|
(if manage-minor-mode-always-show-keybind
|
||||||
|
(insert (concat "g: Refresh this buffer\n"
|
||||||
|
"e: Enable in the whole session [E]\n"
|
||||||
|
"d: Disable in the whole session [D]\n"
|
||||||
|
"r: Release out of the enable/disable list\n"
|
||||||
|
"RET: Toggle active/inactive\n"
|
||||||
|
"\n")))
|
||||||
|
(insert (concat "Active" " | " "Inactive" "\n"))
|
||||||
|
;; Adjust buffer
|
||||||
|
(goto-char (point-min))
|
||||||
|
(while (re-search-forward "^\\s-*|\\s-*$" nil t)
|
||||||
|
(delete-region (match-beginning 0) (match-end 0)))
|
||||||
|
(align-regexp (point-min) (point-max) "\\(\\s-*\\)|")
|
||||||
|
(manage-minor-mode-whole-session-show)
|
||||||
|
;; highlight last toggled mode
|
||||||
|
(when $last-toggled-item
|
||||||
|
(mapc (lambda ($m)
|
||||||
|
(goto-char (point-min))
|
||||||
|
(when (re-search-forward (concat "\\_<"
|
||||||
|
(format "%s" $m)
|
||||||
|
"\\_>") nil t)
|
||||||
|
(put-text-property (match-beginning 0) (match-end 0)
|
||||||
|
'face 'manage-minor-mode-face-changed)))
|
||||||
|
$last-toggled-item))
|
||||||
|
(goto-char (point-min))
|
||||||
|
(when (re-search-forward "^Active" nil t)
|
||||||
|
(goto-char (point-at-bol)))
|
||||||
|
(read-only-mode)
|
||||||
|
(use-local-map manage-minor-mode-map)))
|
||||||
|
|
||||||
|
(defvar manage-minor-mode-modes-before-bals nil)
|
||||||
|
|
||||||
|
(defvar manage-minor-mode-bals-exclude-list nil
|
||||||
|
"Minor-modes list evade from the eradication by `manage-minor-mode-bals'.
|
||||||
|
|
||||||
|
;; Value structure:
|
||||||
|
'((global (minor-mode1 minor-mode2 ...))
|
||||||
|
(major-mode (minor-mode1 minor-mode2 ...))
|
||||||
|
(major-mode (minor-mode1 minor-mode2 ...))
|
||||||
|
...)
|
||||||
|
|
||||||
|
;; Example
|
||||||
|
(setq manage-minor-mode-bals-exclude-list
|
||||||
|
'((global (recentf-mode global-font-lock-mode
|
||||||
|
delete-selection-mode transient-mark-mode tabbar-mode))
|
||||||
|
(text-mode (line-number-mode))
|
||||||
|
(org-mode (line-number-mode blink-cursor-mode))))")
|
||||||
|
|
||||||
|
;;;###autoload
|
||||||
|
(defun manage-minor-mode-bals ()
|
||||||
|
"Eradicate all minor-modes in the current buffer.
|
||||||
|
This command may cause unexpected effect even to other buffers.
|
||||||
|
However, don't worry, restore command exists:
|
||||||
|
`manage-minor-mode-restore-from-bals'."
|
||||||
|
(interactive)
|
||||||
|
(let (($restore-variable (manage-minor-mode--active-list))
|
||||||
|
$switched)
|
||||||
|
(cl-flet
|
||||||
|
((set-restore-variable
|
||||||
|
() (set (make-local-variable 'manage-minor-mode-modes-before-bals)
|
||||||
|
$restore-variable))
|
||||||
|
(bals
|
||||||
|
() (let (($excludes
|
||||||
|
(append
|
||||||
|
(car (assoc-default 'global manage-minor-mode-bals-exclude-list))
|
||||||
|
(car (assoc-default
|
||||||
|
(if (manage-minor-mode--buffer-p)
|
||||||
|
(manage-minor-mode--get-target-info 'major-mode)
|
||||||
|
major-mode)
|
||||||
|
manage-minor-mode-bals-exclude-list)))))
|
||||||
|
(mapc (lambda ($m)
|
||||||
|
(unless (memq $m $excludes)
|
||||||
|
(manage-minor-mode--disable $m)
|
||||||
|
(setq $switched (cons $m $switched))))
|
||||||
|
$restore-variable))))
|
||||||
|
(if (manage-minor-mode--buffer-p)
|
||||||
|
(progn
|
||||||
|
(with-current-buffer (manage-minor-mode--get-target-info 'buffer)
|
||||||
|
(bals)
|
||||||
|
(set-restore-variable))
|
||||||
|
(manage-minor-mode-refresh $switched 2 1)
|
||||||
|
(set-restore-variable))
|
||||||
|
(set-restore-variable)
|
||||||
|
(bals)))))
|
||||||
|
|
||||||
|
(defun manage-minor-mode-restore-from-bals ()
|
||||||
|
"Restore minor modes to before `manage-minor-mode-bals' happened."
|
||||||
|
(interactive)
|
||||||
|
(if (manage-minor-mode--buffer-p)
|
||||||
|
(let ($switched)
|
||||||
|
(with-current-buffer (manage-minor-mode--get-target-info 'buffer)
|
||||||
|
(mapc (lambda ($m)
|
||||||
|
(manage-minor-mode--enable $m)
|
||||||
|
(setq $switched (cons $m $switched)))
|
||||||
|
manage-minor-mode-modes-before-bals))
|
||||||
|
(manage-minor-mode-refresh $switched 2 1))
|
||||||
|
(mapc (lambda ($m)
|
||||||
|
(manage-minor-mode--enable $m))
|
||||||
|
manage-minor-mode-modes-before-bals)))
|
||||||
|
|
||||||
|
;; Mouse click minor-mode in mode-line to popup "Manage minor modes"
|
||||||
|
(defadvice popup-menu (before manage-minor-mode-add-for-popup-menu disable)
|
||||||
|
"Advice `popup-menu'."
|
||||||
|
(ad-set-arg 0 (append (ad-get-arg 0)
|
||||||
|
'((manage-minor-mode
|
||||||
|
menu-item "Manage minor modes"
|
||||||
|
(lambda () (interactive) (manage-minor-mode)))))))
|
||||||
|
|
||||||
|
(defadvice minor-mode-menu-from-indicator (around manage-minor-mode-add-mode-line-menu activate)
|
||||||
|
"Advice for `minor-mode-menu-from-indicator'."
|
||||||
|
(ad-enable-advice 'popup-menu 'before 'manage-minor-mode-add-for-popup-menu)
|
||||||
|
(ad-activate 'popup-menu)
|
||||||
|
ad-do-it
|
||||||
|
(ad-disable-advice 'popup-menu 'before 'manage-minor-mode-add-for-popup-menu)
|
||||||
|
(ad-activate 'popup-menu))
|
||||||
|
|
||||||
|
(provide 'manage-minor-mode)
|
||||||
|
;;; manage-minor-mode.el ends here
|
Reference in a new issue