• R/O
  • SSH
  • HTTPS

ttssh2: Commit


Commit MetaInfo

Révision8416 (tree)
l'heure2019-11-28 00:26:28
Auteurzmatsuo

Message de Log

URL強調上で文字を入力したとき不要な描画が発生しないようにした

Change Summary

Modification

--- branches/unicode_buf/teraterm/teraterm/buffer.c (revision 8415)
+++ branches/unicode_buf/teraterm/teraterm/buffer.c (revision 8416)
@@ -2899,6 +2899,33 @@
28992899 #endif
29002900
29012901 #if UNICODE_INTERNAL_BUFF
2902+/**
2903+ * カーソル位置とのURLアトリビュートの先頭との距離を計算する
2904+ */
2905+int get_url_len(int cur_x, int cur_y)
2906+{
2907+ int sp = cur_x + cur_y * NumOfColumns;
2908+ int cp;
2909+ int dp;
2910+ {
2911+ int p = sp;
2912+ p--;
2913+ while (p > 0) {
2914+ int sy = p / NumOfColumns;
2915+ int sx = p % NumOfColumns;
2916+ int ptr = GetLinePtr(PageStart + sy) + sx;
2917+ if ((AttrBuff[ptr] & AttrURL) == 0) {
2918+ break;
2919+ }
2920+ p--;
2921+ }
2922+ sp = p;
2923+ }
2924+ cp = cur_x + cur_y * NumOfColumns;
2925+ dp = cp - sp;
2926+ return dp;
2927+}
2928+
29022929 static const struct schemes_t {
29032930 const wchar_t *str;
29042931 int len;
@@ -3081,6 +3108,9 @@
30813108 }
30823109 }
30833110
3111+/**
3112+ * カーソル位置からURL強調を行う
3113+ */
30843114 static void mark_url_w(int cur_x, int cur_y)
30853115 {
30863116 buff_char_t *b = &CodeLineW[cur_x];
@@ -3095,13 +3125,7 @@
30953125 int ey;
30963126 int len;
30973127
3098- // カーソル位置がURL
3099- if ((AttrLine[x] & AttrURL) != 0) {
3100- mark_url_line_w(cur_x, cur_y);
3101- return;
3102- }
3103-
3104- // 1つ前のキャラクタがURL?
3128+ // 1つ前のセルがURL?
31053129 if (x == 0) {
31063130 // 一番左の時は、前の行から継続していて、前の行の最後がURLだった時
31073131 if ((AttrLine[0] & AttrLineContinued) != 0) {
@@ -3135,15 +3159,31 @@
31353159
31363160 if (prev == TRUE) {
31373161 if (next == TRUE) {
3162+ if (isURLchar(u32)) {
3163+ // URLにはさまれていて、URLになりえるキャラクタ
3164+ int ptr = GetLinePtr(PageStart + cur_y) + cur_x;
3165+ AttrBuff[ptr] |= AttrURL;
3166+ return;
3167+ }
31383168 // 1line検査
31393169 mark_url_line_w(cur_x, cur_y);
31403170 return;
31413171 }
3142- if (isURLchar(u32)) {
3143- // URLを伸ばす
3144- AttrLine[x] |= AttrURL;
3172+
3173+ len = get_url_len(cur_x, cur_y);
3174+ if (len >= 9) {
3175+ // URLアトリビュートがついている先頭から、
3176+ // 9文字以上離れている場合は
3177+ // 文字が上書きされてもURLが壊れることはない
3178+ // → カーソル位置にURLアトリビュートをつける
3179+ if (isURLchar(u32)) {
3180+ // URLを伸ばす
3181+ AttrLine[x] |= AttrURL;
3182+ }
31453183 return;
31463184 }
3185+ mark_url_line_w(cur_x, cur_y);
3186+ return;
31473187 }
31483188
31493189 // '/' が入力されたら調べ始める
Afficher sur ancien navigateur de dépôt.