在emacs中创建切换功能

时间:2012-09-12 08:06:10

标签: function emacs transparency toggle

如何获得一个切换透明度的函数? 切换的可能候选者可以是0%,85%,100%或者仅仅是其中的2个......

    (defun transparency-toggle ()
    "Toggle transparency."
    (interactive)
    (add-to-list 'default-frame-alist '(alpha 85 50))
    )

缺少什么?

2 个答案:

答案 0 :(得分:2)

以下代码取自Emacs wiki

(eval-when-compile (require 'cl))
(set-frame-parameter nil 'alpha '(100 100))

(defun toggle-transparency (unused)
  (interactive "P")
  (if (/=
       (cadr (frame-parameter nil 'alpha))
       100)
      (set-frame-parameter nil 'alpha '(100 100))
    (set-frame-parameter nil 'alpha '(85 50))))


(global-set-key (kbd "C-c t") 'toggle-transparency)

编辑:回答你的问题。如果你没有初始化一个框架参数alpha,它将是nill。所以,如果你不想要代码:

(set-frame-parameter nil 'alpha '(100 100))

你可以在功能切换透明度

中查看它
(defun toggle-transparency (unused)
  (interactive "P")
  (let ((curr-alpha (frame-parameter nil 'alpha)))
    (if (or (null curr-alpha) (/= (cadr curr-alpha) 100))
        (set-frame-parameter nil 'alpha '(100 100))
      (set-frame-parameter nil 'alpha '(50 50)))))

答案 1 :(得分:2)

这是一个环形版本,可以让你循环遍历各种alpha,并在使用前缀参数调用时直接跳转到最后一个或第一个alpha:

(defun ring-transparency (arg)
  (interactive "P")
  (let* ((ring '(100 50 25 0))
         (current (frame-parameter nil 'alpha))
         (last (car (last ring)))
         (next (if arg
                   (if (equal current (car ring)) last (car ring))
                 (or (cadr (member current ring)) (car ring)))))
    (set-frame-parameter nil 'alpha next)))