首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何取消日历中的一个日期--删除重叠

如何取消日历中的一个日期--删除重叠
EN

Stack Overflow用户
提问于 2013-12-13 01:36:54
回答 1查看 78关注 0票数 1

错误消息:let: Wrong type argument: overlayp, (#<overlay from 478 to 480 in *Calendar*>)

mouse-1成功地标记日历中的日期。内置函数只提供删除所有的覆盖,而不只是一个特定的日期。谁能帮我删除一个标记日期的覆盖--我在想这可能是mouse-2U。我想使用跳过语法-向前/向后,因为有些日期只有一位数字,有些有两位数字--光标可能在两位数字之间,或者在日期的两边。我想我们需要一个起点和终点。

代码语言:javascript
复制
(define-key calendar-mode-map [mouse-1] (lambda () (interactive)
  (calendar-mark-visible-date (calendar-cursor-to-date t))))

(define-key calendar-mode-map "U" (lambda () (interactive)
  (cond
    ((save-excursion (> 0 (skip-syntax-backward "w")))
      (skip-syntax-backward "w")
      (let ((beg (point)))
        (skip-syntax-forward "w")
          (let ((end (point)))
            (delete-overlay (overlays-in beg end)))))
    ((save-excursion (< 0 (skip-syntax-forward "w")))
      (skip-syntax-forward "w")
      (let ((end (point)))
        (skip-syntax-backward "w")
          (let ((beg (point)))
            (delete-overlay (overlays-in beg end))))))))

编辑(2013年12月12日):基于@Drew的有用答案的第一份工作草案。添加了mouse-set-point和交互式代码来支持上述功能。统一的键盘快捷键使mouse-1激活/禁用点处的覆盖--现在使用overlays-at

编辑(2014年1月1日):若要区分点处的一个或多个覆盖,请参见以下线程:How to distinguish between different overlays at point与该线程中的示例不同,取决于点上是否存在特定覆盖,可以执行不同的操作。

代码语言:javascript
复制
(defvar lawlist-calendar-face (make-face 'lawlist-calendar-face))
(set-face-attribute 'lawlist-calendar-face nil
  :background "LightCoral" :foreground "black")

(define-key calendar-mode-map [mouse-1] (lambda (event) (interactive "e")
  (mouse-set-point event)
  (if (not (overlays-at (point)))
    (calendar-mark-visible-date (calendar-cursor-to-date t) lawlist-calendar-face)
  (cond
    ;; cursor is one whitespace to the left of 1 to 9
    ((and
        (save-excursion (< 0 (skip-chars-forward " \t")))
        (not (save-excursion (< 0 (skip-syntax-forward "w")))))
      (save-excursion
        (let ((beg (point)))
          (skip-chars-forward " \t")
          (skip-syntax-forward "w")
            (let ((end (point)))
              (mapc 'delete-overlay (overlays-in beg end))))))
    ;; cursor is sandwiched between a digit on each side.
    ((and
        (save-excursion (> 0 (skip-syntax-backward "w")))
        (save-excursion (< 0 (skip-syntax-forward "w"))))
      (save-excursion
        (skip-syntax-backward "w")
        (let ((beg (point)))
          (skip-syntax-forward "w")
            (let ((end (point)))
              (mapc 'delete-overlay (overlays-in beg end))))))
    ;; cursor is to the far right of one or two digit dates
    ((and
        (save-excursion (> 0 (skip-syntax-backward "w")))
        (not (save-excursion (< 0 (skip-syntax-forward "w")))))
      (save-excursion
        (skip-syntax-backward "w")
        (let ((beg (point)))
          (skip-syntax-forward "w")
            (let ((end (point)))
              (mapc 'delete-overlay (overlays-in beg end))))))
    ;; cursor to the far left of one or two digits dates
    ((and
        (save-excursion (< 0 (skip-syntax-forward "w")))
        (not (save-excursion (> 0 (skip-syntax-backward "w")))))
      (save-excursion
        (skip-syntax-forward "w")
        (let ((end (point)))
          (skip-syntax-backward "w")
            (let ((beg (point)))
              (mapc 'delete-overlay (overlays-in beg end))))))))))
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-12-13 02:01:01

Wrt错误:

delete-overlay期望有一个覆盖作为它的参数。您正在向它传递一个覆盖列表(空的或非空的)。您应该遍历列表,例如,使用whiledolistmapc

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20557631

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档