Forum Archive

ANSI escape sequence codes

Phlurim

The ANSI escape sequence codes don’t seem to work for printing bold text in Pythonista 3 on my iPad Pro. Many forum contributors suggest code like the following, which I copy & paste. And they all say it’s as simple as this. It does seem simple, which is exactly what I’m looking for. But it doesn’t seem to work for me.

    *print("This is bold text - looks like:",'\033[1m' + 'Python' + '\033[0m')*

My Pythonista 3 console output:

    *This is bold text - looks like: [1mPython[0m*

And the word ‘Python’ is not shown as bolded.

Am I forgetting something? Is there a particular module that I’m suppose to import first? Is ANSI recognized by Pythonista? Is there a unicode alternative to ANSI?

Please advise. Thank you.

cvp

@Phlurim printing on the console in Pythonista does not support ANSI commands

cvp

@Phlurim if really needed and important, you could use this little function I had written for somebody else who wanted colored printing in the console.
I just have modified it to support colored and bold in the console.

from   objc_util import *
import ui

UIColor = ObjCClass('UIColor')
NSMutableAttributedString = ObjCClass('NSMutableAttributedString')
UIFont = ObjCClass('UIFont')

@on_main_thread
def colored_bold(txt):
    from objc_util import ObjCClass
    win = ObjCClass('UIApplication').sharedApplication().keyWindow()
    main_view = win.rootViewController().view() 
    ret = ''
    font = UIFont.fontWithName_size_('Menlo', 15)
    traits = 0 | 1 << 1
    font_bold = UIFont.fontWithName_size_traits_('Menlo', 15,traits)

    def analyze(v):
        for tv in v.subviews():
            if 'OMTextView' in str(tv._get_objc_classname()):
                su = tv.superview()
                if 'OMTextEditorView' in str(su._get_objc_classname()): 
                    continue
                # tv = console is a OMTextView baseClass = UIScrollView
                #print(dir(tv))
                if isinstance(txt,list):
                    txt_list = txt
                else:
                    txt_list = [txt]
                for ele in txt_list:
                    bold = False
                    if isinstance(ele,tuple):
                        t = ele[0]
                        c = ele[1]
                        if 'bold' in ele:
                            bold = True
                    else:
                        t = ele
                        c = 'black'
                    color = UIColor.colorWithRed_green_blue_alpha_(*ui.parse_color(c))
                    attr_str = NSMutableAttributedString.alloc().initWithString_(t)     
                    if bold:
                        attributes = {ns('NSColor'):color, ns('NSFont'):font_bold}
                    else:       
                        attributes = {ns('NSColor'):color, ns('NSFont'):font}
                    attr_str.setAttributes_range_(attributes, NSRange(0, len(t)))
                    tv.appendAttributedText_(attr_str)
            ret = analyze(tv)
            if ret:
                return ret
    ret = analyze(main_view)

if __name__ == '__main__':
    colored_bold([('red text', 'red'), ' normal ', ('blue text', 'blue','bold')])
    print()

Phlurim

Many thanks. Your code works great on my iPad.

Phlurim

I’m a newbie, and am having lots of fun playing with your slick code. Thx again for sharing it.

cvp

@Phlurim For info, your print line works in Pyto app

ccc

Pyto bundles colorama...
* https://github.com/tartley/colorama#colored-output

cvp

@Phlurim thus, you have some ways in Pyto (see @ccc last post ) but it is not easy to choose between Pythonista and Pyto, only in function of this functionality. That's the problem for a big number of Pythonista's users (including me): leave Pythonista for Pyto or not.

Phlurim

Thanks. Before I installed Pythonista on my iPad Pro, I had already installed Pyto
last winter on my Mac desktop (Monterey Intel). Your code works great via Pythonista, but I'll give the ANSI escape sequence code a try on Pyto.

I find that Pythonista, and it’s tablet environment, are more newbie-friendly than Pyto, for my particular style of self-taught learning. Am having fun playing with Python at my own leisurely pace (my ‘hobbies’!) It’s also good therapy for propping up my aging memory (I'm a 77½ yr old retired Canadian electrical engineer with a ‘not-dead-yet’ insatiable desire for learning new things.)

One final question: I’ve seen the occasional on-line comment that Python 3 and Pythonista 3 are now obsolete, and that programmers should abandon them, and upgrade ASAP. Is this true?

Thx

ccc

Python is not obsolete... https://pythonbytes.fm/episodes/show/298/unstoppable-python
* https://www.infoworld.com/article/3669232/python-popularity-still-soaring.html
* https://www.infoworld.com/article/3636789/python-tops-tiobe-language-index.html
* https://pypl.github.io/PYPL.html

cvp

@Phlurim said

I'm a 77½ yr old retired Canadian electrical engineer with a ‘not-dead-yet’ insatiable desire for learning new things.

I'm a 72½ yr old retired Belgian electrical engineer with a ‘not-dead-yet’ insatiable desire for learning new things. 😉