Вот рабочая реализация того, что, я думаю, вы пытались сделать:
(global-set-key [(f8)] 'loop-alpha)
(defvar alpha-list '((100 100) (95 65) (85 55) (75 45) (65 35)))
(defun next-alpha ()
(let ((current-alpha
(or (frame-parameter (selected-frame) 'alpha)
(first alpha-list)))
(lst alpha-list))
(or (second
(catch 'alpha
(while lst
(when (equal (first lst) current-alpha)
(throw 'alpha lst))
(setf lst (cdr lst)))))
(first alpha-list))))
(defun loop-alpha ()
(interactive)
(let ((new-alpha (next-alpha))
(current-default (assoc 'alpha default-frame-alist)))
(set-frame-parameter (selected-frame) 'alpha new-alpha)
(if current-default
(setcdr current-default new-alpha)
(add-to-list 'default-frame-alist (cons 'alpha new-alpha)))))
Обратите внимание, что любая написанная вами версия, переопределяющая alpha-list
, будет вести себя очень странно с несколькими кадрами.Я бы объяснил, что не так с вашим кодом, но я, честно говоря, не мог понять, что он должен был делать.Обратите внимание, что это было бы несколько проще написать, если бы я сначала позволил себе (require 'cl)
, но я думаю, что этот код должен работать - он работает здесь в любом случае!