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

[FDclone-users:00624] Re: ファンクションキーについて



 しらいです。

In Message-Id <20061016052209.99687.qmail@web2812.mail.bbt.yahoo.co.jp>
        Marijuana <god_marijuana@yahoo.co.jp>さんwrites:
> はじめまして、Marijuanaです。

> 主にWindows機からsshで利用しているのですが、
> 2.08d以降、一部のsshクライアントでF5以降のファンクションキーが効かないよ
> うになってしまいました。
> Shiftキーを押した場合は問題なく動作します。

 ふむ。確かに環境によってはそうなるようですね。termcap のエ
ントリに依存するので ssh か telnet かは関係ないようです。
 termcap のエントリに k5 だけ存在して l5 が存在しない時に再
現します。そもそも F5 の key sequence は k5 で表すのが正しい
んですが、たまに l5 に書いてる環境があるんですよね。
 l5 は F5 用のラベル名なのでここに key sequence を書くのは
間違いなんですが、歴史的経緯により FDclone では l5 の方を優
先してますね。
 k5 の方は優先度が低いというだけで無効になってる訳じゃない
んですが、こういう bug が生じた時にたまたま先に犠牲になって
しまったと。

 ともあれ、以下の patch で解消すると思います。

---- Cut Here ----
diff -u ../old/FD-2.09/term.c ./term.c
--- ../old/FD-2.09/term.c	Tue Aug 22 00:00:00 2006
+++ ./term.c	Tue Oct 17 01:04:14 2006
@@ -3005,7 +3005,8 @@
 			return(key);
 		}
 		p = &(p -> next[j]);
-		if (keyseq[p -> key].len == 1) return(keyseq[p -> key].code);
+		if (keyseq[p -> key].len == 1)
+			return(keyseq[p -> key].code & 0777);
 	}
 	else {
 		for (j = 0; j < p -> num; j++)
@@ -3013,7 +3014,7 @@
 		if (j >= p -> num) return(key);
 		p = &(p -> next[j]);
 		if (keyseq[p -> key].len == 1)
-			return(keyseq[p -> key].code);
+			return(keyseq[p -> key].code & 0777);
 		if (!kbhit2(WAITKEYPAD * 1000L) || (ch = getch2()) == EOF)
 			return(key);
 	}
@@ -3024,7 +3025,7 @@
 		if (j >= p -> num) break;
 		p = &(p -> next[j]);
 		if (keyseq[p -> key].len == i + 1)
-			return(keyseq[p -> key].code);
+			return(keyseq[p -> key].code & 0777);
 		if (!kbhit2(WAITKEYPAD * 1000L) || (ch = getch2()) == EOF)
 			break;
 	}
---- Cut Here ----


> sshクライアントによっては問題なく利用出来るのですが、これは仕様変更による
> ものでしょうか?

 そんな厭味な言い方しなくたって bug fix しますってば :-)

 真面目な話、表に見えるような仕様変更があった場合は大概 man
page なり document なりでその旨表明しますので、そういう表記
がなければ仕様変更はないものと思って下さい。
 明文化しない仕様変更もたまにあるかも知れませんが、そういう
のはどっちの仕様でも誰も気にしない程度の些細な変更であって、
少なくとも何かが出来なくなったり出来るようになったりしたら、
変更点をどこかに書いています。
 また、基本的には revision up では仕様変更はしませんので、
major/minor version up の時以外に何かが出来ないようになった
としたら、それは大概 bug によるものだと思っていいでしょう。

                                               しらい たかし