mirror of
https://github.com/marcusDenslow/FERRUM.git
synced 2026-10-25 14:38:50 +01:00
66 lines
1.4 KiB
C
66 lines
1.4 KiB
C
|
|
#ifndef DIFF_VIEWER_H
|
|
#define DIFF_VIEWER_H
|
|
|
|
#include "common.h"
|
|
#include <termios.h>
|
|
|
|
#define MAX_FILES 100
|
|
#define MAX_FILENAME_LEN 256
|
|
#define MAX_DIFF_LINES 1000
|
|
|
|
typedef struct {
|
|
char filename[MAX_FILENAME_LEN];
|
|
char status; // 'M' = modified, 'A' = added, 'D' = deleted
|
|
} ChangedFile;
|
|
|
|
typedef struct {
|
|
char line[512];
|
|
char type; // '+' = addition, '-' = deletion, ' ' = context
|
|
int line_number_old;
|
|
int line_number_new;
|
|
} DiffLine;
|
|
|
|
typedef enum {
|
|
MODE_FILE_LIST,
|
|
MODE_FILE_CONTENT
|
|
} ViewMode;
|
|
|
|
typedef struct {
|
|
ChangedFile files[MAX_FILES];
|
|
int file_count;
|
|
int selected_file;
|
|
DiffLine diff_lines[MAX_DIFF_LINES];
|
|
int diff_line_count;
|
|
int diff_scroll_offset;
|
|
int terminal_width;
|
|
int terminal_height;
|
|
int file_panel_width;
|
|
ViewMode current_mode;
|
|
} DiffViewer;
|
|
|
|
int init_diff_viewer(DiffViewer *viewer);
|
|
|
|
int get_changed_files(DiffViewer *viewer);
|
|
|
|
int is_new_file(const char *filename);
|
|
|
|
int load_new_file_content(DiffViewer *viewer, const char *filename);
|
|
|
|
int load_file_diff(DiffViewer *viewer, const char *filename);
|
|
|
|
void render_diff_viewer(DiffViewer *viewer);
|
|
|
|
int handle_diff_input(DiffViewer *viewer, char key);
|
|
|
|
int run_diff_viewer(void);
|
|
|
|
void cleanup_diff_viewer(DiffViewer *viewer);
|
|
|
|
void get_terminal_size(int *width, int *height);
|
|
|
|
void set_raw_mode(struct termios *orig_termios);
|
|
|
|
void restore_terminal_mode(struct termios *orig_termios);
|
|
|
|
#endif // DIFF_VIEWER_H
|