Hi, this is my first post in the list. Christiano Farina Haesbaert ask about a plugin that can enclose text in brakets, sometime ago. I wrote a plugin that do exactly that sometime ago, so i decide to share it. it's in python, i attach the files. some notes on gtbtextwraper: in my pc this module is in other directory, thats the reason i modify the python path in the plugin so i can import it, feel free to edit it
Attachment:
textwraper.gedit-plugin
Description: Binary data
# Copyright (C) 2008 Jorge Cob
#
# This program is free software; you can redistribute it and/or modify it under
# the terms of the GNU General Public License as published by the Free Software
# Foundation; either version 2 of the License, or (at your option) any later
# version.
#
# This program is distributed in the hope that it will be useful, but WITHOUT
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
# details.
#
# You should have received a copy of the GNU General Public License along with
# this program; if not, write to the Free Software Foundation, Inc., 51
# Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
import gtk
class GTBTextWraper:
'''GtkTextBuffer text wraper'''
def __init__(self, start, end):
self.start = start
self.end = end
def wrap(self, buff):
'''Encierra entre self.start y self.end el texto seleccionado en buff
Devuelve True si se realizo la operacion'''
bounds = buff.get_selection_bounds()
if len(bounds) != 0:
buff.begin_user_action()
offsets = bounds[0].get_offset(), bounds[1].get_offset()
buff.insert(buff.get_iter_at_offset(offsets[1]), self.end)
buff.insert(buff.get_iter_at_offset(offsets[0]), self.start)
# poner self.end fuera de la seleccion
bounds = buff.get_selection_bounds()
bounds[1].backward_chars(len(self.end))
if bounds[0].equal(buff.get_iter_at_mark(buff.get_insert())):
buff.select_range(bounds[0], bounds[1])
else:
buff.select_range(bounds[1], bounds[0])
buff.end_user_action()
return True
else:
buff.begin_user_action()
buff.insert_at_cursor(self.start)
buff.insert_at_cursor(self.end)
# poner el cursor entre self.start y start.end
insert = buff.get_iter_at_mark(buff.get_insert())
insert.backward_chars(len(self.end))
buff.place_cursor(insert)
buff.end_user_action()
return True
return False
# -*- coding: utf-8 -*-
# Copyright (C) 2008 Jorge Cob
#
# This program is free software; you can redistribute it and/or modify it under
# the terms of the GNU General Public License as published by the Free Software
# Foundation; either version 2 of the License, or (at your option) any later
# version.
#
# This program is distributed in the hope that it will be useful, but WITHOUT
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
# details.
#
# You should have received a copy of the GNU General Public License along with
# this program; if not, write to the Free Software Foundation, Inc., 51
# Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
from gtk import gdk
import gedit
import sys, os
sys.path.append(os.path.expanduser('~/lib/python'))
from gtbtextwraper import GTBTextWraper
class TextWraperPlugin(gedit.Plugin):
def activate(self, window):
self.views = {}
self.wrapers = {
40: GTBTextWraper('(', ')'),
91: GTBTextWraper('[', ']'),
123: GTBTextWraper('{', '}'),
39: GTBTextWraper("'", "'"),
34: GTBTextWraper('"', '"')
}
def deactivate(self, window):
for view, signal in self.views.items():
view.disconnect(signal)
def update_ui(self, window):
buffer = window.get_active_document()
view = window.get_active_view()
if buffer == None or view == None:
return
if view not in self.views:
self.views[view] = (view.connect('key-press-event',
self.on_key_press, buffer))
def on_key_press(self, view, event, buffer):
if event.keyval in self.wrapers:
return self.wrapers[event.keyval].wrap(buffer)
return False