-
Notifications
You must be signed in to change notification settings - Fork 2
/
screen_link_reason.c
89 lines (71 loc) · 2.18 KB
/
screen_link_reason.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
#include "journal.h"
#include "entry.h"
#include "zettelkasten.h"
#include <string.h>
#include <menu.h>
#include <stdio.h>
#include <stdlib.h>
int zk_screen_link_context( void ) {
int row, col;
int c;
int tag_len = 0;
WINDOW * _t_window;
char * title = calloc( 100, sizeof( char ) );
curs_set(1);
sprintf(title, "Why link from {%i} to {%i}?", last_entry, entry_to_read );
getmaxyx( stdscr,row,col );
// Print the title
attron( A_UNDERLINE );
mvprintw( ( row / 4 ) - 1, ( col - strlen( title ) ) / 2, title );
attroff( A_UNDERLINE );
refresh();
_t_window = create_newwin( 1, 50, ( row / 4 ) + 1, (col / 2) - 25 );
keypad( _t_window, TRUE );
wrefresh( _t_window );
while(( c = wgetch( _t_window ) ) != 10 ) {
switch (c) {
case KEY_LEFT:
getyx( _t_window, row, col );
if ( col > 0 ) {
wmove( _t_window, row, col - 1 );
}
break;
case KEY_RIGHT:
getyx( _t_window, row, col );
if ( col < tag_len ) {
wmove( _t_window, row, col + 1 );
}
break;
case KEY_DC:
wdelch( _t_window );
getyx( _t_window, row, col );
if ( col < tag_len ) {
tag_len--;
}
break;
case KEY_BACKSPACE:
case 127:
getyx( _t_window, row, col );
if ( col > 0) {
wmove( _t_window, row, col - 1 );
wdelch( _t_window );
tag_len--;
}
break;
default:
tag_len++;
waddch( _t_window, c );
break;
}
}
free( title );
wmove( _t_window, 0, 0 );
char * tmp = realloc( filter_tag, tag_len + 1);
if ( tmp != NULL ) {
filter_tag = tmp;
}
winnstr( _t_window, filter_tag, tag_len + 1 );
filter_tag[tag_len] = '\0';
delwin( _t_window );
return SCREEN_LIST;
}