
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 lstinputlisting
encontrar arquivos recursivamente dentro de uma estrutura de diretórios (Linux) e estou usando find
o 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 xkeyval
para conseguir isso, o que Acho que é minha melhor aposta. O que eu gostaria mesmo, por exemplo, é poder usar codesnippet
assim:
\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, xkeyval
só quero perguntar se alguém poderia:
A. Ajude-me a seguir o caminho certo, entendendo como eu usaria xkeyval
para chegar a algo assim:
\codesnippet[filename=,grepfilter=,linerangemarker=}
B. Ajude-me a entender se o uso de lstinputlisting
pode 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 lstinputlisting
arquivos recursivamente sem usar find
completamente?
Qualquer ajuda seria sempre muito apreciada.