mirror of
https://github.com/nadrad/h-m-m.git
synced 2024-06-01 02:42:11 +02:00
non-ascii support for the title editor
This commit is contained in:
parent
52f81cbd02
commit
a32f386b75
123
h-m-m
123
h-m-m
|
@ -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++;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue