def _make_buffer(self, name, contents, empty_goto=True, switch=False, window='other', modes=[], fit_lines=None): """Make an emacs buffer `window` can be one of `None`, 'current' or 'other'. """ new_buffer = lisp.get_buffer_create(name) lisp.set_buffer(new_buffer) lisp.toggle_read_only(-1) lisp.erase_buffer() if contents or empty_goto: lisp.insert(contents) for mode in modes: lisp[mode + '-mode']() lisp.buffer_disable_undo(new_buffer) lisp.toggle_read_only(1) if switch: if window == 'current': lisp.switch_to_buffer(new_buffer) else: lisp.switch_to_buffer_other_window(new_buffer) lisp.goto_char(lisp.point_min()) elif window == 'other': new_window = lisp.display_buffer(new_buffer) lisp.set_window_point(new_window, lisp.point_min()) if fit_lines and lisp.fboundp(lisp['fit-window-to-buffer']): lisp.fit_window_to_buffer(new_window, fit_lines) lisp.bury_buffer(new_buffer) return new_buffer
def show_occurrences(self, locations): buffer = self._make_buffer('*rope-occurrences*', "", switch=False) lisp.set_buffer(buffer) lisp.toggle_read_only(0) trunc_length = len(lisp.rope_get_project_root()) lisp.insert('List of occurrences:\n') for location in locations: code_line = self.read_line_from_file(location.filename, location.lineno).rstrip() filename = location.filename[trunc_length:] lineno = str(location.lineno) offset = str(location.offset) lisp.insert(filename + ":" + lineno + ":" + code_line + " " + offset) beginning = lisp.line_beginning_position() end = beginning + len(filename) lisp.add_text_properties(beginning, end, [lisp.face, lisp.button]) lisp.add_text_properties(beginning, end, [lisp.mouse_face, lisp.highlight, lisp.help_echo, "mouse-2: visit this file in other window"]) lisp.insert("\n") lisp.toggle_read_only(1) lisp.set(lisp["next-error-function"], lisp.rope_occurrences_next) lisp.local_set_key('\r', lisp.rope_occurrences_goto) lisp.local_set_key((lisp.mouse_1,), lisp.rope_occurrences_goto) lisp.local_set_key('q', lisp.delete_window)
def show_occurrences(self, locations): text = ['List of occurrences:', ''] for location in locations: line = '%s : %s %s %s' % (location.filename, location.lineno, location.note, location.offset) text.append(line) text = '\n'.join(text) + '\n' buffer = self._make_buffer('*rope-occurrences*', text, switch=False) lisp.set_buffer(buffer) lisp.toggle_read_only(1) lisp.set(lisp["next-error-function"], lisp.rope_occurrences_next) lisp.local_set_key('\r', lisp.rope_occurrences_goto) lisp.local_set_key('q', lisp.delete_window)