Windows 10: On lock screen, 2nd monitor does not recover from power-saving mode

(Workaround is in place for this issue, but I want to leave some notes here in case I start looking at it again.)

OS: Windows 10 Pro 64-bit
GPU: NVidia GeForce GTX 750
GPU Driver:
Monitors: LG Flatron w1942TQ (primary), HP w1907 (secondary)

Setup: Windows 10 Desktop PC. Two monitors connected to video card in one of the following ways:

A) Video Card HDMI -> HDMI-to-DVI cable -> Monitor DVI
B) Video Card DVI -> DVI cable -> Monitor DVI
C) Video Card DVI -> DVI-to-VGA adapter, VGA cable -> Monitor VGA

I would prefer option A for contributing the least amount of physical bulk to the cabling of my system.

Problem: When locking the screen (Win+L), the monitors will go to sleep after some time has passed to save power. Upon hitting a key or moving the mouse, both monitors should wake up. When connected via DVI or HDMI-to-DVI, the second monitor will not recover until it is powered off and on again by hand.

When connected with a DVI-to-VGA converter, the second monitor recovers as expected.

Next Actions: Currently I’m using DVI-to-VGA for the secondary monitor. Another option might be to make a registry modification to disable monitor sleep on the lock screen entirely (which I haven’t tried, but someone wrote up the instructions here.)

I’m just curious why it doesn’t work with a digital signal… I haven’t done enough testing to pin down what’s at fault. I updated GPU drivers, but haven’t checked for new BIOS/UEFI versions, haven’t tested with another HDMI monitor, and haven’t swapped the primary/secondary designation for the two monitors. Had enough for today, and there are better things to do to prepare for the new year. Will update if I learn more about what’s going on.

11 Nov 2017 — Currently using Fedora 26, and the same behavior is present. I found an option in the HP w1907 which prevents the monitor from going to sleep while no signal is detected. (Management… -> Power Saver -> Off.) This prevents the issue, but leaves an annoying “Check Signal Cable” test message that ping-pongs across the display, until either the PC starts providing signal again, or you turn the monitor off. Using an analog VGA cable is still a better solution, since the PC is still able to wake this monitor back up following going to sleep.

Maybe analog VGA has some capacity to wake up a monitor that digital DVI/HDMI is lacking.

(e: 11/Nov/2017: updates)



Curses is a venerable API for interacting with computer terminals on a per-cell basis. What follows are some quick and unfinished notes about using the PDCurses implementation with C terminal programs in Windows 10 while I dabble with the library.

Many Curses functions return ERR (-1) upon failure. My notes do not cover error handling for all of these cases, because the tutorials I find on the net don’t seem to either. Nonetheless you may want to catch these error codes if you are writing something more serious.


Curses resources

Pradeep Padala’s venerable NCurses Tutorial

Invisible Island NCurses FAQ

Curses Questions and Answers on Stackoverflow

(Note: ncurses is for POSIX systems. PDCurses is a different implementation with support for Windows.)


Adding PDCurses to a Code::Blocks project

I seem to forget how to do this every time I reinstall Windows. There is video walkthrough by Cymonsgames here.


Startup and Shutdown

#include <stdlib.h>
#include <stdio.h>
#include <ctype.h>

#include "curses.h" // Get Psyched!

int main() {
  initscr();        // Start Curses.
  start_color();    // Initialize color.

  raw();            // Accept raw keyboard input, so you don't have to
                    // strike Enter after every keypress.

  noecho();         // Don't echo user input back to the screen.

  keypad( stdscr, TRUE ); // Accept arrow keys, function keys, etc as input.

  endwin();         // When you are done, free Curses resources and return
                    // to normal command prompt behavior.

  return 0;



Printing text and drawing individual characters

Curses has a suite of printing functions, from printf()-style variable length formatted strings, to plotting individual characters. I use mvprintw() and mvaddch() most often, along with attron() and attroff() to control color and brightness.

 mvprintw( 10, 10, "Hello, World" ); // Print text (Y, X, printf-style
                                     // formatted string).

 attron( A_REVERSE );                // Reverse the FG / BG colors going
                                     // forward.

 mvaddch( 10, 22, '!' );             // Draw a single character.

 attroff( A_REVERSE );               // Disable reversed attribute going
                                     // forward.

 refresh();                          // Force screen update.

 getch();                            // Wait for user input.



With raw(), getch() will wait for the user to press a key, and return a key code. You can use getch() alone without an assignment to pause the program until any key is pressed. Many keys can be checked by their char literal value or escape sequence (like “\t” for the tab key), and PDCurses defines many macros to represent non-typewriter keys, such as KEY_LEFT, KEY_UP, etc, for the arrow keys.

int input = 0;

while( input != toupper('q') ) {
    input = getch();

    clear();             // wipe screen of previous contents
    mvprintw( "You pressed key %c, code %d.", input, input );

PDCurses doesn’t seem to have macros for the number pad when Numlock is on, so you will have to define those yourself.

Some keys generate multi-byte scancodes, particularly the Escape key. You may need to call getch() again to confirm. (Esc is scancode 27 followed by ERR (-1)).


Cursor control

The blinking cursor moves around as Curses draws and prints to the screen. If you want, you can manually position the cursor at the end of your update routine, or disable it.

curs_set(0); // 0: Don't show
             // 1: Blinking underline
             // 2: Blinking square.

move(y, x);  // Specifically move the cursor to a
             // coordinate.

Color Pairs

Though Curses does define macros to represent eight colors (0 through 7 — COLOR_BLACK, COLOR_WHITE etc), you can’t pass these to the Curses drawing functions directly. Instead, you initialize a series of color pairs, and pass the index of that pair as an attribute. If you want to address all 8 foreground and 8 background colors independently, you can initialize 64 pairs with each combination.

(Note: Color Pair 0 is already initialized, and reserved for monochrome mode.)

int cursesIndexColorPairs(void) {
    int n_colors = 8;
    int color_index_start = 1;
    int i;

    for( i = 0; i < n_colors * n_colors; i++ ) {
        if( init_pair( color_index_start + i, i % n_colors, i / n_colors ) == ERR) {
            return ERR;
    return 0;


Bright and Dark colors


The Windows command prompt supports legacy IBM PC Text Mode colors. There are 16 colors total, but they are accessed as 8 base colors, plus a brightness flag. The foreground and background of a given character get their own color and brightness parameters. In DOS, if the background color has a brightness flag, then the foreground color will blink on and off and the background intensity will be unchanged. A non-fullscreen Windows command prompt will just draw the background color as bright.

PDCurses will draw a character with a bright foreground if A_BOLD is passed as an attribute, and it will draw with a bright background if A_BLINK is passed, and both if they are passed sequentially or binary OR’d together. I can’t imagine A_BLINK serving as a bright background would be portable on other systems, but it’s the only attribute I could find that did so on Windows 10.


#define N_COLORS 8

int colorGetPair(int fg, int bg) {
  // return monochrome (pair 0) if requested colors are out of range
  if(fg < 0 || fg > N_COLORS || bg < 0 || bg > N_COLORS ) {
    return 0; 
  else {
    return 1 + fg + (bg * N_COLORS);

void colorSet( int fg, int bg, int fg_intensity, int bg_blink ) {
  if( fg_intensity ) {
    attron( A_BOLD );
  else {
    attroff( A_BOLD );

  if( bg_blink ) {
    attron( A_BLINK );
  else {
    attroff( A_BLINK );

  attron( COLOR_PAIR( colPair( fg, bg ) ) );

int main() {

  // ... snip
  colorSet( COLOR_MAGENTA, COLOR_CYAN, 1, 1 );
  mvprintw( 0, 0, "\"We need more searing Magenta and Cyan,\"\n said the CGA Project Lead." );

  // ... snip



getch() timeout via halfdelay()

halfdelay() will add a timeout to getch(), measured in tenths of a second, if no user input is received. It can be used as a 10FPS sleep timer for animations, while still allowing user intervention. Use nocbreak() to disable the timeout.


Screen Dimensions

Upon calling initscr(), the display dimensions are stored in two variables: COLS (width) and LINES (height). These variables do not seem to update upon resizing the window, but if you change the size settings, exit and restart the program, the new dimensions will be detected. My understanding is that other Curses environments are able to handle runtime screen resizing.


Windows 10 command prompt blanking on resize

If you find the Windows 10 command prompt is blanking out the display upon resizing the window:

  • Right-click the window title bar and choose Properties
  • Goto the Layout tab
  • Uncheck Wrap text output on resize




With some caveats, you can basically drop in the SDL version of pdcurses.dll, along with v1.2 of sdl.dll in place of the command line version. Screen dimensions are 80×25 cells by default — to adjust, it seems you need to change environment variables pdc_lines and pdc_cols. You can do this within your program prior to init_scr() with putenv(), or you can set the environment variables temporarily within a command prompt with the SET command.

putenv() :

putenv( "pdc_lines=20" );
putenv( "pdc_cols=20" );

// ...


Windows SET:

C:\set pdc_lines=20

C:\set pdc_cols=20



In SDL mode, you can drop in a new monospace bitmapped font with new dimensions — upon calling initscr(), PDCurses will search for and use pdcfont.bmp in the working directory. The PDCurses page on SourceForge has a set of example fonts. The font layout is Code Page 437. (Update: I’m having issues changing the foreground color when using a custom font — maybe I’ve missed a setting somewhere.)


Todo List for this post

  • Extended Character Sets (AFAIK no-go in SDL mode, but Code Page 437’s symbols should be available.)
  • Portability between PDCurses and NCurses
  • Mouse support: Curses defines structures and functions for reading mouse events. If this actually works in PDCurses and Windows 10, I would assume the command prompt application’s own mouse interactions (pausing everything to allow highlighting and copying) would interfere. But maybe the SDL port would be better for that. Will try it sometime later.
  • Setup of NCurses on Ubuntu
  • refresh() : Pradeep’s NCurses tutorial says that drawing is queued and refresh() updates the screen, however it seems that draw updates show up just fine in my programs without it. Maybe this doesn’t apply to my specific OS, or to PDCurses, or I’m missing a setting somewhere.
  • clear() : clear() wipes the screen. I have found on Win10 that it sometimes causes flicker. TODO investigate.
  • Modifying terminal colors: I can’t get this to work.
  • Curses Windowing: I haven’t touched Curses’s own windowing system. It seems to be intended for non-overlapping screen sectors.
  • Project Pluto’s PDCurses fork is a fuller implementation. This looks awesome and I need to dig into it sometime.
  • Foreground color change not working for me when I use a custom font in SDL mode.

(e: 6/Nov/2016: Screen dimensions)
(e: 11/Nov/2016: Input, Screen dimensions. SDL stuff)
(e: 3/Feb/2017: Color attribute wrapper, wording)
(e: 11/Feb/2017: Wording; corrected pdcfont.bmp; added putenv(); added a note that foreground color change isn’t working for me when using custom fonts with the SDL DLL.)

Thrift Log – Microsoft SideWinder Plug & Play Game Pad (X04-97702)


This USB controller works out of the box with Windows 10, which is nice, considering that the box says “Designed for Windows 98”. Wikipedia says the release year was 2000.

The grip feels pretty decent, but I don’t know what to think of its directional pad. It’s a weird, smooth, inverted bump that can be pushed down in addition to being nudged in the cardinal and diagonal directions. The travel downwards is not a control or button. Honestly, I’m not sure why it does that.


I had to grab one of these just for the camp factor. Have you seen those SideWinder marketing videos?

SideWinder FreeStyle Pro

SideWinder Dual Strike

SideWinder Strategic Commander

SideWinder Force Feedback Wheel

Granted, this Plug-and-Play unit is pretty spartan and ordinary in comparison. I probably dropped too much on it ($8, which is approaching the cost of an iBuffalo USB SNES pad clone), but I’ll keep it plugged in for a week and try some games with it and report back on whether it’s any good.

Update: So I played some Shovel Knight and Umihara Kawase with this controller. The right-side action buttons are A-OK, as are the left and right shoulder buttons. As for the directional pad, my left thumb feels like it’s been through a workout. Since the d-pad has a concave indentation (maybe better described as a crater), the edges of your thumb are constantly being squeezed against a circular ridge of plastic. The dpad is also rotated slightly clockwise, and it’s not always clear where straight down or straight up are by feeling alone. The controller has transparent plastic, and you can see that the d-pad component is mounted to a larger PCB disc which is responsible for pushing down on the contacts. It’s almost like a short joystick that’s been recessed into the controller. Weird.

Unfortunately, the dpad really sabotages this controller.

Thrift Log – Microsoft Sidewinder X6 Keyboard


Found for about $6 CAD. I ended up grabbing it out of curiosity for the weird dials, numerous macro keys, and the Microsoft Sidewinder branding.

Sidewinder was Microsoft’s pre-XBox, “extreme” gaming-oriented peripheral brand, and they slapped the name onto various input devices. The Wikipedia article on Sidewinder goes into some detail on the history, cancellation, resurrection and re-cancellation of the brand. Some of the controller designs are pretty out-there. This keyboard hails from around 2008.

The Sidewinder X6 has a column of macro keys along the left side, a bunch of macro keys above the Funtion Key row, and two curious dials on the top-right. The underlying mechanism is a rubber dome membrane. To use the macro keys, you need to install Microsoft’s Mouse and Keyboard Center software.

So, why two dials? One is for volume, and the other… drum roll … dims the red and amber lighting beneath the keys.


(Re: the brighter light coming from the ‘S’ key: somebody scraped away the paint on that key for whatever reason.)

Where’s the number pad? The number pad is a separate component that can be connected to either the left or right side of the keyboard. I like the idea of a modular keyboard, but the downside is that the components can be lost: the unit I found didn’t come with this proprietary attachment.


I don’t really have a use for the macro keys, but gimmicks aside, it’s a decent backup USB keyboard. One person on Amazon really didn’t like the placement of the Esc key (on standard layouts it appears above tilde (~), but on the X6 it’s over further to the left).

Thrift Log – Cicero Pentium 4 PC


(This is too big for me to photograph in a convenient manner, but here is the Cicero badge on the front for posterity.)

Cicero is an old Future Shop / Best Buy brand, used to sell PCs from other manufacturers. I picked this up yesterday because I have a thrift store addiction the motherboard has an AGP video slot (I’ve got an AGP card lying around with an S-Video port that I want to try sometime), and the case seems to be standard ATX with decent build quality. It cost about $10 CAD.


Stats upon acquiring:

Core Components

  • Case: F-IWF2-03
    • I couldn’t find any relevant webpages on this part number, but it seems to be a standard ATX mid-tower. Build date 9/28/2001.
  • Motherboard: Gigabyte GA-8IDML REV 2.0
  • CPU: Intel Pentium 4 @ 1.5 GHz
  • Memory: 1 x Spectek 256MB PC133 SDRAM
  • PSU: TurboLink ATX-CW420W (Standard ATX)


  • Hard Disk: Maxtor D540X-4K (PATA, 3.5″, 40 GB)
  • 3.5″ floppy disk drive: Alps Electric DF354H090F
  • CD-R/RW: LG CED-8120B (PATA)


  • Video Card: NVidia NVTNT2MA


  • Wi-Fi: D-Link AirPlus G CDWLG510..B1 [sic]
    • Detachable antenna is cracked
  • Modem: AMKO MDP3900V-U(B)


  • OS: Windows XP Professional Edition
    • Whoever previously had this system wiped the hard disk and performed a fresh install of Windows XP, but didn’t activate it, and didn’t install the correct version for the serial key sticker on the box. Wiped and reinstalled.


With only 256 MB of RAM, using Windows XP on this machine is not too pleasant. Gigabyte lists Windows 98 drivers for this motherboard, so maybe Win98SE would be a good fit. The case is a good candidate for gutting, maybe for a low-end server, though ventilation could be an issue for anything producing a lot of heat.


Edit 19/Sept/2016: 3.5″ Floppy Drive, not 3.25″

Vintage PC Notes

These are some scattered notes about vintage PC configuration and maintenance, mostly related to a Dell OptiPlex GX1 (Pentium III CPU) that I adopted from work. Subject to change, no warranty, etc, etc.


Windows 98SE: Installation

To install Windows 98, you need both the installation CD, and a boot disk. The boot environment lets you partition and format the hard drive. After this, you can run SETUP.EXE on the CD-ROM drive from this environment to start the installation.

Amazingly, Microsoft still has an extensive TechNet article outlining the Win98 install steps online.

If you need a floppy disk drive to create the boot floppy, external USB 3.5″ drives are still available if you look for them.


Windows 98SE: Start in DOS Mode

See here:


IDE (Parallel ATA) Hard Drives

One ribbon cable supports two drives, and one drive needs to be designated the Master, and the other the Slave. I don’t think there’s any speed or priority difference between the two, it’s just a way to enumerate resources. Alternately, they can both be set to Cable Select mode, in which case the BIOS will figure out enumeration on its own, but both drives and the BIOS must support this setting.

The ribbon cable connector which is furthest away from the others is for the motherboard. It shouldn’t matter which of the two remaining connectors is used for the master or slave — the jumpers define which is which.

Master/Slave/Cable Select has to be configured by hand on each drive to match what the corresponding settings are in the motherboard BIOS. Unfortunately, the jumper settings vary by manufacturer and drive model. If there is not a clear diagram on the drive label indicating which pins are for which setting, look for any kind of jumper layout indicator on the drive stickers, such as “J50”. In this case, the J50 setting for Master is to stick the jumper on the two far-left pins.

Floppy disk drives

Floppies usually have their own ribbon / bus with fewer lines and a small twist on one end. The twisted end connects to the drive.


CD-ROM / DVD-ROM drives

CD/DVD readers have an additional audio passthrough port to the motherboard for passing CD Audio.


RAM DIMM / SODIMM Identification

See here:


Dell OptiPlex GX1 – Slowdown and Speedup keyboard shortcut

This PC has a nice “turbo key” style speed shortcut. Hit CTRL + ALT + \ or CTRL + ALT + # (varies by OptiPlex model) to toggle between a slow mode and normal operating speed.

This can be done at any time in DOS, and in Windows if you have a DOS Prompt in focus or full-screen (Real Mode). The slow mode is very slow, but it can remedy issues such as ISA Sound Blaster cards not playing audio correctly because the CPU is too fast.

Thanks to Vogons user retrofanatic for making me aware of this — the only other way to do it is to reboot and change a setting in the BIOS.


Dell OptiPlex GX1, Ubuntu Server 15: Blank display (no signal) after BIOS startup

My understanding is that old video hardware sometimes gets confused by the graphical video mode now used in the GRUB bootloader. You can try forcing GRUB to start in console mode instead.

To force console mode:

  • Use the Ubuntu installation disc to enter rescue mode. Choose the root partition and enter the terminal.
  • sudo vim /etc/default/grub
  • :colorscheme evening if you are having a hard time seeing the text.
  • Press insert to switch to Edit Mode.
  • Add nomodeset in the GRUB_CMDLINE_LINUX_DEFAULT= field.
  • Uncomment the GRUB_TERMINAL=console line.
  • Save your changes — press Esc to leave edit mode, then type :wq to save and quit.
  • Back at the terminal, update the GRUB bootloader information with sudo update-grub. After this is completed, type exit to return to the rescue prompts and reboot the system.

(Sources: Ubuntu Forums – “Thread: Out of frequency, Dell Optiplex GX 1”Ask Ubuntu – “How do I set ‘nomodeset’ after I’ve already installed Ubuntu?”)

VirtualBox Administration Notes

(Note: This post probably won’t be touched again due to my switching to KVM.)

This is a placeholder for some notes about command-line installation and administration of VirtualBox, Oracle’s free virtualization suite. Most tasks can be handled from the VirtualBox GUI, but to work on a terminal-only server, you will need to interact with the VboxManage command line interface.

The VirtualBox end-user documentation is excellent, and most of these notes are taken directly from it unless otherwise noted.

Unfortunately, I don’t have a headless server set up right now. I’ll just leave the most basic start/stop commands here, and will add more to this post when I have the environment back up and running.

Quick Command Cheat-Sheet

Check what’s registered/running

Show all VMs
VBoxManage list vms

Show running VMs
VBoxManage list runningvms



Start up a VM
VBoxManage startvm “your_vm” &

Start up a headless VM (no GUI)
VBoxHeadless -startvm “your_vm” &

Hibernate a VM
VBoxManage controlvm “your_vm” savestate

ACPI power down signal
VBoxManage controlvm “your_vm” acpipowerbutton

Poweroff a VM (pull the plug)
VBoxManage controlvm “your_vm” poweroff


Cleaning House

Unregister and Delete a VM
VBoxManage unregistervm “your_vm” –delete



Notepad++ is a free and open-source text editor for Windows, and a great substitute for the standard text editor that ships with Windows. It’s packed with features, and supports 3rd party plugins — the following are some notes about features I find come in handy.

I have limited experience with keyboard-driven editors like Vim and Emacs. These may cover the same functionality, and more — I don’t really have the experience to say. In any case, I think NP++ strikes a nice balance between features and accessibility in a Windows environment.


Block Editing

To highlight 2D blocks of characters, hold SHIFT + ALT and move the cursor with the arrow keys. Alternatively, hold ALT, and then click and drag the mouse cursor. You can copy and paste blocks, and insert and delete characters along multiple lines. Two use cases are 1) to insert new columns or ASCII separators into tables, or comment out a multi-line block of code, and 2) to block-copy and paste boxes and other shapes in ASCII diagrams.

npp_block_edit1 npp_block_edit


Find (in files)

Notepad++ allows for searching within the current document, among all currently opened docs, and within a directory path. There are three search modes: one that uses normal / literal words and phrases, one with an extended parsing mode that includes escaped characters, and one with Regular Expressions. For in-depth log analysis, you are better off using the proper command line tools,  but Notepad++ can still be useful for quick searches. My experience is that it has trouble with stability when opening and searching 100+ megabyte files.

The search results are shown in a horizontal pane. Double-click a result line to open the document at that line number. These results can also be copied and pasted into a new document and be searched through.

npp_search1 npp_search2


Configure Notepad++ to use spaces instead of tab characters for Python only

Select Settings -> Preferences and choose Tab Settings.

Select from the list box, select ‘[Default]‘ :

  • Uncheck ‘Replace by space

From the list box, select ‘python‘ :

  • Uncheck ‘Use default value
  • Set tab size to your preference (I use 4)
  • Check ‘replace by space

Close the settings box. This change takes effect immediately, but does not apply retroactively. To convert tabs to spaces in an existing py source file, you can select Edit -> Blank Operations -> TAB to Space.


Enable the Documents sidebar

(If you do not see the options below, try upgrading to the latest version of Notepad++. I have this set up in v6.9.2 as of 13/Aug/2016.)

The file list can be enabled here (Settings -> Preferences -> General -> Document List Panel: Check Show. Optionally disable extension column for a cleaner look.) :



Save document state on exit

This can be configured within Settings -> Preferences -> Backup.

  • Check Remember current session for next launch.
  • Check Enable session snapshot and periodic backup.

Unsaved files will be saved to the below directory when you exit NPP. They will be restored when you start the program again.


Some caveats with this feature:

  • If Notepad++ crashes, the files may remain there without being cleaned up. They could also be corrupted and lost if it can’t recover gracefully (let’s say you did a Find in Files search and Notepad++ croaked in the process).
  • Be careful not to leave sensitive notes in unsaved files when you close Notepad++, because they will be saved straight to disk with no encryption.

(edit 10/30/16: wording)

Input Sharing Software

These programs that allow you to share keyboard and mouse input across multiple computers over the LAN, without requiring any additional hardware. Input sharing fills a certain niche that might not be covered entirely by a KVM switch or remote desktop.

I’ve only had experience with Synergy, but I hope to try out the other ones when I have some time and a use case to test them out.



When everything is working correctly, Synergy lets you control Windows / Mac / Linux machines from a single system over your LAN. Sharing input across different operating systems is not an easy task though, and sometimes problems happen that require restarting the service and/or entire systems.

I think overall stability has gotten better since I last tried it a few years ago. There are sometimes conflicts with mouse input in games —  here is a Github thread on some known issues. Behavior is more predictable in a serious work environment.

Synergy’s licensing and status is a little confusing. There used to be a free and a premium/pro version, but now, my understanding is that it’s technically open-source and free, but Windows binaries are behind a paywall. You can build from source however — I think?

Note: My Synergy version is 1.7.6.


As said above, I have not tried the programs below, but I keep track of them in case I have a use case for Windows-only input sharing.


Mouse Without Borders

Microsoft’s Mouse Without Borders provides input-sharing across up to four Windows systems.


Input Director

Input Director seems to get favorable comparisons against Synergy if you only need to control Windows machines. Will add any thoughts if I have a use case for it. Free for non-commercial use.



Multiplicity is Windows-only and paid software.



ShareMouse works with Windows and Mac. There are free and paid versions.


(e:10/Jun/2017: Wording)

WikidPad 2.2 Administration Notes

WikidPad is an open-source Desktop Wiki that I’ve used to consolidate personal notes. This post describes some adjustments to WikidPad’s default settings that I prefer, and some quick housecleaning and formatting reminders.

I’m using WikidPad version 2.2 for Windows.

(Note: As of Sept/2017, I’m migrating my notes from WikidPad over to Zim. I’ll keep this post up, but future additions are unlikely.)

The main thing you need to know to get started with the program is that CamelCase words and phrases enclosed in [square brackets] will act as links to new pages. Press Ctrl+Shift+Space to toggle between the monospace Editor Mode and the more readable Viewer Mode. Changes autosave periodically.

One weakness of the program is that the larger a page is, the longer it takes Editor Mode to apply all formatting. Long pieces of monospace text are probably better suited to another program, unless you are proactive in breaking up your notes into subsections.

1: Initial Setup of WikidPad and Wikis

Initial Post-Install Configuration of the program

Enable web broswer-style middle-click to close page tabs

  • From the menu bar, select Extra -> Options -> Mouse.
  • Set Middle Click on Tab to Close Tab.


Do not add spaces between CamelCase words in page titles

Do this if you are annoyed by “CamelCase” words becoming “Camel Case” in the page title. Existing pages with spaces will not be affected, but newly made pages will not have spaces.

  • From menu bar, select Extra -> Options -> Current Wiki -> Headings.
  • Set Wiki word to heading to As is.


To enable CTRL+F Finding in the Viewer: Change the preview renderer to Internet Explorer.

The built-in renderer does not support CTRL+F finding on a single page. You can use IE instead:

  • From the menu bar, select Extra -> Options… -> HTML Preview/Export.
  • Set Preview Renderer to IE.
  • Click OK and restart WikidPad.

I’ve had some intermittent issues with the IE renderer showing a 404 Error when switching to Viewer Mode. Toggling modes quickly or refreshing the page clears it.


Initial Setup of a Wiki

Disable CamelCase linked words

By default, CamelCase words will automatically be wiki-links. This is convenient, but may be a problem if you work with terminology that involves this kind of casing often.

  • Add this to your WikiSettings node: [global.camelCaseWordsEnabled: false]


Set the background color to something off-white

  • Add this to WikiSettings[global.html.bgcolor: _your_color_here_ ]

You can use a predefined color (ex: WHEAT), or HTML hex color format (ex: #F5F5FF)See Format -> Color Name for a list of predefined colors.

Press CTRL+S in Editor Mode to push the color change out immediately.

  • You can also change text color, if desired: [global.html.textcolor: BLACK]


2: Housecleaning

Deleting parentless nodes

These are pages that are not linked to in any other page.

  • When in Editor Mode, hold Ctrl+Shift+Up for a list of articles that have no parent/child link relationship. A small dialog box will appear.
  • Double-click a node to open it up in the editor to check if anything you want to keep is in there.
  • Ctrl+click to highlight the nodes you wish to remove. WikidPad won’t allow you to delete the top-level root node.
  • Click Delete.



3: Formatting And Media

Insert monospace font

<code>Use the HTML code tag.</code>

Use the HTML code tag.

Use a different font size

<p style=”font-size:11px”>You can use CSS inside of tags.</p>

<code style=”font-size:11px”>Also works with the <code> tags.</code>


Insert non-trimmed whitespace into <code> blocks

Use ‘&nbsp;‘ (non-blocking space)

1 2  3   4    5     6



Here is an example of the table syntax. Note that in order to define an empty cell, there needs to be at least one text character present.

3|6| |12



Add a real HTTP hyperlink

“http://” will make a link clickable. You can also use the HTML anchor tag.

Not clickable:

Clickable: or

<a href=””>Anchor example</a>


Add a picture

WikidPad uses a file store to keep track of media in a given wiki — see here for more details. You can add files via drag-and-drop, or you can place them in the file store manually and then create references in your nodes. Here is the syntax for linking from the file store:




You can use HTML div align tags with external renderers or in exported HTML Wikis. The internal renderer may have issues processing alignment tags.

<div align=center>Text In The Middle</div>


Add an automated Table of Contents to a page

The [:toc:] tag in Viewer Mode expands to a linked table of contents based on the page’s headers.

Be careful about inserting formatting and HTML tags within the headers, as they will be repeated verbatim in the table of contents. For example, if you start an HMTL tag within a header, you need to close it on that same line.

(e 17/Sept/2017: Rewording. Added note that future edits to this post are unlikely.)