如何设置一个键绑定,使Emacs的透明度随我意愿改变?

5
我希望在Emacs中有一个命令,可以让它变得透明或不透明(参考精彩的问题,指出在Emacs中透明度是可能的,以及链接到的EmacsWiki页面下面的代码)。
EmacsWiki的代码将“C-c t”设置为切换先前设置的透明度。
;;(set-frame-parameter (selected-frame) 'alpha '(<active> [<inactive>]))  
(set-frame-parameter (selected-frame) 'alpha '(85 50))  
(add-to-list 'default-frame-alist '(alpha 85 50))

enter code here(eval-when-compile (require 'cl))  
(defun toggle-transparency ()  
(interactive)  
(if (/= 
    (cadr (find 'alpha (frame-parameters nil) :key #'car)) 
    100)  
   (set-frame-parameter nil 'alpha '(100 100))
 (set-frame-parameter nil 'alpha '(85 60))))  
 (global-set-key (kbd "C-c t") 'toggle-transparency)

我想做的是在Emacs中选择透明度。如果可能,我希望有一个命令,例如我键入“C-c t N”(其中N是透明度百分比)用于活动窗口,然后使用“M-c t N”用于非活动窗口。如果不能这样做,那么也许有一个命令,如果我键入“C-c t”,它会要求我输入数字以给出活动窗口的不透明度(使用“M-c t”对非活动窗口进行相同的操作)。感谢您的时间:)
下面只是一些评论,如果您不感兴趣,回答问题时可以忽略它们:我真的想这样做,因为当我告诉我的主管我正在学习Emacs时,他说TexShop更好,而且我正在使用80年代的软件。我向他展示了Emacs的奇妙之处,他说TexShop拥有所有这些功能并且更多。我匹配了他向我展示的一切,除了透明度(尽管他无法匹配来自preview-latex的Emacs内预览)。我偶然发现了透明度的设置,现在我想向他展示Emacs的强大!
我想对你们中的一些人来说这将是小菜一碟,即使我可以通过花足够的时间学习lisp或阅读相关内容来完成它,但我不是程序员,而且我只使用Emacs和Mac已经一个星期了。我已经迷失了!所以提前感谢您的时间和帮助 - 我最终会学习lisp的!
编辑:我的主管使用TextMate而不是TeXShop。现在更有意义了吗?

你的老板错了:Emacs 不是来自80年代。微软的Windows才是80年代的软件!虽然我对80年代的软件一般都没什么意见。 ;) - Marcel Korpel
哈,它甚至比那还要老!也许这就是为什么他如此喜欢他的Mac...无论如何,TexShop中的所有功能都只是从Emacs中“复制”而来。他们只是为已经存在并且更好的东西收费,因为很多人为它做出了贡献。只要再给我几个月时间,当我足够熟练掌握Emacs时,他会后悔没有使用它! :P - Vivi
抱歉,我意识到我给出了错误的软件名称。我的主管使用的是TextMate,而不是TeXShop... - Vivi
来自TextMate网站(macromates.com):由一位被Mac平台的易用性和优雅所吸引的UNIX极客创建,TextMate被称为Emacs和OS X的结晶,并且已经引发了无数对Windows和Linux移植版本的请求,但是TextMate仍然是Mac独有的,而这正是我们喜欢的! - Vivi
1个回答

6
(defun set-frame-alpha (arg &optional active)
  (interactive "nEnter alpha value (1-100): \np")
  (let* ((elt (assoc 'alpha default-frame-alist))
         (old (frame-parameter nil 'alpha))
         (new (cond ((atom old)     `(,arg ,arg))
                    ((eql 1 active) `(,arg ,(cadr old)))
                    (t              `(,(car old) ,arg)))))
    (if elt (setcdr elt new) (push `(alpha ,@new) default-frame-alist))
    (set-frame-parameter nil 'alpha new)))
(global-set-key (kbd "C-c t") 'set-frame-alpha)

对于活动框架,请使用C-c t,对于非活动框架,请使用C-u C-c t

编辑:

使效果跨会话保持的一种方法是启用 desktop-save-mode 并通过自定义界面将 default-frame-alist 添加到 desktop-globals-to-save 中:M-x customize-group RET desktop


我进行了测试,首先是没有任何其他设置,然后加入了我在问题中提到的前三行代码,接着是前四行(不包括最后一行的“;;”)。在所有这些选项中,问题是无论我做什么设置,在关闭Emacs并返回到完全不透明(第一个选项)或定义为85 50时,设置都会消失。我确实保存了选项,采用了框架参数作为默认值,但是设置仍然在关闭程序时丢失。有没有办法使设置永久保存,或者我做错了什么? - Vivi
1
我希望我在编辑中回答了你的问题。请注意,我还对代码进行了一些更改。 - huaiyuan
好的,我使用了你写的代码,然后选择了框架作为默认选项并保存了选项,使用菜单选项而不是你在底部写的快捷键,只是因为我还不熟悉快捷键,想尝试一下菜单点击选项以防它能够工作。嗯,它确实起作用了!现在完美无缺,非常感谢你!我会在编辑中使用你说的话。我也很高兴有两个代码,这样我就可以比较两者并开始学习Lisp。非常感谢你的帮助,谢谢 :) - Vivi
我还没有尝试那一部分,因为我怀疑如果我启用了desktop-save-mode,那么我的更改将会自动保存,这是正确的吗?如果是的话,我还没有准备好这样做,因为我只使用Emacs一个星期,而且我已经玩了一些面部定制(和其他东西),我担心如果我后悔了,我将无法撤消我所做的事情,所以我大多选择不保存我的选项。我现在将检查这些变量的作用。再次感谢! - Vivi
感谢您再次更新代码 :) 大部分都是为了让代码更加优雅,对吧? - Vivi
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接