/usr/share/pyshared/spyderlib/plugins/findinfiles.py is in python-spyderlib 2.1.9-1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
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 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 | # -*- coding: utf-8 -*-
#
# Copyright © 2009-2010 Pierre Raybaut
# Licensed under the terms of the MIT License
# (see spyderlib/__init__.py for details)
"""Find in Files Plugin"""
# pylint: disable=C0103
# pylint: disable=R0903
# pylint: disable=R0911
# pylint: disable=R0201
import os
from spyderlib.qt.QtGui import QApplication
from spyderlib.qt.QtCore import SIGNAL, Signal
# Local imports
from spyderlib.baseconfig import _
from spyderlib.utils.qthelpers import create_action
from spyderlib.widgets.findinfiles import FindInFilesWidget
from spyderlib.plugins import SpyderPluginMixin
class FindInFiles(FindInFilesWidget, SpyderPluginMixin):
"""Find in files DockWidget"""
CONF_SECTION = 'find_in_files'
sig_option_changed = Signal(str, object)
def __init__(self, parent=None):
supported_encodings = self.get_option('supported_encodings')
search_path = self.get_option('search_path', None)
self.search_text_samples = self.get_option('search_text_samples')
search_text = self.get_option('search_text')
search_text = [txt for txt in search_text \
if txt not in self.search_text_samples]
search_text += self.search_text_samples
search_text_regexp = self.get_option('search_text_regexp')
include = self.get_option('include')
include_idx = self.get_option('include_idx', None)
include_regexp = self.get_option('include_regexp')
exclude = self.get_option('exclude')
exclude_idx = self.get_option('exclude_idx', None)
exclude_regexp = self.get_option('exclude_regexp')
in_python_path = self.get_option('in_python_path')
more_options = self.get_option('more_options')
FindInFilesWidget.__init__(self, parent,
search_text, search_text_regexp, search_path,
include, include_idx, include_regexp,
exclude, exclude_idx, exclude_regexp,
supported_encodings,
in_python_path, more_options)
SpyderPluginMixin.__init__(self, parent)
# Initialize plugin
self.initialize_plugin()
self.connect(self, SIGNAL('toggle_visibility(bool)'), self.toggle)
def toggle(self, state):
"""Toggle widget visibility"""
if self.dockwidget:
self.dockwidget.setVisible(state)
def refreshdir(self):
"""Refresh search directory"""
self.find_options.set_directory(os.getcwdu())
def findinfiles_callback(self):
"""Find in files callback"""
widget = QApplication.focusWidget()
if not self.ismaximized:
self.dockwidget.setVisible(True)
self.dockwidget.raise_()
text = ''
from spyderlib.widgets.editor import TextEditBaseWidget
if isinstance(widget, TextEditBaseWidget):
if widget.has_selected_text():
text = widget.get_selected_text()
self.set_search_text(text)
if text:
self.find()
#------ SpyderPluginWidget API ---------------------------------------------
def get_plugin_title(self):
"""Return widget title"""
return _("Find in files")
def get_focus_widget(self):
"""
Return the widget to give focus to when
this plugin's dockwidget is raised on top-level
"""
return self.find_options.search_text
def get_plugin_actions(self):
"""Return a list of actions related to plugin"""
return []
def register_plugin(self):
"""Register plugin in Spyder's main window"""
self.get_pythonpath_callback = self.main.get_spyder_pythonpath
self.main.add_dockwidget(self)
self.connect(self, SIGNAL("edit_goto(QString,int,QString)"),
self.main.editor.load)
self.connect(self, SIGNAL('redirect_stdio(bool)'),
self.main.redirect_internalshell_stdio)
self.connect(self.main.workingdirectory,
SIGNAL("refresh_findinfiles()"), self.refreshdir)
findinfiles_action = create_action(self, _("&Find in files"),
"Ctrl+Shift+F", 'findf.png',
triggered=self.findinfiles_callback,
tip=_("Search text in multiple files"))
self.main.search_menu_actions += [None, findinfiles_action]
self.main.search_toolbar_actions += [None, findinfiles_action]
def refresh_plugin(self):
"""Refresh widget"""
pass
def closing_plugin(self, cancelable=False):
"""Perform actions before parent main window is closed"""
self.closing_widget() # stop search thread and clean-up
options = self.find_options.get_options(all=True)
if options is not None:
search_text, text_re, search_path, \
include, include_idx, include_re, \
exclude, exclude_idx, exclude_re, \
in_python_path, more_options = options
hist_limit = 15
search_text = search_text[:hist_limit]
search_path = search_path[:hist_limit]
include = include[:hist_limit]
exclude = exclude[:hist_limit]
self.set_option('search_text', search_text)
self.set_option('search_text_regexp', text_re)
self.set_option('search_path', search_path)
self.set_option('include', include)
self.set_option('include_idx', include_idx)
self.set_option('include_regexp', include_re)
self.set_option('exclude', exclude)
self.set_option('exclude_idx', exclude_idx)
self.set_option('exclude_regexp', exclude_re)
self.set_option('in_python_path', in_python_path)
self.set_option('more_options', more_options)
return True
|