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

Re: 「M-x」+「変換キー」 で落ちる?



In message Re: 「M-x」+「変換キー」 で落ちる?
 on Tue, 01 Nov 2005 00:39:47 +0900 (JST)
 Kyotaro HORIGUCHI <horiguti@xxxxxxxxxxx> wrote:

> 惜しいけどちょっと足りません.

> > > ということで、read-only な文字列がある場合には再変換を行なわないように
> > > する仕組を入れるべきなのではないかと考えます。
> > 
> > read_onlyの時は考慮していたのですが、ミニバッファは
> > current_bufferとは見なされないようです。
> > 
> > ミニバッファが選択されている時の処理を入れて見ました。

>  これだとミニバッファで本来可能な再変換もできなくなってしまいます.
>  これだけだと, 普通のバッファの 'read-only 属性でもこけるのが直っ
>  ていません.

気が付いていましたけど、ミニバッファは目をつぶってもらうつも
りでしました。;-P

普通のバッファのread-onlyに関しては、一回目に発行される
WM_IME_REPORTのときに、mw32_get_ime_reconversion_length()の方
で処理しているから全てmw32_get_ime_reconversion_length()に入
れてしまうほうが良い気がします。
 
手元のNTEmacsで一つまだ気になる点があります。
M-x [変換] ESC ESC ESC [変換]
で落ちてしまいます。

> -  str = Fbuffer_substring_no_properties (start, end);
> +  str = Fbuffer_substring (start, end);
> +  if (!NILP (Ftext_property_any (make_number (0),
> +				 Flength (str),
> +				 intern ("read-only"),
> +				 Qt,
> +				 str)))
> +    return FALSE;  /* Cannot signal here */
> +  
> +  str = Fsubstring_no_properties (str);

最後の
str = Fsubstring_no_properties (str);
で省略してある第3引数にゴミが入ってしまうようです。

結局、こんな感じでいかがでしょうか。

--- /home/kobayays/src/meadow/src/mw32ime.c.orig	2005-11-01 00:04:15.433708800 +0900
+++ /home/kobayays/src/meadow/src/mw32ime.c	2005-11-01 09:19:25.410717100 +0900
@@ -295,7 +295,15 @@
       end = Fpoint_marker ();
     }
 
-  str = Fbuffer_substring_no_properties (start, end);
+  str = Fbuffer_substring (start, end);
+  if (!NILP (Ftext_property_any (make_number (0),
+				 Flength (str),
+				 intern ("read-only"),
+				 Qt,
+				 str)))
+    return FALSE;  /* Cannot signal here */
+  
+  str = Fsubstring_no_properties (str, Qnil, Qnil);
 
   MW32_ENCODE_TEXT (str, Vw32_system_coding_system, &lpstr, &len);
   SET_PT_BOTH (pt, pt_byte);

-- 
KOBAYASHI Yasuhiro <kobayays@xxxxxxxxxxxxxx>