mirror of
https://github.com/urbit/shrub.git
synced 2024-12-21 01:41:37 +03:00
dill: support 2d %hop
Instead of confining you to just the bottom row. 0,0 is bottom left. Doesn't behave exactly as expected for non-zero column coordinates yet, but all in due time.
This commit is contained in:
parent
3ad0c4e1d0
commit
5d8b44ccbc
@ -20,7 +20,8 @@
|
|||||||
?- -.blit
|
?- -.blit
|
||||||
%bel b+&
|
%bel b+&
|
||||||
%clr b+&
|
%clr b+&
|
||||||
%hop (numb p.blit)
|
%hop ?@ p.blit (numb p.blit)
|
||||||
|
(pairs 'row'^(numb r.p.blit) 'col'^(numb c.p.blit) ~)
|
||||||
%lin a+(turn p.blit |=(c=@c s+(tuft c)))
|
%lin a+(turn p.blit |=(c=@c s+(tuft c)))
|
||||||
%nel b+&
|
%nel b+&
|
||||||
%url s+p.blit
|
%url s+p.blit
|
||||||
|
@ -1057,7 +1057,7 @@
|
|||||||
+$ blit :: outside blit
|
+$ blit :: outside blit
|
||||||
$% [%bel ~] :: make a noise
|
$% [%bel ~] :: make a noise
|
||||||
[%clr ~] :: clear the screen
|
[%clr ~] :: clear the screen
|
||||||
[%hop p=@ud] :: set cursor position
|
[%hop p=$@(@ud [r=@ud c=@ud])] :: set cursor row/pos
|
||||||
[%klr p=stub] :: set styled line
|
[%klr p=stub] :: set styled line
|
||||||
[%lin p=(list @c)] :: set current line
|
[%lin p=(list @c)] :: set current line
|
||||||
[%nel ~] :: newline
|
[%nel ~] :: newline
|
||||||
|
@ -21,7 +21,7 @@
|
|||||||
$: ram=term :: console program
|
$: ram=term :: console program
|
||||||
tem=(unit (list dill-belt)) :: pending, reverse
|
tem=(unit (list dill-belt)) :: pending, reverse
|
||||||
wid=_80 :: terminal width
|
wid=_80 :: terminal width
|
||||||
pos=@ud :: cursor position
|
pos=$@(@ud [@ud @ud]) :: cursor position
|
||||||
see=$%([%lin (list @c)] [%klr stub]) :: current line
|
see=$%([%lin (list @c)] [%klr stub]) :: current line
|
||||||
== ::
|
== ::
|
||||||
+$ log-level ?(%hush %soft %loud) :: none, line, full
|
+$ log-level ?(%hush %soft %loud) :: none, line, full
|
||||||
@ -430,7 +430,7 @@
|
|||||||
?~ session=(~(get by dug.all) u.hey.all) [~ ~]
|
?~ session=(~(get by dug.all) u.hey.all) [~ ~]
|
||||||
?+ t.t.tyl ~
|
?+ t.t.tyl ~
|
||||||
[%line ~] ``blit+!>(`blit`see.u.session)
|
[%line ~] ``blit+!>(`blit`see.u.session)
|
||||||
[%cursor ~] ``atom+!>(pos.u.session)
|
[%cursor ~] ``blit+!>(`blit`hop+pos.u.session)
|
||||||
==
|
==
|
||||||
==
|
==
|
||||||
::
|
::
|
||||||
|
@ -457,23 +457,32 @@ _term_it_show_blank(u3_utty* uty_u)
|
|||||||
_term_it_dump_buf(uty_u, &uty_u->ufo_u.out.clear_u);
|
_term_it_dump_buf(uty_u, &uty_u->ufo_u.out.clear_u);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* _term_it_show_cursor(): set current line, transferring pointer.
|
/* _term_it_move_cursor(): move cursor to row & column
|
||||||
|
NOTE: row 0 is at the bottom, col 0 is to the left
|
||||||
*/
|
*/
|
||||||
static void
|
static void
|
||||||
_term_it_show_cursor(u3_utty* uty_u, c3_w cur_w)
|
_term_it_move_cursor(u3_utty* uty_u, c3_w row_w, c3_w col_w)
|
||||||
{
|
{
|
||||||
c3_c cur_c[5];
|
c3_c col_c[5];
|
||||||
c3_c len_c = sprintf(cur_c, "%d", cur_w + 1);
|
c3_c wol_c = sprintf(col_c, "%d", col_w + 1);
|
||||||
|
|
||||||
|
c3_c row_c[5];
|
||||||
|
c3_c wow_c = sprintf(row_c, "%d", ( uty_u->tat_u.siz.row_l - row_w ));
|
||||||
|
|
||||||
uv_buf_t esc_u = TERM_LIT_BUF("\033[");
|
uv_buf_t esc_u = TERM_LIT_BUF("\033[");
|
||||||
uv_buf_t pos_u = uv_buf_init(cur_c, len_c);
|
uv_buf_t col_u = uv_buf_init(col_c, wol_c);
|
||||||
uv_buf_t cha_u = TERM_LIT_BUF("G");
|
uv_buf_t sep_u = TERM_LIT_BUF(";");
|
||||||
|
uv_buf_t row_u = uv_buf_init(row_c, wow_c);
|
||||||
|
uv_buf_t cha_u = TERM_LIT_BUF("H");
|
||||||
|
|
||||||
_term_it_dump_buf(uty_u, &esc_u);
|
_term_it_dump_buf(uty_u, &esc_u);
|
||||||
_term_it_dump_buf(uty_u, &pos_u);
|
_term_it_dump_buf(uty_u, &row_u);
|
||||||
|
_term_it_dump_buf(uty_u, &sep_u);
|
||||||
|
_term_it_dump_buf(uty_u, &col_u);
|
||||||
_term_it_dump_buf(uty_u, &cha_u);
|
_term_it_dump_buf(uty_u, &cha_u);
|
||||||
|
|
||||||
uty_u->tat_u.mir.cus_w = cur_w;
|
//TODO should also store row
|
||||||
|
uty_u->tat_u.mir.cus_w = col_w;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* _term_it_show_line(): render current line.
|
/* _term_it_show_line(): render current line.
|
||||||
@ -512,7 +521,7 @@ _term_it_refresh_line(u3_utty* uty_u)
|
|||||||
|
|
||||||
_term_it_show_clear(uty_u);
|
_term_it_show_clear(uty_u);
|
||||||
_term_it_show_line(uty_u, wor_w);
|
_term_it_show_line(uty_u, wor_w);
|
||||||
_term_it_show_cursor(uty_u, cus_w);
|
_term_it_move_cursor(uty_u, 0, cus_w);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* _term_it_set_line(): set current line.
|
/* _term_it_set_line(): set current line.
|
||||||
@ -1361,7 +1370,13 @@ _term_ef_blit(u3_utty* uty_u,
|
|||||||
|
|
||||||
case c3__hop: {
|
case c3__hop: {
|
||||||
if ( c3n == u3_Host.ops_u.tem ) {
|
if ( c3n == u3_Host.ops_u.tem ) {
|
||||||
_term_it_show_cursor(uty_u, u3t(blt));
|
u3_noun pos = u3t(blt);
|
||||||
|
if ( c3y == u3r_ud(pos) ) {
|
||||||
|
_term_it_move_cursor(uty_u, 0, pos);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
_term_it_move_cursor(uty_u, u3h(pos), u3t(pos));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
} break;
|
} break;
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user