[Message Prev][Message Next][Thread Prev][Thread Next][Message Index][Thread Index]

Re: clipboard and bitmap



>>>>> meadow-users-jp の No. 1756
>>>>> Message-Id: <199912161216.VAA11845@xxxxxxxxxxxxxxxxx> で、
>>>>> "Shin" == Shin Miyazaki <shinm@xxxxxxxxx>さま曰く...

Shin> うーん、ここら辺は emacs の内部処理が私にはわからないので何とも
Shin> 言えないのです。件のテキストを Meadow 上でペーストした文書を
Shin> Shift_JIS で保存しようとすると

>> These can't be encoded safely by the coding system sjis.
>> Please select one from the following safe coding systems:

これは、 encode 中に判定しているのではなく、 encode する前に判定していま
すので、ちょっと事情が違います。

;; select-safe-coding-system-function を参照してください。

Shin> てなことを言われるんで、丸っきり判定出来ないものでも無いかとは思う
Shin> のですが。

>> w32-set-clipboard-data を再定義してしまえばできなくもなさそうですが、
>> そうすると Meadow to Meadow のルートでも、 Shift_JIS に encode できな
>> いものがコピーできなくなってしまうと思いますので、なかなか悩ましいと
>> ころです。

Shin> この点は大丈夫じゃないでしょうか。mw32clipbrd.c をちらっと覗いて見
Shin> たら、w32_mule_clipboard_format に入るものは CF_TEXT に入る、
Shin> encode されたものとは無関係なようですし。

まあ、 C level で変更すればそれこそ何でもありだとは思いますが...

;; 宗教上の理由から今のところ本業以外では C 言語に関わることができません。 
;; ;-)

Elisp 的に w32-set-clipboard-data を再定義する(私がいう再定義というのは
こちらの話です。)のであれば、 defadvice 等で、元々の w32-set-clipboard-data へ
の入力文字列を、あらかじめいじってしまうという方法しかとれないと思います
ので、やはり無理ではないでしょうか?

-- 
鈴木圭一 / keiichi@xxxxxxxxx
PGP finger print (DH/DSS)
0B32 B37E 6DE9 3BC1 68A4  4089 7AAF 2B03 ECBD 614B

(defadvice w32-set-clipboard-data
  (before remove-invalid-chars-for-encoding activate)
  (let* ((charsets (find-charset-string string))
	 (safe-coding-systems (find-coding-systems-for-charsets charsets))
	 (coding (or code w32-clipboard-coding-system)))
    (unless (and coding
		 (memq (coding-system-base coding) safe-coding-systems))
      (let ((safe-charsets (coding-system-get coding 'safe-charsets)))
	(with-temp-buffer
	  (insert string)
	  (goto-char (point-min))
	  (while (re-search-forward "[^\000-\177]" nil t)
	    (backward-char)
	    (if (memq (charset-after) safe-charsets)
		(forward-char)
	      (while (null (memq (charset-after) safe-charsets))
		(delete-char 1))))
	  (setq string (buffer-string)))))))