diakonos 0.8.4 → 0.8.5
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.
- data/CHANGELOG +15 -0
- data/LICENCE +21 -0
- data/bin/diakonos +0 -0
- data/diakonos-256-colour.conf +93 -0
- data/diakonos.conf +27 -2
- data/lib/diakonos.rb +182 -83
- data/lib/diakonos/buffer.rb +199 -139
- data/lib/diakonos/clipboard.rb +24 -24
- data/lib/diakonos/finding.rb +1 -1
- data/test/buffer-test.rb +46 -30
- data/test/clipboard-test.rb +0 -0
- data/test/diakonos-test.rb +0 -0
- data/test/regexp-test.rb +0 -0
- data/test/sizedarray-test.rb +0 -0
- data/test/string-test.rb +0 -0
- metadata +12 -9
data/CHANGELOG
CHANGED
|
@@ -4,6 +4,21 @@ Diakonos Changelog
|
|
|
4
4
|
0.8.5
|
|
5
5
|
|
|
6
6
|
- Added 256 colour support.
|
|
7
|
+
- Added support for opening files with "filepath:linenumber" syntax.
|
|
8
|
+
- Added ability to put %_ in a code closer as the place to position the cursor.
|
|
9
|
+
- Code closers can now contain newlines.
|
|
10
|
+
- Now closer text is parsed-indented by default.
|
|
11
|
+
- Added copy_selection_to_klipper.
|
|
12
|
+
- Added cut_selection_to_klipper.
|
|
13
|
+
- Added paste_from_klipper.
|
|
14
|
+
- Added delete_and_store_line_to_klipper.
|
|
15
|
+
- Added delete_to_EOL_to_klipper.
|
|
16
|
+
- Added delete_line_to_klipper.
|
|
17
|
+
- Added support for regexp match placeholders (\1, \2, etc.) in findAndReplace.
|
|
18
|
+
- Added $k shell command variable for klipper contents.
|
|
19
|
+
- Added eol_behaviour setting.
|
|
20
|
+
- Various minor bug fixes.
|
|
21
|
+
- Changed to MIT licence.
|
|
7
22
|
|
|
8
23
|
0.8.4
|
|
9
24
|
|
data/LICENCE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
The MIT Licence
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2004-2008 Pistos
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in
|
|
13
|
+
all copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
|
21
|
+
THE SOFTWARE.
|
data/bin/diakonos
CHANGED
|
File without changes
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
colour 32 253 39 # selection; light grey on light blue
|
|
2
|
+
colour 33 255 69 # comments; white on blue
|
|
3
|
+
colour 34 45 black # Ruby symbols; light blue on black
|
|
4
|
+
colour 35 123 black # Ruby instance variables; light blue on black
|
|
5
|
+
colour 36 177 54 # regular expressions; purple on dark purple
|
|
6
|
+
colour 37 111 17 # single-quoted strings; light blue on dark blue
|
|
7
|
+
colour 38 117 18 # double-quoted strings; light blue on dark blue
|
|
8
|
+
colour 39 213 90 # shell-quoted strings; light purple on purple
|
|
9
|
+
colour 40 15 234 # constants; white on light black
|
|
10
|
+
|
|
11
|
+
colour 41 15 233 # XML nodes; white on light black
|
|
12
|
+
colour 42 45 233 # XML attributes; light blue on black
|
|
13
|
+
colour 43 123 233 # XML namespaces; light blue on black
|
|
14
|
+
|
|
15
|
+
# Ruby
|
|
16
|
+
|
|
17
|
+
lang.ruby.format.default white bold
|
|
18
|
+
lang.ruby.format.selection 32
|
|
19
|
+
lang.ruby.format.found yellow inverse
|
|
20
|
+
lang.ruby.tokens.reserved_words.format white
|
|
21
|
+
lang.ruby.tokens.constants.format 40
|
|
22
|
+
lang.ruby.tokens.non_alphanum.format white
|
|
23
|
+
lang.ruby.tokens.symbols.format 34
|
|
24
|
+
lang.ruby.tokens.instance_variables.format 35
|
|
25
|
+
lang.ruby.tokens.comments.format 33
|
|
26
|
+
lang.ruby.tokens.regular_expressions.format 36
|
|
27
|
+
lang.ruby.tokens.regular_expressions2.format 36
|
|
28
|
+
lang.ruby.tokens.singlequoted_strings.format 37
|
|
29
|
+
lang.ruby.tokens.doublequoted_strings.format 38
|
|
30
|
+
lang.ruby.tokens.interpolated_string.format 38
|
|
31
|
+
lang.interpolated_ruby.format.default 38
|
|
32
|
+
lang.interpolated_ruby.tokens.interpolation.format 12 bold
|
|
33
|
+
lang.ruby.tokens.backquoted_strings.format 39
|
|
34
|
+
lang.ruby.tokens.interpolated_exec_string.format 39
|
|
35
|
+
lang.interpolated_exec_ruby.format.default 39
|
|
36
|
+
lang.interpolated_exec_ruby.tokens.interpolation.format 9 bold
|
|
37
|
+
lang.ruby.tokens.character_codes.format magenta bold
|
|
38
|
+
lang.ruby.tokens.long_comments.format 8 bold
|
|
39
|
+
lang.ruby.tokens.sql_string.format 1
|
|
40
|
+
|
|
41
|
+
# Perl
|
|
42
|
+
|
|
43
|
+
lang.perl.format.default white bold
|
|
44
|
+
lang.perl.format.selection 32
|
|
45
|
+
lang.perl.format.found yellow inverse
|
|
46
|
+
lang.perl.tokens.comments.format 33
|
|
47
|
+
lang.perl.tokens.constants.format 40
|
|
48
|
+
lang.perl.tokens.non_alphanum.format white
|
|
49
|
+
lang.perl.tokens.regular_expressions.format 36
|
|
50
|
+
lang.perl.tokens.singlequoted_strings.format 37
|
|
51
|
+
lang.perl.tokens.doublequoted_strings.format 38
|
|
52
|
+
lang.perl.tokens.backquoted_strings.format 39
|
|
53
|
+
lang.perl.tokens.reserved_words.format white
|
|
54
|
+
lang.perl.tokens.builtins.format cyan bold
|
|
55
|
+
lang.perl.tokens.array_variables.format red bold
|
|
56
|
+
lang.perl.tokens.hash_variables.format magenta bold
|
|
57
|
+
|
|
58
|
+
# Java
|
|
59
|
+
|
|
60
|
+
lang.java.format.default white bold
|
|
61
|
+
lang.java.format.selection 32
|
|
62
|
+
lang.java.format.found yellow inverse
|
|
63
|
+
lang.java.tokens.singlequoted_strings.format 37
|
|
64
|
+
lang.java.tokens.doublequoted_strings.format 38
|
|
65
|
+
lang.java.tokens.reserved_words.format white
|
|
66
|
+
lang.java.tokens.constants.format 40
|
|
67
|
+
lang.java.tokens.comments.format 33
|
|
68
|
+
lang.java.tokens.long_comments.format 33
|
|
69
|
+
lang.java.tokens.non_alphanum.format white
|
|
70
|
+
lang.java.tokens.regular_expressions.format 36
|
|
71
|
+
|
|
72
|
+
# XML
|
|
73
|
+
|
|
74
|
+
lang.xml.format.default white
|
|
75
|
+
lang.xml.format.selection 32
|
|
76
|
+
lang.xml.format.found yellow inverse
|
|
77
|
+
lang.xml.tokens.entities.format magenta bold
|
|
78
|
+
lang.xml.tokens.code.format white bold
|
|
79
|
+
lang.xml.tokens.comments.format 33
|
|
80
|
+
lang.xml.tokens.template.format brown
|
|
81
|
+
lang.xml_tag.format.default 41
|
|
82
|
+
lang.xml_tag.format.selection 32
|
|
83
|
+
lang.xml_tag.format.found yellow inverse
|
|
84
|
+
lang.xml_tag.tokens.doublequoted_strings.format 38
|
|
85
|
+
lang.xml_tag.tokens.singlequoted_strings.format 38
|
|
86
|
+
lang.xml_tag.tokens.non_alphanum.format white
|
|
87
|
+
lang.xml_tag.tokens.namespaces.format 43
|
|
88
|
+
lang.xml_comment.format.default 33
|
|
89
|
+
lang.xml_comment.format.selection 32
|
|
90
|
+
lang.xml_comment.format.found yellow inverse
|
|
91
|
+
lang.xml_tag.tokens.attributes ([a-zA-Z_-]+?)=
|
|
92
|
+
lang.xml_tag.tokens.attributes.format 42
|
|
93
|
+
|
data/diakonos.conf
CHANGED
|
@@ -27,6 +27,17 @@ view.wrap.visual true
|
|
|
27
27
|
# bol_behavior is a synonym for bol_behaviour.
|
|
28
28
|
bol_behaviour alternating-first-char
|
|
29
29
|
|
|
30
|
+
# eol_behaviour: This specifies where the cursor should go when the
|
|
31
|
+
# end-of-line key (the default is the End key) is pressed.
|
|
32
|
+
# end: Always move to the right-most column of the line
|
|
33
|
+
# last-char: Always move to the right-most non-whitespace character
|
|
34
|
+
# alternating-end: As with 'end', unless the cursor is
|
|
35
|
+
# already there, in which case, as with 'last-char'.
|
|
36
|
+
# alternating-last-char: As with 'last-char', unless the cursor is
|
|
37
|
+
# already there, in which case, as with 'end'.
|
|
38
|
+
# eol_behavior is a synonym for eol_behaviour.
|
|
39
|
+
eol_behaviour alternating-end
|
|
40
|
+
|
|
30
41
|
# Ensures saved files end with a newline character by adding it if necessary.
|
|
31
42
|
eof_newline false
|
|
32
43
|
|
|
@@ -111,6 +122,7 @@ interaction.choice_delay 3
|
|
|
111
122
|
# $F all current buffer filepaths, space-separated
|
|
112
123
|
# $i get a string from user input
|
|
113
124
|
# $c temp file containing current clipboard text
|
|
125
|
+
# $k temp file containing current klipper (KDE clipboard) text
|
|
114
126
|
# $s temp file containing currently selected text
|
|
115
127
|
|
|
116
128
|
key left;cursorLeft
|
|
@@ -149,10 +161,12 @@ key esc up;scrollUp
|
|
|
149
161
|
key esc [ 1 ; 3 A scrollUp
|
|
150
162
|
key esc [ 1 ; 5 A scrollUp
|
|
151
163
|
key keycode520 scrollUp
|
|
164
|
+
key keycode521 scrollUp
|
|
152
165
|
key esc down;scrollDown
|
|
153
166
|
key esc [ 1 ; 3 B scrollDown
|
|
154
167
|
key esc [ 1 ; 5 B scrollDown
|
|
155
168
|
key keycode513 scrollDown
|
|
169
|
+
key keycode514 scrollDown
|
|
156
170
|
key esc right;seek /(?:^|\W)(\w)|\w(\W|$)/
|
|
157
171
|
key esc [ 1 ; 3 C seek /\w(\W|$)|(?:^|\W)(\w)/
|
|
158
172
|
key esc [ 1 ; 5 C seek /\w(\W|$)|(?:^|\W)(\w)/
|
|
@@ -250,6 +264,15 @@ key ctrl+space;anchorSelection
|
|
|
250
264
|
key ctrl+c;copySelection
|
|
251
265
|
key ctrl+x;cutSelection
|
|
252
266
|
key alt+u;removeSelection
|
|
267
|
+
|
|
268
|
+
# If you are using KDE, you can uncomment these lines to synchronize
|
|
269
|
+
# the Diakonos clipboard with the KDE clipboard
|
|
270
|
+
#key ctrl+c copy_selection_to_klipper
|
|
271
|
+
#key ctrl+x cut_selection_to_klipper
|
|
272
|
+
#key ctrl+v paste_from_klipper
|
|
273
|
+
#key ctrl+k delete_and_store_line_to_klipper
|
|
274
|
+
#key ctrl+alt+k delete_to_eol_to_klipper
|
|
275
|
+
|
|
253
276
|
key ctrl+b select_block
|
|
254
277
|
# Select file diff in a patch
|
|
255
278
|
key ctrl+alt+d f select_block /^Index: /, /^(Index: |$)/, false
|
|
@@ -544,7 +567,7 @@ lang.ruby.tokens.reserved_words \b(__FILE__|and|def|end|in|or|self|unless|__LINE
|
|
|
544
567
|
lang.ruby.tokens.reserved_words.format white
|
|
545
568
|
lang.ruby.tokens.constants \b([A-Z_]+|[A-Z_][A-Z0-9_]+)\b
|
|
546
569
|
lang.ruby.tokens.constants.format yellow bold
|
|
547
|
-
lang.ruby.tokens.symbols (:[a-
|
|
570
|
+
lang.ruby.tokens.symbols [^:](:[a-zA-Z_][a-zA-Z_0-9]*)
|
|
548
571
|
lang.ruby.tokens.symbols.format white bold
|
|
549
572
|
lang.ruby.tokens.non_alphanum [@!#$%^&*()\[\]{}/?=+\-\\|,<.>;~]
|
|
550
573
|
lang.ruby.tokens.non_alphanum.format white
|
|
@@ -746,6 +769,8 @@ lang.java.indent.unindenters (\})
|
|
|
746
769
|
lang.java.indent.preventers (\".+?[^\\]\")|('.+?[^\\]')|(\/\/.*)
|
|
747
770
|
lang.java.indent.ignore ^(.+:|\s*?)$
|
|
748
771
|
lang.java.context.ignore ^(.+:|\s*\{?)$
|
|
772
|
+
lang.java.closers.for.regexp for$
|
|
773
|
+
lang.java.closers.for.closer { |m| "( $i = 0; $i < limit; $i++ ) {\n%_\n}" }
|
|
749
774
|
|
|
750
775
|
# C
|
|
751
776
|
|
|
@@ -907,7 +932,7 @@ lang.tcl.indent.indenters (\{)
|
|
|
907
932
|
lang.tcl.indent.unindenters (\})
|
|
908
933
|
lang.tcl.indent.preventers (\".+?[^\\]\")|('.+?[^\\]')|(\/\/.*)
|
|
909
934
|
|
|
910
|
-
lang.diff.filemask (?:\.(?:diff|patch))$
|
|
935
|
+
lang.diff.filemask (?:\.(?:diff|patch)|COMMIT_EDITMSG)$
|
|
911
936
|
lang.diff.format.default white
|
|
912
937
|
lang.diff.format.selection inverse
|
|
913
938
|
lang.diff.format.found yellow inverse
|
data/lib/diakonos.rb
CHANGED
|
@@ -7,20 +7,12 @@
|
|
|
7
7
|
#
|
|
8
8
|
# Author:: Pistos (irc.freenode.net)
|
|
9
9
|
# http://purepistos.net/diakonos
|
|
10
|
+
# Copyright (c) 2004-2008 Pistos
|
|
10
11
|
#
|
|
11
|
-
# This software is released under the
|
|
12
|
-
#
|
|
12
|
+
# This software is released under the MIT licence.
|
|
13
|
+
# See the LICENCE file included with this program, or
|
|
14
|
+
# http://www.opensource.org/licenses/mit-license.php
|
|
13
15
|
#
|
|
14
|
-
# This program is free software; you can redistribute it and/or
|
|
15
|
-
# modify it under the terms of the GNU General Public License
|
|
16
|
-
# as published by the Free Software Foundation; either version 2
|
|
17
|
-
# of the License, or (at your option) any later version.
|
|
18
|
-
|
|
19
|
-
# This program is distributed in the hope that it will be useful,
|
|
20
|
-
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
21
|
-
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
22
|
-
# GNU General Public License for more details.
|
|
23
|
-
|
|
24
16
|
require 'curses'
|
|
25
17
|
require 'open3'
|
|
26
18
|
require 'thread'
|
|
@@ -55,8 +47,8 @@ require 'diakonos/readline'
|
|
|
55
47
|
|
|
56
48
|
module Diakonos
|
|
57
49
|
|
|
58
|
-
VERSION = '0.8.
|
|
59
|
-
LAST_MODIFIED = '
|
|
50
|
+
VERSION = '0.8.5'
|
|
51
|
+
LAST_MODIFIED = 'August 27, 2008'
|
|
60
52
|
|
|
61
53
|
DONT_ADJUST_ROW = false
|
|
62
54
|
ADJUST_ROW = true
|
|
@@ -101,6 +93,11 @@ module Diakonos
|
|
|
101
93
|
BOL_ALT_ZERO = 2
|
|
102
94
|
BOL_ALT_FIRST_CHAR = 3
|
|
103
95
|
|
|
96
|
+
EOL_END = 0
|
|
97
|
+
EOL_LAST_CHAR = 1
|
|
98
|
+
EOL_ALT_END = 2
|
|
99
|
+
EOL_ALT_LAST_CHAR = 3
|
|
100
|
+
|
|
104
101
|
FORCE_REVERT = true
|
|
105
102
|
ASK_REVERT = false
|
|
106
103
|
|
|
@@ -117,25 +114,30 @@ module Diakonos
|
|
|
117
114
|
'changeSessionSetting',
|
|
118
115
|
'clearMatches',
|
|
119
116
|
'closeFile',
|
|
120
|
-
'collapseWhitespace',
|
|
121
117
|
'close_code',
|
|
118
|
+
'collapseWhitespace',
|
|
122
119
|
'copySelection',
|
|
120
|
+
'copy_selection_to_klipper',
|
|
123
121
|
'cursorBOF',
|
|
124
122
|
'cursorBOL',
|
|
123
|
+
'cursorBOV',
|
|
125
124
|
'cursorDown',
|
|
126
125
|
'cursorEOF',
|
|
127
126
|
'cursorEOL',
|
|
128
|
-
'cursorBOV',
|
|
129
|
-
'cursorTOV',
|
|
130
127
|
'cursorLeft',
|
|
131
128
|
'cursorReturn',
|
|
132
129
|
'cursorRight',
|
|
130
|
+
'cursorTOV',
|
|
133
131
|
'cursorUp',
|
|
134
132
|
'cutSelection',
|
|
133
|
+
'cut_selection_to_klipper',
|
|
135
134
|
'delete',
|
|
136
135
|
'deleteAndStoreLine',
|
|
137
136
|
'deleteLine',
|
|
138
137
|
'deleteToEOL',
|
|
138
|
+
'delete_and_store_line_to_klipper',
|
|
139
|
+
'delete_line_to_klipper',
|
|
140
|
+
'delete_to_EOL_to_klipper',
|
|
139
141
|
'evaluate',
|
|
140
142
|
'execute',
|
|
141
143
|
'find',
|
|
@@ -167,6 +169,7 @@ module Diakonos
|
|
|
167
169
|
'parsedIndent',
|
|
168
170
|
'paste',
|
|
169
171
|
'pasteShellResult',
|
|
172
|
+
'paste_from_klipper',
|
|
170
173
|
'playMacro',
|
|
171
174
|
'popTag',
|
|
172
175
|
'printKeychain',
|
|
@@ -178,11 +181,11 @@ module Diakonos
|
|
|
178
181
|
'revert',
|
|
179
182
|
'saveFile',
|
|
180
183
|
'saveFileAs',
|
|
181
|
-
'select_block',
|
|
182
184
|
'scrollDown',
|
|
183
185
|
'scrollUp',
|
|
184
186
|
'searchAndReplace',
|
|
185
187
|
'seek',
|
|
188
|
+
'select_block',
|
|
186
189
|
'setBufferType',
|
|
187
190
|
'setReadOnly',
|
|
188
191
|
'shell',
|
|
@@ -599,7 +602,7 @@ class Diakonos
|
|
|
599
602
|
end
|
|
600
603
|
end
|
|
601
604
|
when "context.visible", "context.combined", "eof_newline", "view.nonfilelines.visible",
|
|
602
|
-
/^lang\.(.+?)\.indent\.(?:auto|roundup|using_tabs)$/,
|
|
605
|
+
/^lang\.(.+?)\.indent\.(?:auto|roundup|using_tabs|closers)$/,
|
|
603
606
|
"found_cursor_start", "convert_tabs", 'delete_newline_on_delete_to_eol'
|
|
604
607
|
@settings[ command ] = arg.to_b
|
|
605
608
|
when "context.format", "context.separator.format", "status.format"
|
|
@@ -636,6 +639,17 @@ class Diakonos
|
|
|
636
639
|
else # default
|
|
637
640
|
@settings[ "bol_behaviour" ] = BOL_ALT_FIRST_CHAR
|
|
638
641
|
end
|
|
642
|
+
when "eol_behaviour", "eol_behavior"
|
|
643
|
+
case arg.downcase
|
|
644
|
+
when "end"
|
|
645
|
+
@settings[ "eol_behaviour" ] = EOL_END
|
|
646
|
+
when "last-char"
|
|
647
|
+
@settings[ "eol_behaviour" ] = EOL_LAST_CHAR
|
|
648
|
+
when "alternating-last-char"
|
|
649
|
+
@settings[ "eol_behaviour" ] = EOL_ALT_FIRST_CHAR
|
|
650
|
+
else # default
|
|
651
|
+
@settings[ "eol_behaviour" ] = EOL_ALT_END
|
|
652
|
+
end
|
|
639
653
|
when "context.delay", 'interaction.blink_duration', 'interaction.choice_delay'
|
|
640
654
|
@settings[ command ] = arg.to_f
|
|
641
655
|
end
|
|
@@ -870,9 +884,11 @@ class Diakonos
|
|
|
870
884
|
|
|
871
885
|
def switchTo( buffer )
|
|
872
886
|
switched = false
|
|
873
|
-
if buffer
|
|
887
|
+
if buffer
|
|
874
888
|
@buffer_stack -= [ @current_buffer ]
|
|
875
|
-
|
|
889
|
+
if @current_buffer
|
|
890
|
+
@buffer_stack.push @current_buffer
|
|
891
|
+
end
|
|
876
892
|
@current_buffer = buffer
|
|
877
893
|
updateStatusLine
|
|
878
894
|
updateContextLine
|
|
@@ -880,7 +896,7 @@ class Diakonos
|
|
|
880
896
|
switched = true
|
|
881
897
|
end
|
|
882
898
|
|
|
883
|
-
|
|
899
|
+
switched
|
|
884
900
|
end
|
|
885
901
|
protected :switchTo
|
|
886
902
|
|
|
@@ -1126,7 +1142,7 @@ class Diakonos
|
|
|
1126
1142
|
end
|
|
1127
1143
|
number += 1
|
|
1128
1144
|
end
|
|
1129
|
-
|
|
1145
|
+
buffer_number
|
|
1130
1146
|
end
|
|
1131
1147
|
|
|
1132
1148
|
def subShellVariables( string )
|
|
@@ -1162,6 +1178,15 @@ class Diakonos
|
|
|
1162
1178
|
retval.gsub!( /\$c/, clip_filename )
|
|
1163
1179
|
end
|
|
1164
1180
|
|
|
1181
|
+
# Current klipper (KDE clipboard) text
|
|
1182
|
+
if retval =~ /\$k/
|
|
1183
|
+
clip_filename = @diakonos_home + "/clip.txt"
|
|
1184
|
+
File.open( clip_filename, "w" ) do |clipfile|
|
|
1185
|
+
clipfile.puts( `dcop klipper klipper getClipboardContents` )
|
|
1186
|
+
end
|
|
1187
|
+
retval.gsub!( /\$k/, clip_filename )
|
|
1188
|
+
end
|
|
1189
|
+
|
|
1165
1190
|
# Currently selected text
|
|
1166
1191
|
if retval =~ /\$s/
|
|
1167
1192
|
text_filename = @diakonos_home + "/selected.txt"
|
|
@@ -1550,6 +1575,31 @@ class Diakonos
|
|
|
1550
1575
|
removeSelection
|
|
1551
1576
|
end
|
|
1552
1577
|
|
|
1578
|
+
def copy_selection_to_klipper
|
|
1579
|
+
if send_to_klipper( @current_buffer.selected_text )
|
|
1580
|
+
removeSelection
|
|
1581
|
+
end
|
|
1582
|
+
end
|
|
1583
|
+
|
|
1584
|
+
def write_to_clip_file( text )
|
|
1585
|
+
clip_filename = @diakonos_home + "/clip.txt"
|
|
1586
|
+
File.open( clip_filename, "w" ) do |f|
|
|
1587
|
+
f.print text
|
|
1588
|
+
end
|
|
1589
|
+
clip_filename
|
|
1590
|
+
end
|
|
1591
|
+
|
|
1592
|
+
# Returns true iff some text was copied to klipper.
|
|
1593
|
+
def send_to_klipper( text )
|
|
1594
|
+
return false if text.nil?
|
|
1595
|
+
|
|
1596
|
+
clip_filename = write_to_clip_file( text.join( "\n" ) )
|
|
1597
|
+
# A little shell sorcery to ensure the shell doesn't strip off trailing newlines.
|
|
1598
|
+
# Thank you to pgas from irc.freenode.net#bash for help with this.
|
|
1599
|
+
`clipping=$(cat #{clip_filename};printf "_"); dcop klipper klipper setClipboardContents "${clipping%_}"`
|
|
1600
|
+
true
|
|
1601
|
+
end
|
|
1602
|
+
|
|
1553
1603
|
# Returns true iff the cursor changed positions
|
|
1554
1604
|
def cursorDown
|
|
1555
1605
|
return @current_buffer.cursorTo( @current_buffer.last_row + 1, @current_buffer.last_col, Buffer::DO_DISPLAY, Buffer::STOPPED_TYPING, DONT_ADJUST_ROW )
|
|
@@ -1578,8 +1628,7 @@ class Diakonos
|
|
|
1578
1628
|
end
|
|
1579
1629
|
|
|
1580
1630
|
def cursorEOL
|
|
1581
|
-
|
|
1582
|
-
@current_buffer.cursorTo( @current_buffer.last_row, @current_buffer.lineAt( y ).length, Buffer::DO_DISPLAY )
|
|
1631
|
+
@current_buffer.cursorToEOL
|
|
1583
1632
|
end
|
|
1584
1633
|
|
|
1585
1634
|
def cursorEOF
|
|
@@ -1604,27 +1653,60 @@ class Diakonos
|
|
|
1604
1653
|
def cutSelection
|
|
1605
1654
|
delete if @clipboard.addClip( @current_buffer.copySelection )
|
|
1606
1655
|
end
|
|
1656
|
+
|
|
1657
|
+
def cut_selection_to_klipper
|
|
1658
|
+
if send_to_klipper( @current_buffer.selected_text )
|
|
1659
|
+
delete
|
|
1660
|
+
end
|
|
1661
|
+
end
|
|
1607
1662
|
|
|
1608
1663
|
def delete
|
|
1609
1664
|
@current_buffer.delete
|
|
1610
1665
|
end
|
|
1611
1666
|
|
|
1667
|
+
def delete_and_store_line_to_klipper
|
|
1668
|
+
removed_text = @current_buffer.deleteLine
|
|
1669
|
+
if removed_text
|
|
1670
|
+
if @last_commands[ -1 ] =~ /^delete_and_store_line_to_klipper/
|
|
1671
|
+
clip_filename = write_to_clip_file( removed_text << "\n" )
|
|
1672
|
+
`clipping="$(dcop klipper klipper getClipboardContents)\n$(cat #{clip_filename};printf "_")"; dcop klipper klipper setClipboardContents "${clipping%_}"`
|
|
1673
|
+
else
|
|
1674
|
+
send_to_klipper [ removed_text, "" ]
|
|
1675
|
+
end
|
|
1676
|
+
end
|
|
1677
|
+
end
|
|
1678
|
+
|
|
1612
1679
|
def deleteAndStoreLine
|
|
1680
|
+
removed_text = @current_buffer.deleteLine
|
|
1681
|
+
if removed_text
|
|
1682
|
+
clip = [ removed_text, "" ]
|
|
1683
|
+
if @last_commands[ -1 ] =~ /^deleteAndStoreLine/
|
|
1684
|
+
@clipboard.appendToClip clip
|
|
1685
|
+
else
|
|
1686
|
+
@clipboard.addClip clip
|
|
1687
|
+
end
|
|
1688
|
+
end
|
|
1689
|
+
end
|
|
1690
|
+
|
|
1691
|
+
def delete_line_to_klipper
|
|
1613
1692
|
removed_text = @current_buffer.deleteLine
|
|
1614
1693
|
if removed_text
|
|
1615
|
-
|
|
1616
|
-
@clipboard.appendToClip( [ removed_text, "" ] )
|
|
1617
|
-
else
|
|
1618
|
-
@clipboard.addClip( [ removed_text, "" ] )
|
|
1619
|
-
end
|
|
1694
|
+
send_to_klipper [ removed_text, "" ]
|
|
1620
1695
|
end
|
|
1621
1696
|
end
|
|
1622
|
-
|
|
1697
|
+
|
|
1623
1698
|
def deleteLine
|
|
1624
1699
|
removed_text = @current_buffer.deleteLine
|
|
1625
1700
|
@clipboard.addClip( [ removed_text, "" ] ) if removed_text
|
|
1626
1701
|
end
|
|
1627
1702
|
|
|
1703
|
+
def delete_to_EOL_to_klipper
|
|
1704
|
+
removed_text = @current_buffer.deleteToEOL
|
|
1705
|
+
if removed_text
|
|
1706
|
+
send_to_klipper removed_text
|
|
1707
|
+
end
|
|
1708
|
+
end
|
|
1709
|
+
|
|
1628
1710
|
def deleteToEOL
|
|
1629
1711
|
removed_text = @current_buffer.deleteToEOL
|
|
1630
1712
|
@clipboard.addClip( removed_text ) if removed_text
|
|
@@ -1942,65 +2024,76 @@ class Diakonos
|
|
|
1942
2024
|
|
|
1943
2025
|
# Returns the buffer of the opened file, or nil.
|
|
1944
2026
|
def openFile( filename = nil, read_only = false, force_revert = ASK_REVERT )
|
|
1945
|
-
|
|
1946
|
-
|
|
1947
|
-
|
|
1948
|
-
|
|
1949
|
-
|
|
1950
|
-
|
|
1951
|
-
|
|
1952
|
-
|
|
2027
|
+
do_open = true
|
|
2028
|
+
buffer = nil
|
|
2029
|
+
if filename.nil?
|
|
2030
|
+
buffer_key = @untitled_id
|
|
2031
|
+
@untitled_id += 1
|
|
2032
|
+
else
|
|
2033
|
+
if filename =~ /^(.+):(\d+)$/
|
|
2034
|
+
filename, line_number = $1, ( $2.to_i - 1 )
|
|
2035
|
+
end
|
|
2036
|
+
buffer_key = filename
|
|
2037
|
+
if(
|
|
2038
|
+
(not force_revert) and
|
|
2039
|
+
( (existing_buffer = @buffers[ filename ]) != nil ) and
|
|
2040
|
+
( filename !~ /\.diakonos/ )
|
|
2041
|
+
)
|
|
2042
|
+
switchTo( existing_buffer )
|
|
2043
|
+
choice = getChoice(
|
|
2044
|
+
"Revert to on-disk version of #{existing_buffer.nice_name}?",
|
|
2045
|
+
[ CHOICE_YES, CHOICE_NO ]
|
|
2046
|
+
)
|
|
2047
|
+
case choice
|
|
2048
|
+
when CHOICE_NO
|
|
2049
|
+
do_open = false
|
|
2050
|
+
end
|
|
2051
|
+
end
|
|
2052
|
+
|
|
2053
|
+
if FileTest.exist?( filename )
|
|
2054
|
+
# Don't try to open non-files (i.e. directories, pipes, sockets, etc.)
|
|
2055
|
+
do_open &&= FileTest.file?( filename )
|
|
2056
|
+
end
|
|
2057
|
+
end
|
|
2058
|
+
|
|
2059
|
+
if do_open
|
|
2060
|
+
# Is file readable?
|
|
2061
|
+
|
|
2062
|
+
# Does the "file" utility exist?
|
|
2063
|
+
if(
|
|
2064
|
+
filename and
|
|
2065
|
+
@settings[ 'use_magic_file' ] and
|
|
2066
|
+
FileTest.exist?( "/usr/bin/file" ) and
|
|
2067
|
+
FileTest.exist?( filename ) and
|
|
2068
|
+
/\blisting\.txt\b/ !~ filename
|
|
2069
|
+
)
|
|
2070
|
+
file_type = `/usr/bin/file -L #{filename}`
|
|
2071
|
+
if file_type !~ /text/ and file_type !~ /empty$/
|
|
2072
|
+
choice = getChoice(
|
|
2073
|
+
"#{filename} does not appear to be readable. Try to open it anyway?",
|
|
2074
|
+
[ CHOICE_YES, CHOICE_NO ],
|
|
2075
|
+
CHOICE_NO
|
|
1953
2076
|
)
|
|
1954
|
-
|
|
1955
|
-
|
|
1956
|
-
|
|
1957
|
-
[ CHOICE_YES, CHOICE_NO ]
|
|
1958
|
-
)
|
|
1959
|
-
case choice
|
|
1960
|
-
when CHOICE_NO
|
|
1961
|
-
do_open = false
|
|
1962
|
-
end
|
|
2077
|
+
case choice
|
|
2078
|
+
when CHOICE_NO
|
|
2079
|
+
do_open = false
|
|
1963
2080
|
end
|
|
1964
2081
|
|
|
1965
|
-
|
|
1966
|
-
# Don't try to open non-files (i.e. directories, pipes, sockets, etc.)
|
|
1967
|
-
do_open &&= FileTest.file?( filename )
|
|
1968
|
-
end
|
|
1969
|
-
else
|
|
1970
|
-
buffer_key = @untitled_id
|
|
1971
|
-
@untitled_id += 1
|
|
2082
|
+
end
|
|
1972
2083
|
end
|
|
1973
2084
|
|
|
1974
2085
|
if do_open
|
|
1975
|
-
|
|
1976
|
-
|
|
1977
|
-
|
|
1978
|
-
|
|
1979
|
-
|
|
1980
|
-
if file_type !~ /text/ and file_type !~ /empty$/
|
|
1981
|
-
choice = getChoice(
|
|
1982
|
-
"#{filename} does not appear to be readable. Try to open it anyway?",
|
|
1983
|
-
[ CHOICE_YES, CHOICE_NO ],
|
|
1984
|
-
CHOICE_NO
|
|
1985
|
-
)
|
|
1986
|
-
case choice
|
|
1987
|
-
when CHOICE_NO
|
|
1988
|
-
do_open = false
|
|
1989
|
-
end
|
|
1990
|
-
|
|
1991
|
-
end
|
|
1992
|
-
end
|
|
1993
|
-
|
|
1994
|
-
if do_open
|
|
1995
|
-
buffer = Buffer.new( self, filename, read_only )
|
|
1996
|
-
@buffers[ buffer_key ] = buffer
|
|
1997
|
-
switchTo( buffer )
|
|
1998
|
-
end
|
|
2086
|
+
buffer = Buffer.new( self, filename, buffer_key, read_only )
|
|
2087
|
+
@buffers[ buffer_key ] = buffer
|
|
2088
|
+
if switchTo( buffer ) and line_number
|
|
2089
|
+
@current_buffer.goToLine( line_number, 0 )
|
|
2090
|
+
end
|
|
1999
2091
|
end
|
|
2000
|
-
|
|
2001
|
-
|
|
2092
|
+
end
|
|
2093
|
+
|
|
2094
|
+
buffer
|
|
2002
2095
|
end
|
|
2003
|
-
|
|
2096
|
+
|
|
2004
2097
|
def openFileAsk
|
|
2005
2098
|
if @current_buffer != nil and @current_buffer.name != nil
|
|
2006
2099
|
path = File.expand_path( File.dirname( @current_buffer.name ) ) + "/"
|
|
@@ -2099,6 +2192,12 @@ class Diakonos
|
|
|
2099
2192
|
def paste
|
|
2100
2193
|
@current_buffer.paste @clipboard.clip
|
|
2101
2194
|
end
|
|
2195
|
+
|
|
2196
|
+
def paste_from_klipper
|
|
2197
|
+
text = `dcop klipper klipper getClipboardContents`.split( "\n", -1 )
|
|
2198
|
+
text.pop # getClipboardContents puts an extra newline on end
|
|
2199
|
+
@current_buffer.paste text
|
|
2200
|
+
end
|
|
2102
2201
|
|
|
2103
2202
|
def playMacro( name = nil )
|
|
2104
2203
|
macro, input_history = @macros[ name ]
|
|
@@ -2396,7 +2495,7 @@ class Diakonos
|
|
|
2396
2495
|
buffer_number = buffer_number_.to_i
|
|
2397
2496
|
return if buffer_number < 1
|
|
2398
2497
|
buffer_name = bufferNumberToName( buffer_number )
|
|
2399
|
-
if buffer_name
|
|
2498
|
+
if buffer_name
|
|
2400
2499
|
switchTo( @buffers[ buffer_name ] )
|
|
2401
2500
|
end
|
|
2402
2501
|
end
|