It turns out that I use ctrl-left/right arrow a lot to jump the cursor between words, so I changed my script to use ctrl+. and ctrl+/ for home and end as well as ctrl+; and ctrl+’ for ctrl-home and ctrl-end.
This autohotkey script has been working pretty well for me:
>^Up::send {Ctrl Up}{PgUp} ; PgUp
>^Down::send {Ctrl Up}{PgDn} ; PgDn
>^.::send {Ctrl Up}{Home} ; Home
>^/::send {Ctrl Up}{End} ; End
>^;::send {Ctrl Up}^{Home} ; Ctrl-Home
>^'::send {Ctrl Up}^{End} ; Ctrl-End
>^+Up::send {Ctrl Up}{Shift Up}+{PgUp} ; Shift-PgUp
>^+Down::send {Ctrl Up}{Shift Up}+{PgDn} ; Shift-PgDn
>^+.::send {Ctrl Up}{Shift Up}+{Home} ; Shift-Home
>^+/::send {Ctrl Up}{Shift Up}+{End} ; Shift-End
>+^;::send {Ctrl Up}{Shift Up}^+{Home} ; Ctrl-Shift-Home
>+^'::send {Ctrl Up}{Shift Up}^+{End} ; Ctrl-Shift-End