Emacs窗体透明化

昨天朋友发来一个代码给我,可以让 windows 上的 emacs 窗体像 X 或苹果那样实现半透 明。代码并不复杂: 

(set-frame-parameter (selected-frame) 'alpha (list 85 50)) 
(add-to-list 'default-frame-alist (cons 'alpha (list 85 50))) 

然后经过一番努力,我写了一个切换功能,按f7进入透明,按f8退出透明状态。 

(defun transform-window (a ab) 
  (set-frame-parameter (selected-frame) 'alpha (list a ab)) 
  (add-to-list 'default-frame-alist (cons 'alpha (list a ab))) 

(global-set-key [(f7)] (lambda() 
                         (interactive) 
                         (transform-window 85 55))) 

(global-set-key [(f8)] (lambda() 
                         (interactive) 
                         (transform-window 100 100))) 

但是这种东西两键切换显然不够友好,于是我把它改成了一键切换。 

(setq is-alpha nil) 

(defun transform-window (a ab) 
  (set-frame-parameter (selected-frame) 'alpha (list a ab)) 
  (add-to-list 'default-frame-alist (cons 'alpha (list a ab))) 

(global-set-key [(f8)] (lambda() 
                         (interactive) 
                         (if is-alpha 
                             (transform-window 100 100) 
                           (transform-window 85 50)) 
                         (setq is-alpha (not is-alpha)))) 

后来复读了一下代码,觉得还有改进的余地。首先,只是一个透明度切换,没必要占用两个 快捷键,对于我这种用 Emacs 写 N 
种东西的人,快捷键是种相当宝贵的资源。再一点,目 前的设计只能支持两种透明度,还多用了一个全局变量。 

在 Feather 兄弟的指点下,我突击了一下 emacs lisp ,写出了这样的版本: 

;; transform window 
;; Anchor: March Liu (刘鑫) <march....@gmail.com> 
;; 
;; This is a script to set emacs window's alpha value. 
;; It work well on windows xp and vista with EmacsWin32 
;; useage: add below line in your .emacs 
;; 
;; (load-file "path/alpha-window.el") 
;; 
;; you can define your alpha-list to set the transform combine 
;; bind key with below code: 
;; 
;; (global-set-key [(f11)] 'loop-alpha) 

(setq alpha-list '((100 100) (95 65) (85 55) (75 45) (65 35))) 

(defun loop-alpha () 
  (interactive) 
  (let ((h (car alpha-list)))                ;; head value will set to 
    ((lambda (a ab) 
       (set-frame-parameter (selected-frame) 'alpha (list a ab)) 
       (add-to-list 'default-frame-alist (cons 'alpha (list a ab))) 
       ) (car h) (car (cdr h))) 
    (setq alpha-list (cdr (append alpha-list (list h)))) 
    ) 

这个脚本的特点如下: 

   - 单命令轮转任意多个状态 
   - 可以用 (global-set-key [(f11)] 'loop-alpha) 把 loop-alpha 绑定到快捷键上 
   - 我设定了四个透明度组合,你可以在自己的 .emacs 里重定义 alpha-list ,设定自己 的透明度方案 

目前我只在windows上试验过了,X窗口下如果没有开透明效果应该是不行的。当然,X本身 的半透明就很好用了,我在X上从来没想过需要这么个功能==; 

应该只能用于图形界面:P。 

-- 
话题越大,废话越多;名字越火星,问题越脑残。 
…… 

劉鑫 
March.Liu 


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值