Skip to content
This repository was archived by the owner on Mar 19, 2024. It is now read-only.

Commit 2a05c58

Browse files
committed
make pasting faster
1 parent 24cc06f commit 2a05c58

File tree

2 files changed

+7
-4
lines changed

2 files changed

+7
-4
lines changed

bim-core.h

+1
Original file line numberDiff line numberDiff line change
@@ -272,6 +272,7 @@ typedef struct _env {
272272
unsigned int crnl:1;
273273
unsigned int numbers:1;
274274
unsigned int gutter:1;
275+
unsigned int slowop:1;
275276

276277
int highlighting_paren;
277278
int maxcolumn;

bim.c

+6-4
Original file line numberDiff line numberDiff line change
@@ -880,6 +880,7 @@ void add_syntax(struct syntax_definition def) {
880880
* Calculate syntax highlighting for the given line.
881881
*/
882882
void recalculate_syntax(line_t * line, int line_no) {
883+
if (env->slowop) return;
883884
/* Clear syntax for this line first */
884885
int is_original = 1;
885886
while (1) {
@@ -8477,6 +8478,7 @@ BIM_ACTION(paste, ARG_IS_CUSTOM | ACTION_IS_RW,
84778478
"Paste yanked text before (`P`) or after (`p`) the cursor."
84788479
)(int direction) {
84798480
if (global_config.yanks) {
8481+
env->slowop = 1;
84808482
if (!global_config.yank_is_full_lines) {
84818483
/* Handle P for paste before, p for past after */
84828484
int target_column = (direction == -1 ? (env->col_no) : (env->col_no+1));
@@ -8513,13 +8515,13 @@ BIM_ACTION(paste, ARG_IS_CUSTOM | ACTION_IS_RW,
85138515
replace_line(env->lines, env->line_no - (direction == -1 ? 1 : 0) + i, global_config.yanks[i]);
85148516
}
85158517
}
8518+
env->slowop = 0;
85168519
/* Recalculate whole document syntax */
8517-
for (int i = 0; i < env->line_count; ++i) {
8520+
for (int i = env->line_no - 1; i < env->line_count; ++i) {
85188521
env->lines[i]->istate = 0;
85198522
}
8520-
for (int i = 0; i < env->line_count; ++i) {
8521-
recalculate_syntax(env->lines[i],i);
8522-
}
8523+
int line_to_recalculate = (env->line_no > 1 ? env->line_no - 2 : 0);
8524+
recalculate_syntax(env->lines[line_to_recalculate], line_to_recalculate);
85238525
if (direction == 1) {
85248526
if (global_config.yank_is_full_lines) {
85258527
env->line_no += 1;

0 commit comments

Comments
 (0)