Commit f83bebed authored by Caleb C. Sander's avatar Caleb C. Sander
Browse files

Indent line when pressing ENTER between braces

parent bfed7386
Showing with 32 additions and 14 deletions
+32 -14
......@@ -96,6 +96,20 @@ void do_tab(void)
do_output((char *)"\t", 1, TRUE);
}
size_t tab_char_length(void) {
return ISSET(TABS_TO_SPACES) ? tabsize : 1;
}
void set_indentation(char *indentation) {
/* Set the indentation to either a bunch of spaces or a single tab. */
if (ISSET(TABS_TO_SPACES)) {
charset(indentation, ' ', tabsize);
indentation[tabsize] = '\0';
} else {
strcpy(indentation, "\t");
}
}
#ifndef NANO_TINY
/* Add an indent to the given line. */
void indent_a_line(filestruct *line, char *indentation)
......@@ -142,16 +156,8 @@ void do_indent(void)
if (top == bot->next)
return;
indentation = charalloc(tabsize + 1);
/* Set the indentation to either a bunch of spaces or a single tab. */
if (ISSET(TABS_TO_SPACES)) {
charset(indentation, ' ', tabsize);
indentation[tabsize] = '\0';
} else {
indentation[0] = '\t';
indentation[1] = '\0';
}
indentation = charalloc(tab_char_length() + 1);
set_indentation(indentation);
add_undo(INDENT);
......@@ -865,11 +871,11 @@ void do_redo(void)
/* Break the current line at the cursor position. */
void do_enter(void)
{
filestruct *newnode = make_new_node(openfile->current);
size_t extra = 0;
#ifndef NANO_TINY
filestruct *sampleline = openfile->current;
bool allblanks = FALSE;
filestruct *indented_line = NULL;
if (ISSET(AUTOINDENT)) {
#ifdef ENABLE_JUSTIFY
......@@ -886,8 +892,20 @@ void do_enter(void)
extra = openfile->current_x;
else if (extra == openfile->current_x)
allblanks = TRUE;
else if (
openfile->current->data[openfile->current_x - 1] == '{' &&
openfile->current->data[openfile->current_x ] == '}'
) {
indented_line = make_new_node(openfile->current);
indented_line->data = charalloc(extra + tab_char_length() + 1);
strncpy(indented_line->data, sampleline->data, extra);
set_indentation(indented_line->data + extra);
splice_node(openfile->current, indented_line);
}
}
#endif /* NANO_TINY */
filestruct *previous = indented_line ? indented_line : openfile->current;
filestruct *newnode = make_new_node(previous);
newnode->data = charalloc(strlen(openfile->current->data +
openfile->current_x) + extra + 1);
strcpy(&newnode->data[extra], openfile->current->data +
......@@ -916,12 +934,12 @@ void do_enter(void)
#endif
/* Insert the newly created line after the current one and renumber. */
splice_node(openfile->current, newnode);
splice_node(previous, newnode);
renumber(newnode);
/* Put the cursor on the new line, after any automatic whitespace. */
openfile->current = newnode;
openfile->current_x = extra;
openfile->current = indented_line ? indented_line : newnode;
openfile->current_x = indented_line ? extra + tab_char_length() : extra;
openfile->placewewant = xplustabs();
openfile->totsize++;
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment