#include <stdbool.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <curses.h>
#include <pwd.h>
#include "userinput_user.h"
#include "preferences.h"
static void user_completion(void *tinst, struct user_input_state *s) {
struct passwd *pwd;
if(!strlen(s->buf)) {
top_prefs_set_user(s->buf);
user_input_set_state(NULL);
return;
}
pwd = getpwnam(s->buf);
if(NULL == pwd) {
user_input_set_error_state("invalid user");
endpwent();
return;
}
top_prefs_set_user(s->buf);
top_prefs_set_user_uid(pwd->pw_uid);
endpwent();
user_input_set_state(NULL);
}
static void user_draw(void *tinst, struct user_input_state *s, WINDOW *win,
int row, int column) {
const char *curuser = top_prefs_get_user();
char display[60];
if(-1 == snprintf(display, sizeof(display), "user [%s]: %s\n",
curuser ? curuser : "", s->buf))
return;
mvwaddstr(win, row, column, display);
}
struct user_input_state top_user_input_user_state = {
.offset = 0,
.completion = user_completion,
.draw = user_draw
};