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:

google-recomenda-codare

;)

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"
Add to Technorati Favorites

Assuntos