add C-k l to get lines of code
This commit is contained in:
58
main.c
58
main.c
@@ -480,7 +480,7 @@ erow_init(struct erow *row, int len)
|
|||||||
row->rsize = 0;
|
row->rsize = 0;
|
||||||
row->render = NULL;
|
row->render = NULL;
|
||||||
row->line = NULL;
|
row->line = NULL;
|
||||||
row->cap = cap_growth(0, len);
|
row->cap = cap_growth(0, len)+1; /* extra byte for NUL end */
|
||||||
|
|
||||||
row->line = malloc(row->cap);
|
row->line = malloc(row->cap);
|
||||||
assert(row->line != NULL);
|
assert(row->line != NULL);
|
||||||
@@ -818,6 +818,9 @@ delete_region(void)
|
|||||||
deletech(KILLRING_NO_OP);
|
deletech(KILLRING_NO_OP);
|
||||||
killed++;
|
killed++;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
editor.kill = 1;
|
||||||
|
editor_set_status("Region killed.");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -1708,9 +1711,56 @@ newline(void)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
char *
|
||||||
|
get_cloc_code_lines(const char* filename)
|
||||||
|
{
|
||||||
|
// Build the shell command dynamically
|
||||||
|
char command[512];
|
||||||
|
snprintf(command,
|
||||||
|
sizeof(command),
|
||||||
|
"cloc --quiet %s | tail -2 | head -1 | awk '{print $5}'",
|
||||||
|
filename);
|
||||||
|
|
||||||
|
// Open a pipe to run the command
|
||||||
|
FILE *pipe = popen(command, "r");
|
||||||
|
if (!pipe) {
|
||||||
|
return NULL; // Error opening pipe
|
||||||
|
}
|
||||||
|
|
||||||
|
// Read the output (single line/number)
|
||||||
|
char buffer[256];
|
||||||
|
if (fgets(buffer, sizeof(buffer), pipe) != NULL) {
|
||||||
|
// Remove trailing newline
|
||||||
|
size_t len = strlen(buffer);
|
||||||
|
if (len > 0 && buffer[len - 1] == '\n') {
|
||||||
|
buffer[len - 1] = '\0';
|
||||||
|
}
|
||||||
|
|
||||||
|
// Allocate and copy the string
|
||||||
|
char *result = malloc(strlen(buffer) + 1);
|
||||||
|
if (result) {
|
||||||
|
strcpy(result, buffer);
|
||||||
|
pclose(pipe);
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// On error or empty output, return "0"
|
||||||
|
pclose(pipe);
|
||||||
|
char *zero = malloc(2);
|
||||||
|
if (zero) {
|
||||||
|
strcpy(zero, "0");
|
||||||
|
return zero;
|
||||||
|
}
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void
|
void
|
||||||
process_kcommand(int16_t c)
|
process_kcommand(int16_t c)
|
||||||
{
|
{
|
||||||
|
char *buf = NULL;
|
||||||
|
|
||||||
switch (c) {
|
switch (c) {
|
||||||
case ' ':
|
case ' ':
|
||||||
toggle_markset();
|
toggle_markset();
|
||||||
@@ -1773,6 +1823,12 @@ process_kcommand(int16_t c)
|
|||||||
case 'f':
|
case 'f':
|
||||||
editor_find();
|
editor_find();
|
||||||
break;
|
break;
|
||||||
|
case 'l':
|
||||||
|
buf = get_cloc_code_lines(editor.filename);
|
||||||
|
|
||||||
|
editor_set_status("Lines of code: %s", buf);
|
||||||
|
free(buf);
|
||||||
|
break;
|
||||||
case 'm':
|
case 'm':
|
||||||
if (system("make") != 0) {
|
if (system("make") != 0) {
|
||||||
editor_set_status(
|
editor_set_status(
|
||||||
|
|||||||
Reference in New Issue
Block a user