Ask Your Question
0

Self customized preferences strip script failed to work for Wing Pro 7.2.5.1.

asked 2020-09-14 04:18:12 -0500

hongyi-zhao gravatar image

updated 2020-09-14 09:27:13 -0500

Hi,

Each time when I am quitting wing, I want to let it strip the following sections from the ~/.wingpro7/preferences:

main.update-history
main.last-prefs-page
main.prefs-version

For this purpose, I create the following script ~/.wingpro7/scripts/preferences-strip.py with the following content:

import wingapi

def topdir(file):
    return os.path.dirname(os.path.abspath(os.path.expanduser(file)))

def _quitting():
  # Do something here
  import os
  import re

  flag = False
  scripts_directory=topdir(__file__)
  settings_directory=os.path.dirname(scripts_directory)
  preferences = settings_directory + '/preferences'
  lines = []
  with open(preferences, 'r') as f:
      for line in f:
          line = line.strip('\n')
          if re.match(r'^main[.](update-history|last-prefs-page|prefs-version)', line):
              flag = True
          else:
              if flag and not re.match(r'[ ]', line):
                  flag = False
          if not flag:
              lines.append(line)

  with open(preferences, 'w') as f:
      f.write('\n'.join(str(item) for item in lines))
      f.write('\n')

wingapi.gApplication.fSingletons.fGuiMgr.connect('about-to-quit', _quitting)

But after I quit wing, it seems the script don't strip the corresponding sections from the ~/.wingpro7/preferences, see following for detail:

$ egrep 'main\.(last-prefs-page|prefs-version)' .wingpro7/preferences
main.last-prefs-page = (0,
main.prefs-version = 8

Any hints for this problem?

Regards, HY

edit retag flag offensive close merge delete

1 Answer

Sort by ยป oldest newest most voted
0

answered 2020-09-14 08:58:53 -0500

It looks like about-to-quit is emitted prior to saving everything and thus the preferences get overwritten. It wasn't really intended for this purpose. Instead of writing this as a script for Wing I would instead write a wrapper that runs Wing and then when it exits strips the preferences file. The wrapper will need to pass through all args to Wing, of course.

edit flag offensive delete link more

Comments

Still, I'm not so clear on how to do it. Any more hints for this job?

hongyi-zhao gravatar imagehongyi-zhao ( 2020-09-14 21:14:46 -0500 )edit

On Linux or macOS it would be something like this:

#!/bin/sh
/path/to/wing "$@"
python script-to-prune-prefs.py

Then do 'chmod +x <scriptname>' with <scriptname> replaced by whatever you called this script. Then starting that script will run Wing and fix the prefs at the end, after Wing exits.

Wingware Support gravatar imageWingware Support ( 2020-09-15 08:47:51 -0500 )edit

If so, what's the purpose of ~/.wingpro7/scripts/ directory? IMO, it seems if such job can be done in the ~/.wingpro7/scripts/, it will be more graceful.

Regards, HY

hongyi-zhao gravatar imagehongyi-zhao ( 2020-09-15 08:55:02 -0500 )edit

Look at the scripting API to see what it's for -- tons of things, but also not everything imaginable: https://wingware.com/doc/scripting/index

Wingware Support gravatar imageWingware Support ( 2020-09-15 09:15:21 -0500 )edit

If I use this method, then the wingapi relevant codes should be pruned from the script. Am I right?

hongyi-zhao gravatar imagehongyi-zhao ( 2020-09-15 17:57:16 -0500 )edit

Your Answer

Please start posting anonymously - your entry will be published after you log in or create a new account.

Add Answer

Question Tools

2 followers

Stats

Asked: 2020-09-14 04:18:12 -0500

Seen: 52 times

Last updated: Sep 14