FC2ブログ

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

konsoleでのVTE_CJK_WIDTH

konsoleでSKKの▽や▼がきれいに表示できないので、konsoleのパッチを作りました。
単純にkonsole_wcwidthをkonsole_wcwidth_cjkに置き換えるだけだとカーネルでのmake menuconfigの画面の
表示が崩れてしまうので、崩れないようにもしてみました。


diff --git a/konsole-4.9.98/src/Screen.cpp b/konsole-4.9.98/src/Screen.cpp
index 816affe..63db2ec 100644
--- a/konsole-4.9.98/src/Screen.cpp
+++ b/konsole-4.9.98/src/Screen.cpp
@@ -623,7 +623,7 @@ void Screen::displayCharacter(unsigned short c)
// We indicate the fact that a newline has to be triggered by
// putting the cursor one right to the last column of the screen.

- int w = konsole_wcwidth(c);
+ int w = konsole_wcwidth_cjk(c);
if (w < 0)
return;
else if (w == 0) {
diff --git a/konsole-4.9.98/src/TerminalCharacterDecoder.cpp b/konsole-4.9.98/sr
c/TerminalCharacterDecoder.cpp
index 0615d5d..2f0b161 100644
--- a/konsole-4.9.98/src/TerminalCharacterDecoder.cpp
+++ b/konsole-4.9.98/src/TerminalCharacterDecoder.cpp
@@ -127,7 +127,7 @@ void PlainTextDecoder::decodeLine(const Character* const cha
racters, int count,
// of `dialog --infobox "qwe" 10 10` .
if (characters[i].isRealCharacter || i <= realCharacterGuard) {
plainText.append(QChar(characters[i].character));
- i += qMax(1, konsole_wcwidth(characters[i].character));
+ i += qMax(1, konsole_wcwidth_cjk(characters[i].character));
} else {
++i; // should we 'break' directly here?
}
diff --git a/konsole-4.9.98/src/konsole_wcwidth.cpp b/konsole-4.9.98/src/konsole
_wcwidth.cpp
index a2a3309..2f15fe2 100644
--- a/konsole-4.9.98/src/konsole_wcwidth.cpp
+++ b/konsole-4.9.98/src/konsole_wcwidth.cpp
@@ -165,7 +165,7 @@ int konsole_wcwidth_cjk(quint16 ucs)
{ 0x02D0, 0x02D0 }, { 0x02D8, 0x02DB }, { 0x02DD, 0x02DD },
{ 0x0391, 0x03A1 }, { 0x03A3, 0x03A9 }, { 0x03B1, 0x03C1 },
{ 0x03C3, 0x03C9 }, { 0x0401, 0x0401 }, { 0x0410, 0x044F },
- { 0x0451, 0x0451 }, { 0x2010, 0x2010 }, { 0x2013, 0x2016 },
+ { 0x0451, 0x0451 }, /* { 0x2010, 0x2010 }, { 0x2013, 0x2016 },
{ 0x2018, 0x2019 }, { 0x201C, 0x201D }, { 0x2020, 0x2021 },
{ 0x2025, 0x2027 }, { 0x2030, 0x2030 }, { 0x2032, 0x2033 },
{ 0x2035, 0x2035 }, { 0x203B, 0x203B }, { 0x2074, 0x2074 },
@@ -186,7 +186,7 @@ int konsole_wcwidth_cjk(quint16 ucs)
{ 0x2295, 0x2295 }, { 0x2299, 0x2299 }, { 0x22A5, 0x22A5 },
{ 0x22BF, 0x22BF }, { 0x2312, 0x2312 }, { 0x2460, 0x24BF },
{ 0x24D0, 0x24E9 }, { 0x2500, 0x254B }, { 0x2550, 0x2574 },
- { 0x2580, 0x258F }, { 0x2592, 0x2595 }, { 0x25A0, 0x25A1 },
+ { 0x2580, 0x258F }, { 0x2592, 0x2595 }, */ { 0x25A0, 0x25A1 },
{ 0x25A3, 0x25A9 }, { 0x25B2, 0x25B3 }, { 0x25B6, 0x25B7 },
{ 0x25BC, 0x25BD }, { 0x25C0, 0x25C1 }, { 0x25C6, 0x25C8 },
{ 0x25CB, 0x25CB }, { 0x25CE, 0x25D1 }, { 0x25E2, 0x25E5 },
@@ -195,7 +195,7 @@ int konsole_wcwidth_cjk(quint16 ucs)
{ 0x2640, 0x2640 }, { 0x2642, 0x2642 }, { 0x2660, 0x2661 },
{ 0x2663, 0x2665 }, { 0x2667, 0x266A }, { 0x266C, 0x266D },
{ 0x266F, 0x266F }, { 0x300A, 0x300B }, { 0x301A, 0x301B },
- { 0xE000, 0xF8FF }, { 0xFFFD, 0xFFFD }
+ { 0xE000, 0xF8FF }, { 0xFFFD, 0xFFFD }
};

/* binary search in table of non-spacing characters */
@@ -210,6 +210,6 @@ int string_width(const QString& text)
{
int w = 0;
for (int i = 0; i < text.length(); ++i)
- w += konsole_wcwidth(text[i].unicode());
+ w += konsole_wcwidth_cjk(text[i].unicode());
return w;
}

スポンサーサイト
検索フォーム
RSSリンクの表示
リンク
ブロとも申請フォーム

この人とブロともになる

QRコード
QR
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。