Text: support comment without selection

D5451 by @Poulpator with fixes.
This commit is contained in:
Campbell Barton 2019-08-11 20:50:02 +10:00
parent e2c6cfec18
commit c3a9fc5efb
2 changed files with 35 additions and 32 deletions

View File

@ -1931,7 +1931,7 @@ bool txt_replace_char(Text *text, unsigned int add)
*
* \note caller must handle undo.
*/
static void txt_select_prefix(Text *text, const char *add)
static void txt_select_prefix(Text *text, const char *add, bool skip_blank_lines)
{
int len, num, curc_old, selc_old;
char *tmp;
@ -1947,7 +1947,7 @@ static void txt_select_prefix(Text *text, const char *add)
while (true) {
/* don't indent blank lines */
if (text->curl->len != 0) {
if ((text->curl->len != 0) || (skip_blank_lines == 0)) {
tmp = MEM_mallocN(text->curl->len + indentlen + 1, "textline_string");
text->curc = 0;
@ -1971,7 +1971,9 @@ static void txt_select_prefix(Text *text, const char *add)
}
if (text->curl == text->sell) {
text->selc += indentlen;
if (text->curl->len != 0) {
text->selc += indentlen;
}
break;
}
else {
@ -1995,7 +1997,9 @@ static void txt_select_prefix(Text *text, const char *add)
text->curc = 0;
}
else {
text->curc = curc_old + indentlen;
if (text->curl->len != 0) {
text->curc = curc_old + indentlen;
}
}
}
@ -2089,7 +2093,8 @@ void txt_comment(Text *text)
return;
}
txt_select_prefix(text, prefix);
const bool skip_blank_lines = txt_has_sel(text);
txt_select_prefix(text, prefix, skip_blank_lines);
}
bool txt_uncomment(Text *text)
@ -2111,7 +2116,7 @@ void txt_indent(Text *text)
return;
}
txt_select_prefix(text, prefix);
txt_select_prefix(text, prefix, true);
}
bool txt_unindent(Text *text)

View File

@ -1217,36 +1217,34 @@ static int text_comment_exec(bContext *C, wmOperator *op)
Text *text = CTX_data_edit_text(C);
int type = RNA_enum_get(op->ptr, "type");
text_drawcache_tag_update(CTX_wm_space_text(C), 0);
ED_text_undo_push_init(C);
if (txt_has_sel(text)) {
text_drawcache_tag_update(CTX_wm_space_text(C), 0);
ED_text_undo_push_init(C);
txt_order_cursors(text, false);
switch (type) {
case 1:
txt_comment(text);
break;
case -1:
txt_uncomment(text);
break;
default:
if (txt_uncomment(text) == false) {
txt_comment(text);
}
break;
}
text_update_edited(text);
text_update_cursor_moved(C);
WM_event_add_notifier(C, NC_TEXT | NA_EDITED, text);
return OPERATOR_FINISHED;
}
return OPERATOR_CANCELLED;
switch (type) {
case 1:
txt_comment(text);
break;
case -1:
txt_uncomment(text);
break;
default:
if (txt_uncomment(text) == false) {
txt_comment(text);
}
break;
}
text_update_edited(text);
text_update_cursor_moved(C);
WM_event_add_notifier(C, NC_TEXT | NA_EDITED, text);
return OPERATOR_FINISHED;
}
void TEXT_OT_comment_toggle(wmOperatorType *ot)