The plugin below will do a simple rot13 encoding on the selected text.
After saving it to a file in Packages/User, you can run it via entering view.runCommand('rot13') in the console (accessible via Ctrl+~).
import sublime, sublimeplugin
class Rot13Command(sublimeplugin.TextCommand):
def run(self, view, args):
for region in view.sel():
if not region.empty():
# Get the selected text
s = view.substr(region)
# Transform it via rot13
s = s.encode('rot13')
# Replace the selection with transformed text
view.replace(region, s)
This defines a simple command, "duplicate" that duplicates the current line. To run, add this line to Default.sublime-keymap:
<binding key="ctrl+alt+d" command="duplicate"/>
(or type view.runCommand('duplicate') in the console.)
import sublime, sublimeplugin
# Extends TextCommand so that run() receives a View to modify.
class DuplicateCommand(sublimeplugin.TextCommand):
def run(self, view, args):
# Walk through each region in the selection
for region in view.sel():
# Only interested in empty regions, otherwise they may span multiple
# lines, which doesn't make sense for this command.
if region.empty():
# Expand the region to the full line it resides on, excluding the newline
line = view.line(region)
# Extract the string for the line, and add a newline
lineContents = view.substr(line) + '\n'
# Add the text at the beginning of the line
view.insert(line.begin(), lineContents)
This prints all incoming events out to the console.
import sublime, sublimeplugin
class EventDump(sublimeplugin.Plugin):
def onLoad(self, view):
print view.fileName(), "just got loaded"
def onPreSave(self, view):
print view.fileName(), "is about to be saved"
def onPostSave(self, view):
print view.fileName(), "just got saved"
def onNew(self, view):
print "new file"
def onModified(self, view):
print view.fileName(), "modified"
def onActivated(self, view):
print view.fileName(), "is now the active view"
def onClose(self, view):
print view.fileName(), "is no more"
def onClone(self, view):
print view.fileName(), "just got cloned"
This calls the onIdle() method after the user hasn't made any changes to the buffer for 1 second.
class IdleWatcher(sublimeplugin.Plugin):
pending = 0
def handleTimeout(self, view):
self.pending = self.pending - 1
if self.pending == 0:
# There are no more queued up calls to handleTimeout, so it must have
# been 1000ms since the last modification
self.onIdle(view)
def onModified(self, view):
self.pending = self.pending + 1
# Ask for handleTimeout to be called in 1000ms
sublime.setTimeout(functools.partial(self.handleTimeout, view), 1000)
def onIdle(self, view):
print "No activity in the past 1000ms"