【问题标题】:Emacs: How to cascade all new frames?Emacs:如何级联所有新框架?
【发布时间】:2014-09-12 17:03:51
【问题描述】:

我的 Emacs 默认新框架设置为

(setq default-frame-alist
      '((top . 150) (left . 400)
        (width . 120) (height . 50)))

有没有办法编写一个函数来将每个新帧在顶部和左侧偏移 5 个单位,这样每个新帧就不会完美地叠加在一起?换句话说,我想级联所有新帧。

我的系统是带有 Emacs 24.3.1 的 OS X

【问题讨论】:

    标签: emacs


    【解决方案1】:

    建议你修改default-frame-alist中的before-make-frame-hook

    (add-hook 'before-make-frame-hook 'cascade-default-frame-alist)
    (defun cascade-default-frame-alist ()
      (setq default-frame-alist
            (mapcar (lambda (kv)
                      (if (memq (car kv) '(top left))
                          (cons (car kv) (+ 5 (cdr kv)))
                          kv))
                    default-frame-alist)))
    

    如果要原地修改default-frame-alist,需要create it with list instead of quote

    (setq default-frame-alist (list (cons 'top 150) (cons 'left 400)
                                    (cons 'width 120) (cons 'height 50)))
    (defun cascade-default-frame-alist ()
      (dolist (kv default-frame-alist)
        (when (memq (car kv) '(top left))
          (setcdr kv (+ 5 (cdr kv))))))
    

    【讨论】:

    • 第二个就地版本在我的系统上不起作用。 Emacs 警告我“错误的类型参数:integerp, (50)。”我正在挖掘您提供的链接。
    • 对不起,我的错,现在应该修复
    • @sds 我的 elisp 经验有限,我无法理解 (mapcar (lambda (kv) 部分(第一个块)在哪里。 kv 值来自哪里?这怎么能行?
    • 感谢您指出这一点。 Lambda 不会在任何地方获取kv,而是mapcardefault-frame-alist 中提取它并将其提供给lambda。不错!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-12-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多