2

たとえば、透明度を切り替える関数を取得するにはどうすればよいですか?トグルの可能な候補は、0%、85%、100%、またはそれらのうちの2つだけである可能性があります...

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

何が欠けている?

4

2 に答える 2

2

次のコードはEmacswikiから抜粋したものです

(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))

あなたは関数toggle-transparencyでそれをチェックすることができます

(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)))))
于 2012-09-12T08:20:46.730 に答える
2

これは、さまざまなアルファをループできるリングバージョンであり、プレフィックス引数を指定して呼び出されると、最後または最初のアルファに直接ジャンプします。

(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)))
于 2012-09-12T12:49:22.580 に答える