Confusão com "xkeyval" e "newcommand": melhor maneira de usar com "lstinputlisting"

Confusão com "xkeyval" e "newcommand": melhor maneira de usar com "lstinputlisting"

Eu escrevi este comando para obter "trechos" de código:

\newcommand\codesnippetsnippet[3]{
\immediate\write18{find ../../../.. -name '#1' -print | grep #2 | xargs cat > ./listingwithoutcomments}

\lstinputlisting[autogobble=true,linerange=#3,rangeprefix=//---,includerangemarker=false,language=mycodelanguage,frame=single]{./listingwithoutcomments}

\immediate\write18{rm -f -- 'listingwithoutcomments'}
}

É usado assim:

\codesnippet{option1}{option2}{option3}

Mais completamente:

\codesnippet{thisissomecode.codefile}{thisisagrepfilter}{thisisalinerangemarker}

A motivação por trás disso é basicamente porque estou tentando lstinputlistingencontrar arquivos recursivamente dentro de uma estrutura de diretórios (Linux) e estou usando findo Bash para contornar o fato de que isso não é possível. Pelo menos, não acredito que possa.

Acontece que suspeito que essa não seja a melhor maneira de fazer isso, mas funciona no sentido de que faz o que eu quero. Porém, não sou um grande fã da maneira como uso três opções separadas, e é isso que realmente quero evitar, se possível, mas estou realmente lutando para entender como usaria xkeyvalpara conseguir isso, o que Acho que é minha melhor aposta. O que eu gostaria mesmo, por exemplo, é poder usar codesnippetassim:

\codesnippet[filename=,grepfilter=,linerangemarker=}

... ou melhor ainda, use linerange de acordo com a opção lstinputlisting, mas suspeito que isso provavelmente não seja possível:

\codesnippet[filename=,grepfilter=,linerange=}

Acho que meu problema decorre do fato de estar incorporando um comando ( lstinputlisting) dentro do meu "novo comando" e, como não tive sorte em experimentar, xkeyvalsó quero perguntar se alguém poderia:

A. Ajude-me a seguir o caminho certo, entendendo como eu usaria xkeyvalpara chegar a algo assim:

\codesnippet[filename=,grepfilter=,linerangemarker=}

B. Ajude-me a entender se o uso de lstinputlistingpode complicar as coisas, pois tem suas próprias opções

C. (Bônus) Ajude-me a entender se existe uma maneira melhor de fazer isso e o que mais posso estar fazendo de errado... por exemplo, existe uma maneira de encontrar lstinputlistingarquivos recursivamente sem usar findcompletamente?

Qualquer ajuda seria sempre muito apreciada.

informação relacionada