textbringer 5 → 6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/lib/textbringer/buffer.rb +4 -0
- data/lib/textbringer/commands/help.rb +2 -1
- data/lib/textbringer/modes/overwrite_mode.rb +56 -0
- data/lib/textbringer/version.rb +1 -1
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 1a4e9151c1c0eb5b77a04aa772527cbab44782e161bdec0885d262d3af625fce
|
4
|
+
data.tar.gz: 7e32c6f85241240b08944de42b12174bd8e8f41568e4b65f24696355b5bd72e0
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a49c66d31e61433c3755373cdc469a84c1c7c4f43391687287e5daa23e96d0a082ed82aebea89b0281982fdd16972eda67ff140379142242df455b6a22753166
|
7
|
+
data.tar.gz: 62df368e736bd9e7c31772cf75e6bb5f64781b9768d49352da87f7bd3e2eb91c2266dd2dd71660940024c99c0da8a89e4116cac04146de4a048bf8d2b6753e7d
|
data/lib/textbringer/buffer.rb
CHANGED
@@ -1759,6 +1759,8 @@ module Textbringer
|
|
1759
1759
|
end
|
1760
1760
|
|
1761
1761
|
class InsertAction < UndoableAction
|
1762
|
+
attr_reader :string
|
1763
|
+
|
1762
1764
|
def initialize(buffer, location, string)
|
1763
1765
|
super(buffer, location)
|
1764
1766
|
@string = string
|
@@ -1785,6 +1787,8 @@ module Textbringer
|
|
1785
1787
|
end
|
1786
1788
|
|
1787
1789
|
class DeleteAction < UndoableAction
|
1790
|
+
attr_reader :string
|
1791
|
+
|
1788
1792
|
def initialize(buffer, location, insert_location, string)
|
1789
1793
|
super(buffer, location)
|
1790
1794
|
@insert_location = insert_location
|
@@ -65,7 +65,8 @@ module Textbringer
|
|
65
65
|
end
|
66
66
|
|
67
67
|
def command_help(cmd)
|
68
|
-
|
68
|
+
file, line = *cmd.block.source_location
|
69
|
+
s = format("%s:%d\n", file, line)
|
69
70
|
s << "-" * (Window.columns - 2) + "\n"
|
70
71
|
s << "#{cmd.name}"
|
71
72
|
if !cmd.block.parameters.empty?
|
@@ -1,4 +1,27 @@
|
|
1
1
|
module Textbringer
|
2
|
+
using Module.new {
|
3
|
+
refine Buffer do
|
4
|
+
def merge_overwrite_action
|
5
|
+
if @undoing || @undo_stack.size < 2 ||
|
6
|
+
!@undo_stack[-1].is_a?(DeleteAction) ||
|
7
|
+
!@undo_stack[-2].is_a?(InsertAction)
|
8
|
+
return
|
9
|
+
end
|
10
|
+
delete_action = @undo_stack.pop
|
11
|
+
insert_action = @undo_stack.pop
|
12
|
+
action = @undo_stack.last
|
13
|
+
if action.is_a?(OverwriteAction)
|
14
|
+
action.merge(insert_action.string, delete_action.string)
|
15
|
+
@redo_stack.clear
|
16
|
+
else
|
17
|
+
new_action = OverwriteAction.new(self, insert_action.location,
|
18
|
+
insert_action.string, delete_action.string)
|
19
|
+
push_undo(new_action)
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
}
|
24
|
+
|
2
25
|
class OverwriteMode < MinorMode
|
3
26
|
self.mode_name = "Ovwrt"
|
4
27
|
|
@@ -14,6 +37,7 @@ module Textbringer
|
|
14
37
|
buffer.delete_region(pos, buffer.point)
|
15
38
|
end
|
16
39
|
end
|
40
|
+
buffer.merge_overwrite_action
|
17
41
|
}
|
18
42
|
|
19
43
|
def enable
|
@@ -24,4 +48,36 @@ module Textbringer
|
|
24
48
|
remove_hook(:post_self_insert_hook, POST_INSERT_HOOK, local: true)
|
25
49
|
end
|
26
50
|
end
|
51
|
+
|
52
|
+
class OverwriteAction < UndoableAction
|
53
|
+
def initialize(buffer, location, inserted_string, deleted_string)
|
54
|
+
super(buffer, location)
|
55
|
+
@inserted_string = inserted_string
|
56
|
+
@deleted_string = deleted_string
|
57
|
+
@copied = false
|
58
|
+
end
|
59
|
+
|
60
|
+
def undo
|
61
|
+
@buffer.goto_char(@location)
|
62
|
+
@buffer.delete_region(@location, @location + @inserted_string.bytesize)
|
63
|
+
@buffer.insert(@deleted_string)
|
64
|
+
@buffer.goto_char(@location)
|
65
|
+
end
|
66
|
+
|
67
|
+
def redo
|
68
|
+
@buffer.goto_char(@location)
|
69
|
+
@buffer.delete_region(@location, @location + @deleted_string.bytesize)
|
70
|
+
@buffer.insert(@inserted_string)
|
71
|
+
end
|
72
|
+
|
73
|
+
def merge(inserted_string, deleted_string)
|
74
|
+
unless @copied
|
75
|
+
@inserted_string = @inserted_string.dup
|
76
|
+
@deleted_string = @deleted_string.dup
|
77
|
+
@copied = true
|
78
|
+
end
|
79
|
+
@inserted_string.concat(inserted_string)
|
80
|
+
@deleted_string.concat(deleted_string)
|
81
|
+
end
|
82
|
+
end
|
27
83
|
end
|
data/lib/textbringer/version.rb
CHANGED