non-ascii support for the title editor

This commit is contained in:
nadrad 2022-09-15 18:37:21 +02:00
parent 52f81cbd02
commit a32f386b75

123
h-m-m
View file

@ -1088,16 +1088,30 @@ function insert_node(&$mm, $type)
function show_line(&$mm, $title, $cursor, $shift) function show_line(&$mm, $title, $cursor, $shift)
{ {
$output = $output = mb_substr($title,$shift,$mm['terminal_width']-1);
str_pad $output .= str_repeat( ' ' ,$mm['terminal_width'] - mb_strlen($output) );
(
substr($title,$shift,$mm['terminal_width']-1),
$mm['terminal_width']
)
;
$output = substr_replace( $output, invert_off, $cursor-$shift , 0); // showing the cursor
$output = substr_replace( $output, invert_on, $cursor-$shift-1, 0); $output =
mb_substr
(
$output
,0
,$cursor-$shift-1
)
.invert_on
.mb_substr
(
$output
,$cursor-$shift-1
,1
)
.invert_off
.mb_substr
(
$output
,$cursor-$shift
);
put(0,$mm['terminal_height'],$mm['active_node_color'].$output); put(0,$mm['terminal_height'],$mm['active_node_color'].$output);
} }
@ -1109,7 +1123,7 @@ function edit_node(&$mm, $rewrite = false)
if ($mm['active_node']==0 && $title=='root') $title=''; if ($mm['active_node']==0 && $title=='root') $title='';
$in = ''; $in = '';
$cursor = strlen($title)+1; $cursor = mb_strlen($title)+1;
$shift = max( 0, $cursor - $mm['terminal_width'] ); $shift = max( 0, $cursor - $mm['terminal_width'] );
show_line($mm, $title, $cursor, $shift); show_line($mm, $title, $cursor, $shift);
@ -1130,16 +1144,20 @@ function edit_node(&$mm, $rewrite = false)
} }
// up arrow and home // up arrow and home
elseif ($in=="\033\133\101" || $in=="\033\133\110") $cursor = 1; elseif ($in=="\033\133\101" || $in=="\033\133\110")
$cursor = 1;
// right arrow // right arrow
elseif ($in=="\033\133\103") $cursor = min( strlen($title)+1, $cursor+1); elseif ($in=="\033\133\103")
$cursor = min( mb_strlen($title)+1, $cursor+1);
// down arrow and end // down arrow and end
elseif ($in=="\033\133\102" || $in=="\033\133\106") $cursor = strlen($title)+1; elseif ($in=="\033\133\102" || $in=="\033\133\106")
$cursor = mb_strlen($title)+1;
// left arrow // left arrow
elseif ($in=="\033\133\104") $cursor = max(1, $cursor-1); elseif ($in=="\033\133\104")
$cursor = max(1, $cursor-1);
// ctrl+left and shift+left // ctrl+left and shift+left
elseif ($in=="\033\133\061\073\065\104" || $in=="\033\133\061\073\062\104") elseif ($in=="\033\133\061\073\065\104" || $in=="\033\133\061\073\062\104")
@ -1150,8 +1168,8 @@ function edit_node(&$mm, $rewrite = false)
( (
1, 1,
( (
strrpos($title,' ',$cursor-strlen($title)-3) !== false mb_strrpos($title,' ',$cursor-mb_strlen($title)-3) !== false
? strrpos($title,' ',$cursor-strlen($title)-3) + 2 ? mb_strrpos($title,' ',$cursor-mb_strlen($title)-3) + 2
: 1 : 1
) )
); );
@ -1159,15 +1177,15 @@ function edit_node(&$mm, $rewrite = false)
// ctrl+right and shift+right // ctrl+right and shift+right
elseif ($in=="\033\133\061\073\065\103" || $in=="\033\133\061\073\062\103") elseif ($in=="\033\133\061\073\065\103" || $in=="\033\133\061\073\062\103")
$cursor = $cursor =
$cursor > strlen($title) -2 $cursor > mb_strlen($title) -2
? strlen($title) + 1 ? mb_strlen($title) + 1
: min : min
( (
strlen($title)+1, mb_strlen($title)+1,
( (
strpos($title,' ',$cursor+1) !== false mb_strpos($title,' ',$cursor+1) !== false
? strpos($title,' ',$cursor+1) + 2 ? mb_strpos($title,' ',$cursor+1) + 2
: strlen($title) + 1 : mb_strlen($title) + 1
) )
); );
@ -1185,7 +1203,18 @@ function edit_node(&$mm, $rewrite = false)
{ {
if ($cursor>1) if ($cursor>1)
{ {
$title = substr_replace($title, '', $cursor-2, 1); $title =
mb_substr
(
$title
,0
,$cursor-2
)
.mb_substr
(
$title
,$cursor-1
);
$cursor--; $cursor--;
} }
} }
@ -1200,7 +1229,19 @@ function edit_node(&$mm, $rewrite = false)
// delete // delete
elseif ($in=="\033\133\63\176") elseif ($in=="\033\133\63\176")
{ {
$title = substr_replace($title, '', $cursor-1, 1); // $title = substr_replace($title, '', $cursor-1, 1);
$title =
mb_substr
(
$title
,0
,$cursor-1
)
.mb_substr
(
$title
,$cursor
);
} }
// enter // enter
@ -1215,7 +1256,7 @@ function edit_node(&$mm, $rewrite = false)
return; return;
} }
// pasting // ctrl+v
elseif ($in=="\026") elseif ($in=="\026")
{ {
$content = $content =
@ -1233,16 +1274,42 @@ function edit_node(&$mm, $rewrite = false)
) )
) )
); );
$title = substr_replace($title, $content, $cursor-1, 0);
$title =
mb_substr
(
$title
,0
,$cursor-1
)
.$content
.mb_substr
(
$title
,$cursor-1
);
$cursor += mb_strlen($content); $cursor += mb_strlen($content);
} }
// normal characters // normal characters
elseif (strlen($in)==1) else
{ {
if ($in=="\011") $in=' '; if ($in=="\011") $in=' ';
$title = substr_replace($title, $in, $cursor-1, 0); $title =
mb_substr
(
$title
,0
,$cursor-1
)
.$in
.mb_substr
(
$title
,$cursor-1
);
$cursor++; $cursor++;
} }