Compare commits

...

2 commits

Author SHA1 Message Date
4b16733d22
Exit program if window size is too small 2024-11-01 22:49:09 +00:00
3d266f15d8
Handle sigwinch 2024-11-01 22:42:11 +00:00
2 changed files with 25 additions and 8 deletions

31
ccc.c
View file

@ -21,6 +21,7 @@
#include "util.h"
/* functions' definitions */
void handle_sigwinch();
void cleanup();
void show_help();
int read_key();
@ -108,6 +109,16 @@ int main(int argc, char **argv)
if (!isatty(STDIN_FILENO))
die("ccc: No tty detected. ccc requires an interactive shell to run.\n");
struct sigaction sa;
sa.sa_handler = handle_sigwinch;
sa.sa_flags = SA_RESTART;
sigemptyset(&sa.sa_mask);
if (sigaction(SIGWINCH, &sa, NULL) == -1) {
perror("sigaction");
exit(1);
}
/* initialize screen, don't print special chars,
* make ctrl + c work, don't show cursor
* enable arrow keys */
@ -131,10 +142,8 @@ int main(int argc, char **argv)
getcwd(cwd, PATH_MAX);
p_cwd = memalloc(PATH_MAX);
p_cwd[0] = '\0';
get_window_size(&rows, &cols);
half_width = cols / 2 + WINDOW_OFFSET;
populate_files(cwd, 0, &files);
handle_sigwinch();
if (to_open_file) {
sel_file = arraylist_search(files, argv_cp, true);
@ -144,10 +153,7 @@ int main(int argc, char **argv)
int ch, ch2;
int run = 1;
while (run) {
if (cols < 80 || rows < 24) {
cleanup();
die("ccc: Terminal size needs to be at least 80x24");
}
ch = read_key();
switch (ch) {
/* quit */
@ -406,6 +412,17 @@ int main(int argc, char **argv)
return 0;
}
void handle_sigwinch()
{
get_window_size(&rows, &cols);
if (cols < 80 || rows < 24) {
cleanup();
die("ccc: Terminal size needs to be at least 80x24");
}
half_width = cols / 2 + WINDOW_OFFSET;
list_files();
}
void cleanup()
{
if (argv_cp != NULL)

View file

@ -19,7 +19,7 @@ In COLS:
0 will make them equal (at the center),
15 will make files bigger
-15 will make preview bigger */
#define WINDOW_OFFSET -65
#define WINDOW_OFFSET -30
/* Options */
#define SHOW_HIDDEN true /* show hidden files/dotfiles at startup */