Ah a dream come true. Finally I figured out how to remap the up and down cursor motion keys (one set anyway - p and n) to be the beloved vi keys. This means that if there was something that j or k did, they don’t do it anymore. J was "jump" - I don’t know what that was so I probably won’t miss it. I don’t think that k did much of anything. This is the source code that needed to be edited to get all this to work well.
In mailpart.c look at lines marked x-→'j or k':
mailpart.c
/* cxe- Check out the P and N which I remap to vi keys. Yea! */ static struct key att_index_keys[] = {HELP_MENU, OTHER_MENU, {"<",NULL,{MC_EXIT,2,{'<',','}},KS_EXITMODE}, {">","[View]",{MC_VIEW_ATCH,5,{'v','>','.',ctrl('M'),ctrl('J')}}, KS_VIEW}, x-->'k' {"P", "PrevAttch",{MC_PREVITEM,4,{'p',ctrl('B'),'k',KEY_UP}}, KS_PREVMSG}, {"N", "NextAtch", x-->'j' {MC_NEXTITEM, 5, {'n','\t',ctrl('F'),'j', KEY_DOWN}}, KS_NEXTMSG}, /* Lots more..... */
And there is this from pine.h:
pine.h
/* cxe- I took this out and replaced it with what follows- #define PREVMSG_MENU {"P", "PrevMsg", \ {MC_PREVITEM, 1, {'p'}}, \ KS_PREVMSG} #define NEXTMSG_MENU {"N", "NextMsg", \ {MC_NEXTITEM, 1, {'n'}}, \ KS_NEXTMSG} */ #define PREVMSG_MENU {"P", "PrevMsg", \ {MC_PREVITEM, 2, {'p','k'}}, \ KS_PREVMSG} #define NEXTMSG_MENU {"N", "NextMsg", \ {MC_NEXTITEM, 2, {'n','j'}}, \ KS_NEXTMSG}