You are currently browsing Aurélio’s articles.
É comum usar checkboxes nas configurações ou na interface de seu site. Ao clicar nela alguma coisa é ligada, ao clicar novamente é desligada. Simples, não?
[X] Fundo colorido
O código para fazer uma opção destas é trivial:
<input id="fundo" onClick="trocaFundo()" type="checkbox"> Fundo colorido
No evento onClick é chamada a função trocaFundo(), que se encarrega de ligar ou desligar as cores no fundo do site. Até aí tudo bem.
O que é chato mesmo, é o usuário ter que mirar precisamente na caixinha do checkbox para poder ligar/desligar a opção. Uma interface mais amigável deveria permitir que o usuário também pudesse clicar no próprio texto de descrição (label) da opção, o “Fundo colorido”. Com mais área para cliques, o uso do site torna-se mais confortável.
Para fazer esse label clicável, basta adicionar o evento onClick nele também. E o que esse evento fará? Você pode colocar ali um “trocaFundo()” também, para ficar igual ao onClick do checkbox.
<input id="fundo" onClick="trocaFundo()" type="checkbox"> <span onClick="trocaFundo()">Fundo colorido</span>
Mas duplicar coisas não é bom. Se você ainda não aprendeu isso, pode deixar que a experiência um dia te ensinará. E se a trocaFundo() recebesse um this para identificar de onde veio o clique, também não funcionaria.
Uma solução mais robusta é fazer com que ao clicar no label, seja feito um clique “virtual” na própria checkbox. Deste modo, para a lógica do seu programa, é como se o usuário tivesse de fato clicado na checkbox.
<input id="fundo" onClick="trocaFundo()" type="checkbox">
<span onClick="document.getElementById('fundo').click()">
Fundo colorido
</span>
Atualização:
Quando escrevi este texto, eu não sabia que a tag LABEL era clicável e que ao clicar nela, o checkbox atrelado a ela era marcado/desmarcado. Muito obrigado a todos que comentaram sobre isso!
Assim sendo, não é preciso essa gambiarra JavaScript que eu sugeri, basta apenas usar a tag correta:
<input id="fundo" onClick="trocaFundo()" type="checkbox"> <label for="fundo">Fundo colorido</label>
O atributo for leva o nome do checkbox ao qual esta label está atrelada. E pronto, só isso. O navegador se encarregará de fazer o resto.
O tr é um comando muito versátil, especialmente útil para apagar caracteres indesejados.
Digamos que você peça ao usuário para digitar o número do CPF. Esse número poderá vir das mais diferentes formas, com espaços, hífens, pontos, ponto-e-vírgula e sabe mais o que que a criatividade da pessoa pode produzir.
Para preservar sua sanidade, tudo o que você quer são os números, ignorando toda a pontuação, espaços e outros caracteres. Com o tr é fácil.
$ echo 123.456.789-00 | tr -d 0-9 ..-
A opção -d apaga coisas e o 0-9 representa os números de zero a nove. Ah, note que não é necessário o uso de colchetes ao redor “[0-9]“, como muita gente costuma fazer.
Mas este comando apagou os números e deixou a pontuação, quando o desejado é o justamente o contrário. Então basta usar a opção -c, que inverte o sentido da expressão, fazendo o tr apagar tudo exceto os números:
$ echo 123.456.789-00 | tr -c -d 0-9 12345678900
Com o comando cut é fácil extrair o primeiro, segundo ou qualquer outro caractere da linha. Porém, é preciso saber a posição exata deste caractere para informá-la ao cut.
$ echo abcdef | cut -c 1 a $ echo abcdef | cut -c 2 b $ echo abcdef | cut -c 3 c
E se você quiser extrair o último caractere, independente do tamanho da linha em questão?
A primeira solução é saber qual a posição exata deste último caractere. Supondo que a linha está guardada em uma variável, use o modificador # para obter o tamanho do conteúdo da variável, ou seja, o tamanho da linha.
$ linha="abcdef"
$ echo ${#linha}
6
Agora sim, você pode usar esse truque para obter o último caractere:
$ echo $linha | cut -c ${#linha}
f
Há ainda uma outra solução, que envolve pensar diferente. Em vez de contornar a limitação do cut apelando para a expansão de variáveis do shell, que tal modificar nosso problema para que ele se enquadre nas possibilidades do cut?
- O problema: extrair o último caractere.
- O cut: sabe extrair o primeiro caractere.
- Solução: tem como fazer o último caractere ser o primeiro?
O comando rev inverte a linha, fazendo com que o último caractere seja o primeiro, e vice-versa:
$ echo abcdef | rev fedcba
Agora sim, já que nossa linha-problema foi modificada para satisfazer o cut, podemos usá-lo normalmente:
$ echo abcdef | rev | cut -c 1 f
Pelo menos o Google Reader (leitor de feeds RSS/Atom), recomenda:

;)
Obrigado ao Rodrigo Stulzer pelo aviso e envio da imagem!
A área de transferência é identificada pelo objeto “the clipboard”. Então basta setar ou obter o seu conteúdo para fazer as operações de copiar e colar.
-- Copiar set the clipboard to "texto a ser copiado" -- Colar (the clipboard)
É recomendado o uso de parênteses ao colar, para evitar confusão com a palavra-chave opcional “the”, utilizada pela linguagem.
Veja um exemplo de uso, com uma janelinha simples que mostra o conteúdo da área de transferência:
-- Mostrar o clipboard atual display dialog (the clipboard) with title "Área de Transferência"
Há um comando bacana para se obter uma referência (alias) à pasta principal do usuário que está rodando o script.
path to home folder -- Retorna: alias "Macintosh HD:Users:aurelio:"
Se precisar do caminho completo dessa pasta no formato POSIX (com barras), é fácil:
POSIX path of (path to home folder) -- Retorna: "/Users/aurelio/"
Uma terceira opção é consultar diretamente a variável de ambiente do shell:
do shell script "echo $HOME" -- Retorna: "/Users/aurelio"
Você tem uma lista de números, um por linha, e precisa somá-los:
$ cat numeros.txt 3 5 7 9 11 13 15
Primeiro, coloque todos em uma única linha:
$ paste -s numeros.txt 3 5 7 9 11 13 15
Agora mude o delimitador (-d) de TAB para “+”, para compor a expressão aritmética de soma:
$ paste -s -d + numeros.txt 3+5+7+9+11+13+15
Agora sim, basta passar a expressão resultante para a calculadora do shell:
$ paste -s -d + numeros.txt | bc 63
Para calcular a raiz quadrada de um número em Shell, use o comando bc. Ele é uma calculadora completa, que entre outras funções úteis, tem a sqrt (de “square root”).
Basta mandar o comando pela entrada padrão (STDIN) e o resultado aparece na saída padrão (STDOUT):
$ echo "sqrt(16)" | bc 4 $ echo "sqrt(144)" | bc 12
Para guardar o número e o resultado em variáveis, faça assim:
numero=144 resultado=$(echo "sqrt($numero)" | bc) echo "A raiz quadrada de $numero é $resultado"







Comentários Recentes