summaryrefslogtreecommitdiffstats
path: root/Tools/idle/SearchBinding.py
blob: 5943e3baec895d32cae137b6634ad33a49f88832 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
import tkSimpleDialog

###$ event <<find>>
###$ win <Control-f>
###$ unix <Control-u><Control-u><Control-s>

###$ event <<find-again>>
###$ win <Control-g>
###$ win <F3>
###$ unix <Control-u><Control-s>

###$ event <<find-selection>>
###$ win <Control-F3>
###$ unix <Control-s>

###$ event <<find-in-files>>
###$ win <Alt-F3>

###$ event <<replace>>
###$ win <Control-h>

###$ event <<goto-line>>
###$ win <Alt-g>
###$ unix <Alt-g>

class SearchBinding:

    windows_keydefs = {
        '<<find-again>>': ['<Control-g>', '<F3>'],
        '<<find-in-files>>': ['<Alt-F3>'],
        '<<find-selection>>': ['<Control-F3>'],
        '<<find>>': ['<Control-f>'],
        '<<replace>>': ['<Control-h>'],
        '<<goto-line>>': ['<Alt-g>'],
    }

    unix_keydefs = {
        '<<find-again>>': ['<Control-u><Control-s>'],
        '<<find-in-files>>': ['<Alt-s>', '<Meta-s>'],
        '<<find-selection>>': ['<Control-s>'],
        '<<find>>': ['<Control-u><Control-u><Control-s>'],
        '<<replace>>': ['<Control-r>'],
        '<<goto-line>>': ['<Alt-g>', '<Meta-g>'],
    }

    menudefs = [
        ('edit', [
            None,
            ('_Find...', '<<find>>'),
            ('Find a_gain', '<<find-again>>'),
            ('Find _selection', '<<find-selection>>'),
            ('Find in Files...', '<<find-in-files>>'),
            ('R_eplace...', '<<replace>>'),
            ('Go to _line', '<<goto-line>>'),
         ]),
    ]

    def __init__(self, editwin):
        self.editwin = editwin

    def find_event(self, event):
        import SearchDialog
        SearchDialog.find(self.editwin.text)
        return "break"

    def find_again_event(self, event):
        import SearchDialog
        SearchDialog.find_again(self.editwin.text)
        return "break"

    def find_selection_event(self, event):
        import SearchDialog
        SearchDialog.find_selection(self.editwin.text)
        return "break"

    def find_in_files_event(self, event):
        import GrepDialog
        GrepDialog.grep(self.editwin.text, self.editwin.io, self.editwin.flist)
        return "break"

    def replace_event(self, event):
        import ReplaceDialog
        ReplaceDialog.replace(self.editwin.text)
        return "break"

    def goto_line_event(self, event):
        text = self.editwin.text
        lineno = tkSimpleDialog.askinteger("Goto",
                                           "Go to line number:",
                                           parent=text)
        if lineno is None:
            return "break"
        if lineno <= 0:
            text.bell()
            return "break"
        text.mark_set("insert", "%d.0" % lineno)
        text.see("insert")