CBAutoSave has been updated

The new version will be 1.10.0.
I have added an option to save an individual Document when its tab/window loses focus.

Update:  New version is now in the Visual Studio Gallery (as well as the private gallery).

The new version is in the private gallery, and will be uploaded to the Visual Studio Gallery “real soon”.

(I’m getting this error trying to upload the .vsix to the Gallery:
“If you see this page, it is because an error occurred in the system while trying to process your request. We apologize for the inconvenience. This error has been reported to our team for analysis.”)

VS AutoSave extension update – v

UPDATE: Now available in VS Gallery.  Unfortunately, I couldn’t figure out how to craft the manifest so the Gallery would accept the package if support for VS2015 Community Edition was included.  The package at the private gallery includes that support.


I discovered that the preference for saving the Solution when VS lost focus wasn’t getting saved correctly.
I have fixed that; the new version of CBExtensionPkg is available in the private gallery (

Looking at the package’s page in the Visual Studio Gallery, I couldn’t find a way to update the .vsix.  As far as I could tell, I need to unpublish the extension, then publish it again!  Surely, there must be a way for an existing package in the Gallery to get an update….

v. will appear in the Visual Studio Gallery as soon as I can figure out how to get it there.

Devenv.exe /SafeMode is my friend

Something strange happened to my VS2013 installation yesterday.

I logged in to Office 365, then needed to install Office 2016 locally in order to use my employer’s Skype for Business account.

After doing that, VS2013 wouldn’t start, it would crash to the “Debug / Check for solutions dialog”.  Click “Check…”, the dialog appears again, click “Check…” again, and finally “Cancel”.

After uninstalling and re-installing twice, I remembered that there were some command line options for starting Devenv.exe that might be useful.  /SafeMode did the trick.  I found what appeared to be a misbehaving extension (a message about not being able to load content in a tool window, or something).  Uninstall the extension, close VS2013; restart VS2013 w/o the /SafeMode switch, and it appears to work as expected.  Reinstall the troublesome extension, and it seems to back to normal.

I’ll probably never know what happened — was the extension’s apparent corruption due to Office 365/Office 2016/Skype for Business, or just coincidental with their installation?

I hope I remember the /SafeMode switch next time I run in to this kind of issue…

Devenv Command Line Switches


Posh-git for Powershell

I don’t know how I discovered this, but it is all but indispensable now…
A PowerShell environment for Git

When you are in a local git repo, posh-git shows you basic output of the “git status” command.  For example:
C:\users\hxchba\dropbox\posh-git [cbMods +1 ~2 -0 !]>

Displayed are the branch name, count of untracked files, count of modified files, and count of deleted files.

If I stage one file for commit (git add <filename>), the prompt will look like this:
C:\users\hxchba\dropbox\posh-git [cbMods +0 ~1 -0 |+1 ~2 -0 !]>

The easiest way (that I have found) to load posh-git is via the profile.example.ps1 file (included with posh-git) — it configures the prompt to show git status.
(Of course, if you already have a custom prompt, this could cause some issues….)

One problem I run in to in the corporate setting was having to work with very long UNC paths.  For example:

I created a function – ShortenPath – to shorten long strings (script is attached below). Then, I added it to posh-git’s profile.example.ps1, where the prompt function is defined.
After ShortenPath is used:

See my modified profile.example.ps1 for all the details.

(After downloading, change the .txt to .ps1, of course.)




Sharing configuration files

Git has a very useful ‘include’ facility to make sharing common configuration a pretty simple process.

In your ~\.gitconfig:

path = “c:/users/charles/dropbox/git/commonConfig”

Place this line early in .gitconfig; any settings in the common config file that need to be overridden on a particular computer can be included later in the local .gitconfig.

Be aware that if you want to list your global config, you will be disappointed with:
> git config –global -l

Instead, include the –includes switch to thoroughly process the included file:
> git config –global -l –includes



A number of years ago I started a new job at a software company.  A colleague walked me through the email system, network layout, and other infrastructure.  He explained how Brief was the standard editor, and was set up so everyone had a local config file that pointed to the common config file on the network.  The common config set up the necessary drive mappings, file shares, etc.  No matter what computer you logged in to, Brief was set up correctly based on your user id.

I thought of that as I find myself using SkyDrive more and more to share my own config files, script files, utilities, and other junk I want available on various computers.   It is very nice having _vimrc and my PowerShell profile always synchronized across computers, while being able to easily add computer-specific changes.
My local PowerShell profile can be identical on all computers that have a _skydrive environment variable pointing to the local SkyDrive dir:

# Load the common profile, shared via SkyDrive
. $env:_skydrive\PowerShell\cb_common.ps1
. $env:_skydrive\PowerShell\colorDir.ps1
# Machine-specific pieces here…

# Load posh-git example profile
. $env:_skydrive\posh-git\profile.example.ps1

Vim is configured almost identically.  In ~\_vimrc:
set runtimepath+=$_skydrive/vim
source $_skydrive/vim/_vimrcCommon

Visual Studio 2013 is doing this, now, too.  Not only does VS2013 save information in the user’s profile, but VSCommands 12 saves a whole bunch of options.


Save to a local dir sync’d with SkyDrive, DropBox, or any one of similar services, and your VS2013 experience can be consistent across computers.

Microsoft does something right, then finds a way to disappoint…

UPDATE the Second:

After quite a bit of googleBing, I discovered a post about “Power Button / Volume Up” for 30 secs after an incomplete / failed update.

Using that technique got the SP3 running again, screen right side up, keyboard working.  With fingers crossed, I tried the new power supply, and it appears to work as expected.

The SP4 keyboard works, too; while I can’t use the new fingerprint reader yet (that requires Win10, I think), the spacing of the keyboard and key pressure is an improvement over the previous model.

I’m going to file this as a remarkable coincidence in a failed update and a new piece of hardware…


WTF?!  It just restarted after the refresh, and it is still upside down, and the keyboard still doesn’t work…

I was going to upgrade to the SP4 Type Cover — all of a sudden that seems like maybe not such a good idea.


I have really enjoyed my Surface Pro3.  With a separate keyboard and monitor, it really could be a desktop replacement.

When I saw the new Surface Pro 4 Dock and read that it was compatible with SP3, that seemed like a great idea  – the new dock is a lot more compact, making it a lot easier to travel with.

Alas, once I plugged the SP3 in to the SP4 dock all sorts of things started going awry – screen is locked upside down, keyboard doesn’t work, etc.

I put the SP3 in the old dock — screen came around, but the Type Cover keyboard still didn’t work, but the external keyboard did!?

On the road this morning, and, out of the dock, the screen is locked upside down, and the keyboard doesn’t work.

“Refreshing” the SP3 now, which, while not a full re-pave, will require me to reinstall all my desktop applications.

Thanks, Microsoft, for delivering worse than nothing…

Lync, window-opener extraordinaire…

My employer relies on Microsoft Lync for IM and on-line meetings.
Maybe the UI/UX experience is designed to make the corporate overlords feel good because Lync does so much work when you join a meeting…

  1. Open the meeting invite to get the link to the meeting.  (This is the 1st window.)
  2. IE opens and goes to some Lync-related page.  (Window 2.)
  3. The Lync client opens.  (I have no idea why.  Window 3.)
  4. Finally, the window with the actual meeting opens!

Four windows to close now for one meeting; I only had to interact with two of them — the meeting invite to get the link to the meeting, and the meeting window itself.

Does anybody at Microsoft use Lync and think this is a good user experience?

In the Gallery!

UPDATE, 28 June 2016:

The package has been renamed to CBAutoSave in the Visual Studio Gallery.  Icons and images got a makeover, but no other functionality changes.

I have uploaded my Autosave extension for Visual Studio to the Visual Studio Gallery.
Look for the CBExtensionPkg.
(I’ll continue to update the private site, as well, for people that have that set up and want to keep using it.)

I created a new WinServer 2012 VM with VS2013 Community edition on Azure and installed the extension from the Gallery without problem.

Let me know of issues you find…