Como alterar o diretório de destino para conclusão da tabulação?

3

Encontrei um pequeno script para ativar a anotação em onethingwell , que inclui isso:

function n { nano ~/n/$1.txt }

Gostaria de estendê-lo para concluir a tabulação, para que, se eu quiser editar a nota preexistente 'foobar' (~ / n / foobar.txt), eu possa digitar foo[TAB] e tê-la automaticamente concluída para foobar , em vez de ter que digitar "foobar" todas as vezes. O problema é que a conclusão de tabulação embutida do bash parece estar centrada em torno do diretório atual, então se eu estiver em uma pasta que não é ~ / n, minha conclusão de tabulação falhará - ou, pior, será completada coisa, uma vez que talvez eu tenha um arquivo chamado 'footastic' em ~ / snafu / (ou seja, eu digito $ n foo[TAB] e, em vez de ver $ n foobar , vejo minha entrada e vejo: $ n footastic .

Então, depois de todo esse preâmbulo, aqui está a pergunta: se é possível, como posso dizer ao bash que depois de digitar 'n', para só desta vez eu quero assumir que nós ' está completando usando os arquivos em ~ / n para completar, ao invés de usar os arquivos no diretório atual?

Se você entendeu tudo isso e-resmungando, parabéns, e se puder responder , muito obrigado!

    
por nickloewen 24.04.2011 / 02:50

2 respostas

4

Isso pode levar você até lá ...

  1. Ative o preenchimento de tabulação personalizada no seu .bashrc

    shopt -s progcomp
  2. Crie uma função compgen e adicione-a a .bashrc após suas funções de notas.

    _notes() {
    local cur
        cur=${COMP_WORDS[COMP_CWORD]}
        COMPREPLY=( $(compgen -f $HOME/n/$cur | cut -d"/" -f5 ) )
        }
       complete -o filenames -F _notes n

Isso funciona para mim - no nível básico. Eu ainda não resolvi isso para diretórios aninhados ...

Referências:

  1. a maior parte daqui: link

  2. Detalhes de conclusão incorporados aqui: link

por 24.04.2011 / 05:57
1

Para acompanhar a resposta de jasonwryan, eu uso o corte para aparar o início do destino do caminho conhecido:

_c ()
{
    local cur
    COMPREPLY=()
    cur=${COMP_WORDS[COMP_CWORD]}
    case "$cur" in
        *)
            COMPREPLY=( $(compgen -f /src/$cur | cut -c 6-) )
            ;;
    esac

    return 0
} &&
complete -o filenames -F _c c

Isso me permite operar diretamente em qualquer diretório, subdiretório ou nome de arquivo em /src/

    
por 01.04.2014 / 20:44