diff options
-rw-r--r-- | lib/fnkeys.tes | 75 | ||||
-rw-r--r-- | sample.teco_ini | 1 | ||||
-rw-r--r-- | src/core-commands.c | 19 |
3 files changed, 67 insertions, 28 deletions
diff --git a/lib/fnkeys.tes b/lib/fnkeys.tes index f33af2b..036445b 100644 --- a/lib/fnkeys.tes +++ b/lib/fnkeys.tes @@ -1,43 +1,59 @@ -! Here we define some reasonable default function key macros. - Their corresponding command-line editing macros begin with ! +!* + * Here we define some reasonable default function key macros. + * Their corresponding command-line editing macros begin with . + *! -! edit command line to move <n> chars, updating existing move ops ! +!* + * Edit command line to move <n> chars, updating existing move ops. + * The command line at the time of call looks like: (123C)(M[FOO + *! @#c{{U.c <-A-("=-D1;' -D> - ."> - -A-)"= -S(\U.v .,Z-2D 0A-C"=2DQ.v|2D-Q.v'%.c | I(Q.c ' - | I(Q.c ' - "> Q.c\IC) | -Q.c\IR) ' + .-4"< Oins ' -2A-C"N -2A-R"N Oins ' ' -A-)"N Oins ' + <R -A-("=1;'> + \U.v .-1,Z-2D 0A-R"=-'Q.v%.c 2D + !ins! + I( Q.c"> Q.c\IC | -Q.c\IR ' I) }} -! Make DELETE an ESCAPE surrogate. - Macro is enabled everywhere. ! +!* + * Make DELETE an ESCAPE surrogate. + * Macro is enabled everywhere. + *! @[DC]{} -! Make SHIFT+DELETE a rubout/re-insert key. - This reverses the ^G modifier for BACKSPACE. - The macro is enabled everywhere. ! +!* + * Make SHIFT+DELETE a rubout/re-insert key. + * This reverses the ^G modifier for BACKSPACE. + * The macro is enabled everywhere. + *! @[SDC]{} -! Command line editing macros. - They are enabled only in the start state (i.e. they - have no effect in string arguments, etc.). ! +!* + * Command line editing macros. + * They are enabled only in the start state (i.e. they + * have no effect in string arguments, etc.). + *! @[HOME]{ .ESLINEFROMPOSITIONESPOSITIONFROMLINEU.p Q.pU.l <Q.l-."U 1; ' Q.l-.AU.c Q.c- "N Q.c-9"N Q.lU.p 1; '' %.l> + Q.pESGETCOLUMN,4EJ Q.p-.M#c } @[HOME]{(M[HOME]} 1U[HOME] @[END]{ - .ESLINEFROMPOSITIONESGETLINEENDPOSITION-.M#c + .ESLINEFROMPOSITIONESGETLINEENDPOSITIONU.p + Q.pESGETCOLUMN,4EJ + Q.p-.M#c } @[END]{(M[END]} 1U[END] @[NPAGE]{ + 0,4EJ .ESLINEFROMPOSITION+(ESLINESONSCREEN) ESPOSITIONFROMLINEU.p Q.p"< Z | Q.p '-.M#c @@ -46,6 +62,7 @@ 1U[NPAGE] @[PPAGE]{ + 0,4EJ .ESLINEFROMPOSITION-(ESLINESONSCREEN)U.l Q.l"< 0 | Q.lESPOSITIONFROMLINE '-.M#c } @@ -53,41 +70,45 @@ 1U[PPAGE] @[LEFT]{ - ."=0|-1'M#c + ."=0|.-1'U.p + Q.pESGETCOLUMN,4EJ + Q.p-.M#c } @[LEFT]{(M[LEFT]} 1U[LEFT] @[SLEFT]{ - 0,0,.ESWORDSTARTPOSITIONESWORDSTARTPOSITION-.M#c + 0,0,.ESWORDSTARTPOSITIONESWORDSTARTPOSITIONU.p + Q.pESGETCOLUMN,4EJ + Q.p-.M#c } @[SLEFT]{(M[SLEFT]} 1U[SLEFT] @[RIGHT]{ - .-Z"=0|1'M#c + .-Z"=.|.+1'U.p + Q.pESGETCOLUMN,4EJ + Q.p-.M#c } @[RIGHT]{(M[RIGHT]} 1U[RIGHT] @[SRIGHT]{ - 0,0,.ESWORDENDPOSITIONESWORDENDPOSITION-.M#c + 0,0,.ESWORDENDPOSITIONESWORDENDPOSITIONU.p + Q.pESGETCOLUMN,4EJ + Q.p-.M#c } @[SRIGHT]{(M[SRIGHT]} 1U[SRIGHT] @[UP]{ - .ESGETCOLUMN - (.ESLINEFROMPOSITION-1) - ESFINDCOLUMN-.M#c + 4EJ(.ESLINEFROMPOSITION-1)ESFINDCOLUMN-.M#c } @[UP]{(M[UP]} 1U[UP] @[DOWN]{ - .ESGETCOLUMN - (.ESLINEFROMPOSITION+1) - ESFINDCOLUMN-.M#c + 4EJ(.ESLINEFROMPOSITION+1)ESFINDCOLUMN-.M#c } @[DOWN]{(M[DOWN]} 1U[DOWN] @@ -104,5 +125,5 @@ @[F10]{(ESZOOMIN{-12D}} 1U[F10] -! enable function key (macro) support ! +!* enable function key (macro) support *! 0,64ED diff --git a/sample.teco_ini b/sample.teco_ini index 95e56a6..d25b176 100644 --- a/sample.teco_ini +++ b/sample.teco_ini @@ -30,6 +30,7 @@ EMQ[$SCITECOPATH]/session.tes !edit! ! Add code here to execute when a document is edited ! + .ESGETCOLUMN,4EJ !close! diff --git a/src/core-commands.c b/src/core-commands.c index 237416d..bfec8be 100644 --- a/src/core-commands.c +++ b/src/core-commands.c @@ -2098,6 +2098,12 @@ teco_state_ecommand_flags(teco_machine_main_t *ctx, GError **error) * on exit the author is aware of is \fBxterm\fP(1) and * the Linux console driver. * You have been warned. Good luck. + * .IP 4 + * The column after the last horizontal movement. + * This is only used by \fCfnkeys.tes\fP and is similar to the Scintilla-internal + * setting \fBSCI_CHOOSECARETX\fP. + * Unless most other settings, this is on purpose not restored on rubout, + * so it "survives" command line replacements. */ static void teco_state_ecommand_properties(teco_machine_main_t *ctx, GError **error) @@ -2106,9 +2112,12 @@ teco_state_ecommand_properties(teco_machine_main_t *ctx, GError **error) EJ_USER_INTERFACE = 0, EJ_BUFFERS, EJ_MEMORY_LIMIT, - EJ_INIT_COLOR + EJ_INIT_COLOR, + EJ_CARETX }; + static teco_int_t caret_x = 0; + teco_int_t property; if (!teco_expressions_eval(FALSE, error) || !teco_expressions_pop_num_calc(&property, teco_num_sign, error)) @@ -2144,6 +2153,10 @@ teco_state_ecommand_properties(teco_machine_main_t *ctx, GError **error) teco_interface_init_color((guint)value, (guint32)color); break; + case EJ_CARETX: + caret_x = value; + break; + default: g_set_error(error, TECO_ERROR, TECO_ERROR_FAILED, "Cannot set property %" TECO_INT_FORMAT " " @@ -2180,6 +2193,10 @@ teco_state_ecommand_properties(teco_machine_main_t *ctx, GError **error) teco_expressions_push(teco_memory_limit); break; + case EJ_CARETX: + teco_expressions_push(caret_x); + break; + default: g_set_error(error, TECO_ERROR, TECO_ERROR_FAILED, "Invalid property %" TECO_INT_FORMAT " " |