tcsh 완료 문제

tcsh 완료 문제

저는 bash 출신이고 tcsh의 탭 완성 기능을 작업 중입니다.

1) tcsh가 완료를 쉘 함수에 위임할 수 없다는 것이 맞습니까(bash가 "complete -F _func cmd"를 사용하는 방식)?

2) 완료를 외부 프로그램에 위임할 때 tcsh는 COMP_LINE 및 COMP_POINT를 제공하는 bash와 달리 COMMAND_LINE만 제공합니다. 이는 tcsh가 이를 올바르게 수행할 수 없음을 의미합니다:

% cmd --foo -<tab> --bar --baz

프로그램이 완료되면 목록을 제공하고 싶습니다.언급되지 않은옵션. tcsh는 COMMAND_LINE을 "cmd --foo -"로 제공하는 반면 bash는 전체 라인을 제공하지만 COMP_POINT의 커서 위치에 대한 단서를 제공합니다.

답변1

  1. tcsh기능이 전혀 없으므로 이는 부정적입니다. 일반적인 전략은 별도의 스크립트를 생성하고 이를 외부 프로그램으로 호출하는 것입니다(일부 경우에는 aliasa source도 작동함).

  2. 글쎄, 그것은 실제로 질문이 아닙니다. 귀하의 관찰이 정확하다는 것을 확인할 수 있습니다. :-) COMP_POINT실제로 추가하는 것은 어렵지 않을 수 있습니다. 이는 패치입니다.아니요잘 테스트됨):

    diff --git i/tc.const.c w/tc.const.c
    index c472acc..1a69fee 100644
    --- i/tc.const.c
    +++ w/tc.const.c
    @@ -469,6 +469,8 @@ Char STRPROGRAM_ENVIRONMENT[] = { 'P', 'R', 'O', 'G', 'R', 'A', 'M',
     #endif /* _OSD_POSIX */
     Char STRCOMMAND_LINE[] = { 'C', 'O', 'M', 'M', 'A', 'N', 'D', '_', 'L', 'I',
                                'N', 'E', '\0' };
    +Char STRCOMP_POINT[]   = { 'C', 'O', 'M', 'P', '_', 'P', 'O', 'I', 'N', 'T',
    +                          '\0' };
    
     #ifdef WARP
     Char STRwarp[]         = { 'w', 'a', 'r', 'p', '\0' };
    diff --git i/tw.comp.c w/tw.comp.c
    index 03da837..101962f 100644
    --- i/tw.comp.c
    +++ w/tw.comp.c
    @@ -635,9 +635,12 @@ tw_complete(const Char *line, Char **word, Char **pat, int looking, eChar *suf)
            default:
                abort();                   /* Cannot happen */
            }
    +
            tsetenv(STRCOMMAND_LINE, line);
    +       tsetenv(STRCOMP_POINT, str2short(xasprintf("%d", (char) CursorH)));
            res = tw_result(com, pat);
            Unsetenv(STRCOMMAND_LINE);
    +       Unsetenv(STRCOMP_POINT);
            cleanup_until(buf);
            return res;
         }
    

당신은 원할 수도 있습니다tcsh 메일링 리스트, 하지만.

관련 정보