[Top][All Lists]

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Question about copy-region-as-kill

From: Per Abrahamsen
Subject: Re: Question about copy-region-as-kill
Date: Tue, 09 Apr 2002 17:26:36 +0200
User-agent: Gnus/5.090006 (Oort Gnus v0.06) Emacs/21.1 (sparc-sun-solaris2.8)

John Wiegley <address@hidden> writes:

>>>>>> On Mon Apr  8, Stefan writes:
>> I think this points to a good compromise: strip any property whose
>> value is the same across the whole copied text.
> This still does not solve the problem of copying the read-only
> property that's attached to Eshell prompts.
> Why can't a mode author decide to inhibit property copying in his
> buffer? 

Gnus does that for message buffers:

>From message-mode:

  ;; Mmmm... Forbidden properties...
  (add-hook 'after-change-functions 'message-strip-forbidden-properties
            nil 'local)

The implementation of message-strip-forbidden-properties:

(defcustom message-strip-special-text-properties t
  "Strip special properties from the message buffer.

Emacs has a number of special text properties which can break message
composing in various ways.  If this option is set, message will strip
these properties from the message composition buffer.  However, some
packages requires these properties to be present in order to work.
If you use one of these packages, turn this option off, and hope the
message composition doesn't break too bad."
  :group 'message-various
  :type 'boolean)

(defconst message-forbidden-properties
  ;; No reason this should be clutter up customize.  We make it a
  ;; property list (rather than a list of property symbols), to be
  ;; directly useful for `remove-text-properties'.
  '(field nil read-only nil intangible nil invisible nil
          mouse-face nil modification-hooks nil insert-in-front-hooks nil
          insert-behind-hooks nil point-entered nil point-left nil)
  ;; Other special properties:
  ;; category, face, display: probably doesn't do any harm.
  ;; fontified: is used by font-lock.
  ;; syntax-table, local-map: I dunno.
  ;; We need to add XEmacs names to the list.
  "Property list of with properties.forbidden in message buffers.
The values of the properties are ignored, only the property names are used.")

(defun message-tamago-not-in-use-p (pos)
  "Return t when tamago version 4 is not in use at the cursor position.
Tamago version 4 is a popular input method for writing Japanese text.
It uses the properties `intangible', `invisible', `modification-hooks'
and `read-only' when translating ascii or kana text to kanji text.
These properties are essential to work, so we should never strip them."
  (not (and (boundp 'egg-modefull-mode)
            (symbol-value 'egg-modefull-mode)
            (or (memq (get-text-property pos 'intangible)
                      '(its-part-1 its-part-2))
                (get-text-property pos 'egg-end)
                (get-text-property pos 'egg-lang)
                (get-text-property pos 'egg-start)))))

(defun message-strip-forbidden-properties (begin end &optional old-length)
  "Strip forbidden properties between BEGIN and END, ignoring the third arg.
This function is intended to be called from `after-change-functions'.
See also `message-forbidden-properties'."
  (when (and message-strip-special-text-properties
             (message-tamago-not-in-use-p begin))
    (remove-text-properties begin end message-forbidden-properties)))

reply via email to

[Prev in Thread] Current Thread [Next in Thread]