Sublime Forum

Fast way to select current function in python?

#14

http://ndudfield.com/zencoding/old/search-in-area.gif

Blocks are good for rudimentary scoped var renaming too

0 Likes

#15

[quote=“castles_made_of_sand”]
Blocks are good for rudimentary scoped var renaming too

How did you find boundaries of current blocks? Also with ast or some other method?[/quote]

0 Likes

#16

def find_block_starts(view, block_tokens): regex = re.compile(block_tokens if block_tokens else BLOCKERS) return [r for r in view.find_by_selector('keyword,storage') if view.find(r'\S', view.line(r).begin()).begin() == r.begin() and regex.match(view.substr(r)) ]

Basically by finding block starting tokens, bisecting the closest to each selection and then using some indentation comparing routines, to find extents of a block. Used a bit of scope awareness etc.

Things like that worked better in ST 1 & 2 when the api was faster and you could do a lot of pt by pt stuff.

0 Likes

#17

Will see if I can dig it up and port it

0 Likes

#18

@wuub ST3

0 Likes

#19

Great!

Installation instructions:

  1. Clone this repo into your Preferences -> Browse Packages directory.
    github.com/wuub/SublimeEyeball

  2. make sure that at least one pythons have eyeball installed (pip install eyeball should work).
    Pick the one you code for, or both if you use py2 and py3. Eyeball relies on ast module and it can only parse the same version of python as itself, so py27 might not be able to understand all of python3 and vice versa.
    github.com/wuub/SublimeEyeball/ … 20(Windows.sublime-settings

  3. Ctrl+Shift+C to select block of code, repeat to cycle up.

Notes:

  • STILL WiP! this is a sneak peek, early beta, preview, because sfranky asked nicely :wink:
  • plugin launches external python each and every time. On most machines it is fast enough (crazy fast on my workstation) and there is no plan to change this behaviour at least for now.
  • as said before external python dependency is caused by ast being tied to the specific python version, also I have some other plans for this library/plugin that would be difficult to code using internal sublime python
  • eventually I plan to include eyeball library within this plugin, but since PackageControl / github zipballs don’t support git submodules, I need to think it through first
0 Likes

#20

I just saw this !! :blush: great! :laughing: :laughing: :laughing:
but… it’s not working yet!
I get this error in the console:
SublimeEyeball c:\Python32\pythonw.exe No JSON object could be decoded
(I have python 3.2 installed, not python 3.3, so i just changed the line in your file)

0 Likes

#21
  1. check if eyeball is installed in your python3 -> c:\python32\python.exe -m eyeball should wait for input.
  2. Eyeball works with python files that can be parsed i.e. are syntactically correct. For example if you are trying to parse Python2.x with print “something” using python3.2 it will not work as print is no longer a keyword. This is why you can have multiple pythons configured, SublimeEyeball try them in order untill one returns correct results.

Edit: I did not check for py3.2 compatibility before, but it doesn’t seem to be a problem here travis-ci.org/wuub/eyeball

0 Likes

#22

hmm that previous post i made was completely wrong, I m still looking into it…

0 Likes

#23

eeer ok found the problem. It wasn’t syntactically correct :blush:
Works perfect now !! many thanks !!

0 Likes

#24

It is very weird though, I have the following code:

    def __init__(self):
        super(PublishedItem,self).__init__()
        # self.tree = ''
        self.XML_publications_root = ''
        # self.AuthorAddresses = "Ν/Α"
        self.Abstract = "unbounded"
        self.ArticleNumber = "unbounded"
        self.AuthorAddresses = ] # this contains the orig addresses coming in
        self.Address_AuthorsDict = dict()
        self.Authors = ]
        self.AuthorFullName = ]

and it doesn’t work because of the fifth line. Why is that? it’s commented anyway!

0 Likes

#25

[quote=“sfranky”]It is very weird though, I have the following code:
and it doesn’t work because of the fifth line. Why is that? it’s commented anyway![/quote]

No problems on my end whatsoever. Works like a charm with this example. :frowning:

EDIT
In SublimeEyeball/eyeball_select.py try to print(out) & print(err) in line 19. Maybe it’ll tell us something.

0 Likes

#26

hmm strange…very strange. Upon seeing the messages below, I overwrote (in insert mode) all the characters of the line, character by character. And now it works fine… how is this possible?

b''
b'Traceback (most recent call last):
  File "c:\\Python32\\lib\\runpy.py", line 160, in _run_module_as_main
    "__main__", fname, loader, pkg_name)
  File "c:\\Python32\\lib\\runpy.py", line 73, in _run_code
    exec(code, run_globals)
  File "c:\\Python32\\lib\\site-packages\\eyeball\\__main__.py", line 33, in <module>
    main()
  File "c:\\Python32\\lib\\site-packages\\eyeball\\__main__.py", line 27, in main
    code = sys.stdin.read()
  File "c:\\Python32\\lib\\encodings\\cp1252.py", line 23, in decode
    return codecs.charmap_decode(input,self.errors,decoding_table)[0]
    UnicodeDecodeError: \'charmap\' codec can\'t decode byte 0x9d in position 11251: character maps to <undefined>
'
SublimeEyeball c:\Python32\pythonw.exe No JSON object could be decoded
0 Likes

#27

Yeah, encodings and stdio handling on windows.
One of my favourite things to debug, right after killing process trees with cmd.exe in them…

I’ll try to take make it more reliable soon, it would be great if you could assemble a small problematic file and create a github issue ?

0 Likes

#28

I will, as soon as you tell me how to reproduce it !! I wiped the bad line and replaced it with a working one, and now I can’t make it not work… :unamused:

0 Likes

#29

btw, is there a way for the screen to follow the cursor?
if i ctrl+shift+c while inside a function that extends outside the screen, i can’t see the cursor anymore. I would expect to find this setting in ST itself, but it doesn’t seem to exist… is it intended in your plugin?

0 Likes

#30

[quote=“sfranky”]btw, is there a way for the screen to follow the cursor?
if i ctrl+shift+c while inside a function that extends outside the screen, i can’t see the cursor anymore. I would expect to find this setting in ST itself, but it doesn’t seem to exist… is it intended in your plugin?[/quote]

Could you report any issues and questions in the github repo?
Here: github.com/wuub/SublimeEyeball/issues
if it’s something related to Sublime integration (like the problem above)

Or here: github.com/wuub/eyeball/issues
if you think it’s a problem with the library itself (wrong selection, tracebacks and so on). If you aren’t sure which one is correct, just pick one at random :wink:

I tend to not check those threads regularly, and when I do I later forget about the reported issues.

0 Likes

#31

Thank you for using github, your issue is now resolved :smile:

0 Likes

#32

:smiley: :smiley: :smiley: :smiley: :smiley: :smiley: :smiley: :smiley: :smiley: :smiley: :smiley:
thank you!

0 Likes

#33

This is working great to me. Thank you very much!

0 Likes