[gedit] Allow non alphanumeric snippet tab triggers
- From: Jesse van den Kieboom <jessevdk src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gedit] Allow non alphanumeric snippet tab triggers
- Date: Wed, 15 Aug 2012 07:45:36 +0000 (UTC)
commit 175d71c0418710693dd6070e80d8f233a444cb04
Author: Jesse van den Kieboom <jesse vandenkieboom epfl ch>
Date: Wed Aug 15 09:45:28 2012 +0200
Allow non alphanumeric snippet tab triggers
plugins/snippets/snippets/document.py | 42 ++++++++++++++++++---------------
plugins/snippets/snippets/helper.py | 19 +++++++++++++++
plugins/snippets/snippets/library.py | 16 +-----------
plugins/snippets/snippets/manager.py | 2 +-
4 files changed, 44 insertions(+), 35 deletions(-)
---
diff --git a/plugins/snippets/snippets/document.py b/plugins/snippets/snippets/document.py
index 59213d0..322a66b 100644
--- a/plugins/snippets/snippets/document.py
+++ b/plugins/snippets/snippets/document.py
@@ -27,6 +27,7 @@ from placeholder import *
import completion
from signals import Signals
from shareddata import SharedData
+import helper
class DynamicSnippet(dict):
def __init__(self, text):
@@ -598,31 +599,34 @@ class Document(GObject.Object, Gedit.ViewActivatable, Signals):
end = buf.get_iter_at_mark(buf.get_insert())
start = end.copy()
-
word = None
+ first = True
- if start.backward_word_start():
- # Check if we were at a word start ourselves
- tmp = start.copy()
- tmp.forward_word_end()
+ # Move start backward as long as there is a valid character
+ while start.backward_char():
+ c = start.get_char()
- if tmp.equal(end):
- word = unicode(buf.get_text(start, end, False), 'utf-8')
- else:
- start = end.copy()
- else:
- start = end.copy()
+ if not helper.is_tab_trigger_character(c):
+ # Check this for a single special char
+ if first and helper.is_tab_trigger(c):
+ break
- if not word or word == '':
- if start.backward_char():
- word = start.get_char()
+ # Make sure first char is valid
+ while not start.equal(end) and \
+ not helper.is_first_tab_trigger_character(start):
+ start.forward_char()
- if word.isalnum() or word.isspace():
- return (None, None, None)
- else:
- return (None, None, None)
+ break
+
+ first = False
+
+ if not start.equal(end):
+ word = unicode(buf.get_text(start, end, False), 'utf-8')
+
+ if word and word != '':
+ return (word, start, end)
- return (word, start, end)
+ return (None, None, None)
def parse_and_run_snippet(self, data, iter):
if not self.view.get_editable():
diff --git a/plugins/snippets/snippets/helper.py b/plugins/snippets/snippets/helper.py
index 58cdb2f..3bdf4e6 100644
--- a/plugins/snippets/snippets/helper.py
+++ b/plugins/snippets/snippets/helper.py
@@ -146,6 +146,25 @@ def _write_node(node, file, cdata_nodes=(), indent=0):
def _cdata(text):
return '<![CDATA[' + text.replace(']]>', ']]]]><![CDATA[>') + ']]>'
+def is_tab_trigger(w):
+ if len(w) == 1 and not (w.isalnum() or w.isspace()):
+ return True
+
+ if not is_first_tab_trigger_character(w[0]):
+ return False
+
+ for c in w:
+ if not is_tab_trigger_character(c):
+ return False
+
+ return True
+
+def is_first_tab_trigger_character(c):
+ return c.isalpha() or c in '_:.'
+
+def is_tab_trigger_character(c):
+ return c.isalnum() or c in '_:.'
+
def buffer_word_boundary(buf):
iter = buf.get_iter_at_mark(buf.get_insert())
start = iter.copy()
diff --git a/plugins/snippets/snippets/library.py b/plugins/snippets/snippets/library.py
index 0cb6d70..79b894c 100644
--- a/plugins/snippets/snippets/library.py
+++ b/plugins/snippets/snippets/library.py
@@ -945,21 +945,7 @@ class Library(Singleton):
if not trigger:
return True
- if trigger.isdigit():
- return False
-
- self.check_buffer.set_text(trigger)
-
- start, end = self.check_buffer.get_bounds()
- text = unicode(self.check_buffer.get_text(start, end, False), 'utf-8')
-
- s = start.copy()
- e = end.copy()
-
- end.backward_word_start()
- start.forward_word_end()
-
- return (s.equal(end) and e.equal(start)) or (len(text) == 1 and not (text.isalnum() or text.isspace()))
+ return is_tab_trigger(trigger)
# Snippet getters
# ===============
diff --git a/plugins/snippets/snippets/manager.py b/plugins/snippets/snippets/manager.py
index 15d80d5..3720509 100644
--- a/plugins/snippets/snippets/manager.py
+++ b/plugins/snippets/snippets/manager.py
@@ -660,7 +660,7 @@ class Manager(Gtk.Dialog, Gtk.Buildable):
img.show()
#self['hbox_tab_trigger'].set_spacing(3)
- tip = _('This is not a valid Tab trigger. Triggers can either contain letters or a single (non-alphanumeric) character like: {, [, etc.')
+ tip = _('This is not a valid Tab trigger. Triggers can either contain alphanumeric characters (or _, : and .) or a single (non-alphanumeric) character like: {, [, etc.')
entry.set_tooltip_text(tip)
img.set_tooltip_text(tip)
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]