Text: support comment without selection
D5451 by @Poulpator with fixes.
This commit is contained in:
parent
e2c6cfec18
commit
c3a9fc5efb
|
@ -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)
|
||||
|
|
|
@ -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)
|
||||
|
|
Loading…
Reference in New Issue