Skip to content

Commit f4de2a6

Browse files
authored
Merge pull request #107 from Nokse22/automatic-list
Added automatic bullet point "- " when a list is made
2 parents bb3f06d + b056bba commit f4de2a6

File tree

1 file changed

+53
-0
lines changed

1 file changed

+53
-0
lines changed

src/view.ts

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -417,6 +417,10 @@ export class WriteableStickyNote extends AbstractStickyNote {
417417
constructor(note?: Note) {
418418
super(note);
419419

420+
this.buffer.connect_after('insert-text', (buffer, loc, text, length) => {
421+
this.on_text_inserted(buffer, loc, text, length);
422+
});
423+
420424
this.buffer.connect("changed", () => {
421425
if (this.updating) {
422426
this.updating = false;
@@ -472,6 +476,55 @@ export class WriteableStickyNote extends AbstractStickyNote {
472476
if (compare_tags(tags, this.note!.tags)) return;
473477
this.change("tags", tags);
474478
}
479+
480+
on_text_inserted(buffer: Gtk.TextBuffer, loc: Gtk.TextIter, text: string, length: number) {
481+
if (text === '\n') {
482+
const start_iter = loc.copy();
483+
start_iter.backward_char();
484+
start_iter.set_line_offset(0);
485+
486+
const end_iter = start_iter.copy();
487+
end_iter.forward_chars(2);
488+
const chars = buffer.get_text(start_iter, end_iter, false);
489+
490+
const simple_regex_pattern = /^[-+*] $/;
491+
if (simple_regex_pattern.test(chars)) {
492+
const bullet = chars[0];
493+
const line_end = loc.copy();
494+
line_end.backward_char();
495+
if (line_end.get_line_offset() === 2) {
496+
start_iter.set_line_offset(0);
497+
buffer.delete(start_iter, loc);
498+
} else {
499+
buffer.insert(loc, bullet + ' ', -1);
500+
}
501+
} else{
502+
const search_limit = start_iter.copy();
503+
const search_end = start_iter.copy();
504+
search_limit.forward_chars(10);
505+
506+
search_end.forward_find_char((ch) => {return ch === ' '}, search_limit);
507+
search_end.forward_char()
508+
const chars = buffer.get_text(start_iter, search_end, false);
509+
510+
const ordered_regex_pattern = /^\d+\. $/;
511+
if (ordered_regex_pattern.test(chars)) {
512+
const current_order = parseInt(chars.slice(0, -2));
513+
const new_order = current_order + 1;
514+
const new_order_bullet = `${new_order}. `;
515+
const line_end = loc.copy();
516+
line_end.backward_char();
517+
518+
if (line_end.get_line_offset() === current_order.toString().length + 2) {
519+
start_iter.set_line_offset(0);
520+
buffer.delete(start_iter, loc);
521+
} else {
522+
buffer.insert(loc, new_order_bullet, -1);
523+
}
524+
}
525+
}
526+
}
527+
}
475528
}
476529

477530
const compare_tags = (a: ITag[], b: ITag[]) => {

0 commit comments

Comments
 (0)