代码之家  ›  专栏  ›  技术社区  ›  VitoshKa

如何使emacs中的无形文本被删除命令完全删除?

  •  1
  • VitoshKa  · 技术社区  · 15 年前

    delete-char backward-delete-char . 有什么简单的方法吗?

    (put-text-property (point-at-bol) (point-at-eol) 'intangible t)
    

    kill-word backward-kill-word *-char 命令执行相同的操作。

    在我正在构建的用户界面中,一些关键文本是无形的。所以当用户按下 德尔 ( )就在隐藏的、无形的文本之后(之前),整个文本应该消失。

    谢谢!

    1 回复  |  直到 15 年前
        1
  •  1
  •   Trey Jackson    15 年前

    使用没有任何初始化文件的Emacs,以及 (put-text... 你提供的代码,我可以删除字符开头的行与 M-x删除字符 ( C-d公司 M-x向后删除字符 ( 德尔 delete-backward-char )).

    问题澄清后编辑 :

    (defadvice delete-char (around delete-char-intangible activate)
      "when about to delete a char that's intangible, delete the whole region
    Only do this when #chars is 1"
      (if (and (= (ad-get-arg 0) 1)
               (get-text-property (point) 'intangible))
          (kill-region (point) (save-excursion (forward-char 1) (point)))
        ad-do-it))
    
    (defadvice delete-backward-char (around delete-backward-char-intangible activate)
      "when about to delete a char that's intangible, delete the whole region
    Only do this interactively and when #chars is 1"
      (if (and (= (ad-get-arg 0) 1) (> (point) (point-min))
               (get-text-property (- (point) 1) 'intangible))
          (kill-region (point) (save-excursion (backward-char 1) (point)))
        ad-do-it))
    

    通知检查以确保使用参数1调用命令,只有这样才能删除整个无形区域,否则它的行为正常。