Jedi Tux

Estudando e Revisando com o Anki

Posted in Desktop, Dicas by Fernando Basso on 3 de março de 2014

Há mais ou menos um mês tenho utilizado o Anki para revisar tudo o que por algum um motivo preciso memorizar. O resultado está sendo extraordinário.

A imagem abaixo mostra uma hora de estudo, mas foi um caso a parte. Normalmente, uns 20 minutos por dia são suficientes.

 

Um dia de revisão com o Anki

Anúncios

Atualização do PostgreSQL para 9.2 – Arch Linux

Posted in Dicas, Servers by Fernando Basso on 28 de setembro de 2012

----------------------------------------------------
bash-4.2, vaio@nando, Fri Sep 28 07:37:53 
$PWD="~/"  
$ sudo rc.d start postgresql 
[sudo] password for nando: 
:: Starting PostgreSQL

[BUSY] pg_ctl: could not start server
               Examine the lot output

    vim /var/log/postgresql.log

FATAL:   database files are incompatible with server 6009
DETAIL:  The data directory was initialized by PostgreSQL version 9.1, which
is not compatible with this version 9.2.1.

-------------------------------------------------------------------------------
http://www.postgresql.org/docs/current/static/upgrading.html

NOTA: É possível fazer isso com a versão 9.2, mas como no meu caso eu nem consegui
inicializar o postgresql com ela, fiz com a 9.1 mesmo.

    sudo pacman -U /var/cache/pacman/pkg/postgresql-9.1.4-1-i686.pkg.tar.xz


Primeiro de tudo, salvar o banco de dados atual, com a versão 9.1 do postgresql
rodando:

    pg_dumpall > postgresql_backup_completo.sql

Mas aí teve algo errado, pois ele ficava peding a senha do usuário linha após
linha, e com
    pg_dumpall -U postgres ...

aconteceu a mesma coisa.

vim ~/.pgpass
localhost:5432:db_nando:nando:1234

Mas pra fazer o backup de tudo, temos que deixar o campo que especifica
a database com "*":
localhost:5432:*:nando:1234

http://www.postgresql.org/docs/9.2/static/libpq-pgpass.html
On Unix systems, the permissions on .pgpass must disallow any access to world
or group; achieve this by the command chmod 0600 ~/.pgpass. If the permissions
are less strict than this, the file will be ignored. On Microsoft Windows,
it is assumed that the file is stored in a directory that is secure, so no
special permissions check is made.


(08:29)  gciolli: Should ~/.pgpass allow my to just type psql and connect 
                     without any further iteration?
(08:31)  FernandoBasso: .pgpass only takes care of not having to type the 
                     password, all the other options are handled via environment 
                     variables like PGUSER, etc.

http://www.postgresql.org/docs/9.2/static/libpq-envars.html
Pode ser no bashrc.
export PGUSER=myFavouritePostgresUser
export PGDATABASE=db_nando

Agora já devemos estar podento digitar apenas "psql" pra logar sem
ter que especificar o password nem a database.

--------------------------- // ----------------------- // -----------------

Agora deve funcionar:
    pg_dumpall > postgressql_backup_completo_upgrade_para_9.2

    sudo rc.d stop postgresql (arch linux)

    cd /var/lib/postgres
    mv data bkp_data_9.1

    rc.d start postgresql
    rc.d stopt postgresql

    cp bkp_data_9.1/pg_hba.conf data/
    cp bkp_data_9.1/postgresql.conf data/


    vim data/pg_hba.conf

E seta
    host    all     all    127.0.0.1/32     md5
para
    host    all     all    127.0.0.1/32     trust

por que os passwords e usuários não vão funcionar mais.

    psql -U postgres


Criamos um usuário:

    CREATE ROLE admin WITH LOGIN PASSWORD 'admin' CREATEDB CREATEROLE; 
    ALTER USER admin VALID UNTIL 'infinity';

Colocamos uma senha para o superuser postgres:
    ALTER USER postgres WITH PASSWORD 'serect_passwd';

Recuperar os dados (deu alguns avisos aqui, mas funcionou tudo mesmo assim):

    psql -d postgres -f postgresql_backup_completo.sql

Coloca os 'trust' para 'md5' novamente no arquivo pg_hba.conf.

Reinicia o postgres e já deve estar tudo ok.


For further reading:

https://wiki.archlinux.org/index.php/PostgreSQL#Upgrading_PostgreSQL
http://www.postgresql.org/docs/current/static/upgrading.html



Idea – Java IDE + Vim

Posted in Dicas by Fernando Basso on 15 de setembro de 2012

Idea Java IDE e ideaVim

 

Recentemente iniciei meus estudos de Java, e realmente, por mais que eu prefira o Vim para tudo, é tortura querer programar Java nele, pois tem toda aquela história de packages, classes, access modifiers, imports, e tudo mais, e uma IDE especial para Java é muito mais prática do que o meu querido Vim.
Para mim, o problema com as IDEs é o editor, que são horríveis. Qualquer conhecedor de Vim (ou Emacs) sabe do que eu estou falando. As IDEs podem ter um milhão de qualidades, mas o editor não é uma delas, pelo menos não nas IDEs das quais eu já tive conhecimento até hoje.

Já tentei plugins para o Eclipse (eclim, vimplugin) e Netbeans (jVi). Ajudam bastante mas não consegui me adaptar a nenhum deles. Lendo na web acabei por encontrar alguém mencionando em um fórum dessa IDE chamada Idea, eu que havia um excelente plugin que oferece mode de edição igual ao Vim para ela. Resolvi testar.

http://www.jetbrains.com/idea/features/index.html

Idea – Instalação

No Arch Linux, basta instalar o pacote, pois está nos repositórios oficiais (pelo visto há uma versão paga também).


sudo pacman -S intellij-idea-community-edition

É lógico que você precisa ter o JDK e JRE instalado. Aparentemente, a equipe de desenvolvimento não suporta o OpenJDK oficialmente, mas dizem que funciona normalmente. Eu, particularmente, tenho os pacotes jre e jdk instalados do AUR (wiki, aur).

Apenas para constar, eu gerencio os pacotes provenientes do AUR usando o excelente aurget (todo em bash). Funciona perfeitamente bem para mim.

Depois de instalado, basta rodar, tanto pelo terminal, ou através de algum run-dialog (geralmente Alt+F2) e digitar


idea.sh

É um script que reside em /usr/bin/ e inicia a IDE para nós.
Na momento de criar o primeiro projeto, você será perguntando sobre o caminho do JDK no sistema. Basta executar o seguinte comando para descobrir:


echo $JAVA_HOME

No meu caso, no Arch Linux, bastou colocar /opt/java/ e pronto.

ideaVim

File –> Settings –> Plugins, clique em “Browser repositories” e pesquise por “ideaVim”. Clique com o botão direito em cima do nome do plugin  e escolha “Download and install”. Pode fechar as duas janelas clicando em OK e você verá a informação do download na parte inferior da janela principal da IDE. Apos instalado, basta reiniciar IDE e o plugin já deve vir habilitado por padrão. Em “Tools” você vai ver uma opção para habilitar e desabilitar o plugin.
Uma coisa que gostei bastante é que até Visual-Block Selection funciona, algo que senti falta em outros plugins para outras IDEs. Uso isso muito para comentar pedaços inteiros de código quando necessário. Para quem não sabe, imagine que você quer comentar as primeiras 5 linhas de código, basta se posicionar na primeira coluna (caractere) da primeira linha (no modo normal), pressionar Ctrl-V, 5jI// e então pressionar <Esc>. Para remover faz-se a mesma seleção e digita-se algum comando de deleção, como o “x”, por exemplo.
Outra coisa que gostei é a maneira como a IDE usa uma leve linha pontilhada mostrando o abrir e fechar de blocos, embora ele mostre o qual { é o par que casa com um } e vice-versa destacando-os com uma cor diferente, assim como o Vim já faz por padrão.

Dicas

Ctrl+Shift+a permite que você pesquise por uma opção ou configuração. Tente pesquisar por plugins, por exemplo. Ctrl+Shift+n permite pesquisar e abrir arquivos.

Outra muito legal, é quando, digamos que você está no main() usando um método chamado listFuncionarios(). Com o cursor em cima do nome do método, digitar Ctrl+Alt+b leva você para a classe e local de definição do método. Isso muito útil já que muitas vezes, somente ao utilizarmos um método percebemos falhas e então temos que voltar nele e melhorar o código.

De vez em quando, acesse Help –> Productivity Guide, clique em “Used” de forma a deixar a setinha apontando para baixo, e dê uma olhada nas coisas para ver o que você usa mais, e o que você poderia estar usando mas não está.

Shortcuts são sempre bem vindos:

http://www.jetbrains.com/resharper/webhelp/Reference__Keyboard_Shortcuts.html

http://stackoverflow.com/questions/294167/what-are-the-most-useful-intellij-idea-keyboard-shortcuts
Se alguém quiser dar sugestões e dicas, pode mandar nos comentários (os créditos serão reconhecidos). Quem tiver algum post sobre issa excelente IDE, por favor não deixe de compartilhar também.

Tagged with: , , ,

Indetação no Vim – Tabs e Espaços

Posted in Dicas, Linux, Vim by Fernando Basso on 11 de janeiro de 2012
======================================
= Indentação no Vim - Tabs e Espaços =
======================================

= Introdução =
--------------

Há duas maneiras de indentar um código fonte:
  1. com tabs reais, também chamado de hard tabs.
  2. com espaços no lugar de tabs (sim, o vim pode ser configurado para
     substituir uma tabulação por um certo número de espaços).

Há vantagens e desvantagens em cada um dos métodos. Há alguns artigos que
discutem o assunto na web, embora parece que mais pessoas preferem Espaços
no lugar de Hard Tabs, mas isso é pura questão de gosto, e cada caso é um
caso.

Basicamente temos as opções:
 1.     'tabstop' - altera a largura da tabulação (Tabs reais).
 2.   'expandtab' - causa espaços serem usados/inseridos no lugar de
                    caracteres Tab.
 2. 'softtabstop' - configura detalhadamente a quantidade de espaço a serem
                    inseridos quando a tecla Tab é pressionada.
 3.  'shiftwidth' - afeta o uso de ">>", "<<", modo normal, "Ctrl-t" e
                    "Ctrl-d" no Modo Insert, além de ter influência em como
                    indetação automática funciona.

Para iniciar , execute isso no vim:
    :set list 
    :set listchars=tab:T_ 

A partir de agora, toda vez que o vim "enxergar" um Tab real, ele vai
mostrar algo como "T_____" no lugar do tab, para que o Tab fique 
visualmente percebível.

Pra desabilitar basta fazer:
    :set nolist 


= Indentação com Hard Tabs Apenas =
-----------------------------------

Por padrão, o vim vem configurado com:
  tabstop = 8 
  softtabstop = 0 
  shiftwidth = 8 
  noexpandtab 

Independente da sua configuração, digite esta linha para testar
(simplesmente coloca os valores default):
    :set tabstop=8 softtabstop=0 shiftwidth=8 noexpandtab 
 
O que acontece então?
 1. Com essa configuração, pressionar a tecla Tab no modo insert insere um
    caractere Tab real, com largura de 8 colunas. 
 2. Nesse caso, o  deleta o caractere Tab (deleta 8 colunas), o
    que visualmente parece que vários espaços foram deletados ao mesmo tempo.
 3. No modo Normal, usar >> e <> e <> e <> e << insere ou deleta *4* espaços. O mesmo
    occorre ao se pressionar Ctrl-t e Ctrl-d no modo Insert.

= Espaços = Caso 4 =
--------------------

Mas (note o NOexpandtab): 
    :set tabstop=8 softtabstop=4 shiftwidth=4 noexpandtab 

Agora, 'noexpandtab' não está habilitado, e portanto, pressionar 
insere um Tab real (e não espaços no lugar do Tab). Se pressionar Tab, e
'tab=8', um Tab terá largura de 8 colunas.

Como você sabe, ">>", "<>" duas vezes.
Você vai notar que ele se transforma em um Tab real. Isso porque "tabstop=8"
e "shiftwidth=4", etão, 4 + 4 = 8. Se "tabstop=12", por exemplo, então
pressionar ">>" 3 vezes se gera uma Tab real, porque 4 + 4 + 4 = 12.  

Isso tudo acontece porque 'softtabstop' tem precedência sobre 'tabstop'.
Então, quando pressionamos, por exemplo, "Ctrl-t" uma vez, ele insere 4
espaços, mas quando pressionamos "Ctrl-t" uma segunda vez, ele diz "Hmm,
isso está igual a "largura" do 'tabstop', e então os 8 espaços são
deletados e um Tab real é inserido. Quando usamos , "Ctrl-d" ou
"<<", o processo inverso ocorre.


= Misturando - Caso 5 =
-----------------------

Vamos deixar 'tabstop' igual 4, com 'expandtab' desabilitado:
    :set tabstop=4 softtabstop=4 shiftwidth=4 noexpandtab 

 1. Agora, como 'tabstop' está igual 'shiftwidth' e 'expandtab', quando
    , ">>" ou "Ctrl-t" for pressionado, uma Tab real será inserida
    pois o Vim notou que as configurações estão iguais. Quando as
    configurações estão iguais.

NOTE que tabs reais e espaços antigos no arquivo continuam sendo o que eram.
O que pode mudar é o tamanho das Tabs reais, mas não o fato de serem Tabs
reais ou não. O que já era Tab real continua sendo Tab real, e o que era
(grupos) de espaços continuam sendo (grupos) de espaços (grupos de espaços
que por venturam tenham sido inseridos em lugar de Tabs reais).

= Possíveis Escolhas =
======================

= Hard Tabs (Tabs Reais) =
--------------------------
Quem prefere trabalhar com Tabs reais, uma boa escolha é deixar 'tabstop'
igual 'shiftwidth', pois eles trabalharão de maneira consistente e
homogênea. Espaços não serão usados.

= Espaços em vez de Tabs Reais =
--------------------------------
Deixar 'softtabstop' igual 'shiftwidth' assegura que ">>", "<<",
"Ctrl-t" e "Ctrl-d" adicionem e removam Tabs (não reais, pois agora é
substituída por espaços) com o mesmo comportamento de se adicionar e deletar
tabs pressionando a tecla  e . Ou seja, todos eles vão
adicionar ou remover o mesmo número de espaços - vão funcionar de forma
homogênea. Pode-se também, nesse caso (e alguns acham aconselhável), deixar
'tabstop' com o mesmo valor de 'shiftwidth' e 'softtabstop'.

-------------------------------------------------------------------------------

= Notas Finais =
---------------------

Saiba que o Vim permite configurar tudo isso de acordo com o 'filetype'. Por
exemplo, é possível configurar que arquivos "html" utilizem 2 espaços no
lugar do Tab, um arquivo em "C" utilize 4 espaços no lugar de um Tab, e
ainda, quando um arquivo "bash" for editado, um Tab real de 6 colunas seja
usado. Ou seja, quando o arquivo é aberto, o vim usa as configurações
predefinidas automaticamente.

Alguns exemplos.

Vamos criar os diretórios necessários:
    mkdir --parents ~/.vim/after/ftplugin/ 

Para HTML:
Criar o um arquivo chamado "html.vim" dentro do último diretório criado:
    vim ~/.vim/after/ftplugin/html.vim 

E coloque o seguinte conteúdo dentro do arquivo:
    set softtabstop=2 expandtab shiftwidth=2 


Para CSS:
Criar o arquivo css.vim, no mesmo diretório que do exemplo anterior:
    vim ~/.vim/after/ftplugin/css.vim 

E cole o seguinte conteúdo:
    set softtabstop=4 expandtab shiftwidth=4 


Para "bash", com Hard Tabs:
    vim ~/.vim/after/ftplugin/bash.vim 
E cole:
    set tabstop=6 softtabstop=6 shiftwidth=6 noexpandtab 


= Dica final =
--------------

Se você optar por usar Espaços no lugar de tabs, há uma maneira de inserir
Tabs reais sem ter que mudar temporariamente a configuração. Isto é
conseguido inserindo-se caracteres não imprimíveis literalmente. 

No vim, isso é muito fácil. Basta pressionar "Ctrl-v" no modo Inserte, e
então pressionar a tecla Tab em seguida. Passo-a-passo:

            vim --> abre o vim no terminal (poderia ser o gvim).
              i --> entra no modo insert na posição onde está o cursor.
         Ctrl-v --> pressionar a combinação "ctrl-v". Vai aparecer um
                    caractere parecido com um "^". Neste momento, o Vim está
                    esperando você digitar o caractere que termina a
                    sequência, no nosso exemplo, um .
           --> pressione Tab.
  "hello world" --> escreva "hello world" por que esse é um encantamento que
                    garante que você aprenda o conteúdo. Sempre foi assim em
                    todas as linguagens, e essa é a razão. São palavras
                    mágicas.

Como mesmo exemplo você poderia inserir um caractere  ou 
literalmente no texto.

Aqui está o arquivo que fiz no Vim, mas convertido para html. Tive que renomear para .pdf para fazer o upload. Depois de baixar, troque a extensão para .html novamente e abra no seu navegador favorito. Está bem colorido, facilitando a leitura.
Indentando_Código_Fonte_no_VIM

Referências:
------------
    
  No Vim:
    :help 'softtabstop'
    :help 'tabstop'
    :help 'shiftwidth'
    :help 'expandtab'

    http://vimcasts.org/

    http://vim.wikia.com/wiki/Indenting_source_code




acidentes comando rm – trash-cli

Posted in Bash, Dicas by Fernando Basso on 7 de janeiro de 2012

Fiz esse arquivo no vim. Quem quiser pode baixar a versão que converti com o :TOhtml.
rm_accidents.smr
NOTA: O wordpress não me permitiu fazer upload do arquivo html, nem zip, então eu renomeei ele para .pdf para poder fazer o upload. Baixe o arquivo e renomeie a extensão para .html novamente antes de tentar abrir o arquivo.

=============================
= Rm - Previnindo Acidentes =
=============================


= Tópicos =
-----------
  - Comando rm não tem trash
  - Solução nº 1 - interactive mode
  - Solução nº 2 - um alias para o interactive mode
  - Solução nº 3 - trash-cli - lixeira na linha de comando

== Comando rm não tem trash ==
------------------------------

Cuidado!!! No terminal, na linha de comando, quando se digita
    rm segredo_mundial.txt
o segredo_mundial.txt já era. Não tem mais o que fazer.

===============================================================================

== Solução nº 1 - interactive mode ==
-------------------------------------

Sempre use a opção "-i", ou "--interactive" com o comando "rm" e torne isso
um hábito. Essa opção se prontifica a nos perguntar se realmente desejamos
deletar o arquivo.
    rm -i segredo_mundial.txt
    rm --interactive segredo_mundial.txt

CUIDADO com a flag "-f" ou "--force". Com ela, as opções "-" ou
"--interactive" se tornam inúteis, ou seja, eles são completamente
igonorados. 

Há um truque que pode ser aplicado. Digamos que temos um diretório
contendo arquivos muito importantes. Podemos criar um arquivo chamado "-i"
dentro desse diretório. Como o arquivo contém "-" no nome, não podemos
simplesmente fazer "touch -i", pois o comando "touch" vai pensar que estamos
passando a opção "-i" como argumento, e o comando "touch" nem tem uma opção
chamada "-i". As duas possíveis maneiras de criar o tal arquivo estão
exemplificadas abaixo:
    touch -- -i
ou
    touch ./-i


A partir de agora, se você fizer
    rm -Rf *
o shell vai expandir o "-i" na linha de comando, de tal forma que seu
comando na verdade se transforma em
    rm -Rf -i

Note que isso só funciona se você usar o "glob" (*). Se tentar deletar um
arquivo por vez, o arquivo "-i" não vai te ajudar. Vamos aprender outro
truque quando falarmos do programa "trash-cli".

Se quiser remover o arquivo "-i", não basta fazer rm -i porque o rm tem de
fato a opção "-i". Então "rm -i" é o comando "rm", seguido da opção "-i",
mas ainda falta dizer ao "rm" qual arquivo ou arquivos deletar, por que ele
não sabe que "-i" é um arquivo e não uma opção. Usamos uma técnica similar a
que usamos para criar o arquivo. As duas soluções possíveis são:
    rm -- -i
ou
    rm ./-i


===============================================================================
== Solução nº 2 - um alias para o interactive mode {{{
------------------------------------------------------

A solução número dois consiste em colocar o que apprendemos acima em um
"alias" (um "apelido", em Inglês). Vamos criar um alias que faz com que o
comando "rm" sempre seja executado com "rm --interactive".
    alias rm='rm --interactive'

Digite o comando acima em um terminal e tente remover um arquivo (não teste
com nada que seja importante). Para testar, rode apenas "rm arquivo.txt" e
você vai notar que ele pergunta se temos mesmo certeza de que queremos
deletar o arquivo em questão.

Se você gostou da ideia coloque o comando que cria o alias no ~/.bashrc.
Para que o alias entre em vigor, feche e abra o terminal novamente ou rode
o comando:
    source ~/.bashrc

A partir de agora, toda vez que você digitar "rm", o bash interpreta o alias
e na verdade vai executar "rm --interactive". 

===============================================================================
== Solução nº 3 - trash-cli - lixeira na linha de comando ==
------------------------------------------------------------

Instale o programa "trash-cli". Enquanto escrevo este documento, "trash-cli"
está disponível pelo AUR para o Arch Linux, mas pesquisas pela web fazem
acreditar de que já está nos repositórios oficiais de muitas distribuições.

O programa "trash-cli" vem com três comandos principais:
    1. trash-empty - esvazia a lixeira;
    2. trash-list - lista os arquivos da lixeira;
    3. trash-put - manda arquivos para a lixeira.

Para mais informações leia o help de cada uma das variações do trash-cli.

    trash-empty --help
    trash-list --help
    trash-put --help


O problema agora é criar o hábito de usar o "trash-cli" em vez do bom e
velho "rm". Sim, porque nós instalamos o programa, mas por força do hábito é
bem provável que continuemos usando o "rm" sem nem notar.

Vamos então usar um truque para, digamos, desabilitar o comando "rm". O
truque consiste em, novamente, criar um alias. Mas antes disso vamos falar
de comentários no bash (com poucos ajustes todas essas dicas funcionam em
ourtos SHELLs).

Um comentário no bash inicia com #. Rode o seguinte comando direto do
terminal:
    # echo 'Hello, world.'
Essa linha não vai executar nada. É um comentário apenas.
Tente esta outra:
    echo 'Hello, ' # world'.
O echo acima só vai mostrar "Hello, ". O resto da linha é comentário.


Então, a ideia é criar um alias que comente o "rm". É fácil:
    
    alias rm='# rm'

Pode colocar o alias no ~/.bashrc e rodar "source ~/.bashrc". A partir de
agora, toda vez que você digitar "rm", ele simplesmente nem sequer será
executado, pois agora ele foi "comentado". No então, há alguns pontos a
serem considerados:

   1. Se você executar outro SHELL a partir do shell que contém o alias, o
      outro shell não vai herdar o alias, portanto, "rm" desse outro shell
      vai funcionar normalmente.

   2. IMPORTANTE: você executou essas operações no terminal como usuário, e
      configurou o ~/.bashrc em nível de usuário. A conta do ROOT continua
      com as configurações default. Como o ROOT é um usuário ainda mais
      crítico no sistema, considere colocar essas configurações no
      /root/.bashrc.

================================================================================

Simular margem no vim para ler o :help

Posted in Bash, Dicas, Linux, Vim by Fernando Basso on 1 de janeiro de 2012

Simular margem no vim para ler o :help

Uma coisa que me incomoda quando estou lendo o :help no vim é que o texto fica “grudado” na borda esquerda da janela do vim (ou gvim). Então, o que costumo fazer é habilitar os números de linha com :set number. para ter algo no lado esquerdo da janela funcionando como uma espécie de margem.

Tem dois detalhes que me incomodam. Um é que não adiante colocar set number no vimrc porque help é um filetype no vim, então, as configurações do filetype help (que usa set nonumber) sobrescreve o set number do vimrc. Outra coisa é que ter números de linhas para ler o help pode não agradar muito ou fazer muito sentido. Fortunadamente, há uma maneira de simular uma margem, sem que fique aparecendo os números.

Entendendo o processo

Quando usamos a opção set number, o vim usa um espaço ao lado esquerdo da janela para mostrar esses números, e também nos fornece os grupos de cor chamados LineNr que é justamente para definir a cor que aparece naquela parte onde os números são mostrados, tanto o background como o foreground.

Pois bem, se configurarmos LineNr para ter a mesma cor de background que do resto do vim não veremos diferença de cor entre o fundo do texto normal e a cor da região usada para mostrar o números das linhas. Ainda mais, se configurarmos a cor que LineNr usa para mostrar os números propriamente ditos para a mesma cor do background, não vamos ser capazes de ler/ver número algum, pois a cor do texto será exatamente igual a cor de fundo. Os números ainda estão lá, mas não dá pra notar.

O que vamos fazer então é criar (se já não existir) o diretório ~/.vim/after/ftplugin. O comando abaixo se encarrega disso, e se os diretórios já existem, ele simplesmente não faz nada:

mkdir --parents ~/.vim/after/ftplugin

Precisamos criar também, (se já não existir) o arquivo help.vim dentro de ~/.vim/after/ftplugin/:

vim ~/.vim/after/ftplugin/help.vim

Agora, vamos descobrir quais as cores que o nosso colorscheme está usando para o background. Os grupos de cores para isso são ctermbg (background no terminal) e guibg (background no gvim). Para descobrir as cores configuradas para os grupos mencionados, execute os seguinte comando:

:highlight Normal

Isso vai mostrar as cores configuradas para ctermfg, ctermbg, guifg, entre outras coisas.

Para ter certeza da cor que o gvim usa como background (há fatores que podem fazer com que o vim no terminal use cor x, e o gvim use cor y para determinado grupo) é mais seguiro abrir o gvim e rodar o mesmo comando para ver o que ele mostra sobre si próprio para guifg e guibg.

NOTE que o comando é digitado no modo de comando do vim. Entramos no modo de comando quando, estando no modo normal pressionamos : (chegamos no modo normal pressionando <Esc> ou CTRL-[).

Finalmente, no ~/.vim/after/ftplugin/help.vim colocamos o configuramos os backgrounds e foregournds para o vim e gvim com os valores das cores conforme foram mostrados com o comando anterior.

set number
highlight LineNr ctermfg=235 ctermbg=235 guifg=#dfd6c1 guibg=#242424

Veja, a cor do ctermfg, ctermbg, guifg e guibg são iguais (fg = FackGround, bg = BackGround). E lembre-se que essa cor é igual a cor do background da janela normal do vim. Isso cria a impressão que há uma margem.

De agora em diante, toda vez que você abrir um :help no vim, terma uma “margem” no lado esquerdo da janela. Pra mim pelo menos, parece tornar a leitura mais confortável.

Colocando em uma função (opcional)

Podemos também deixar a configuração padrão do vim ficar como é quando abrimos um :help, e colocar o código que criamos em uma função, e criar uma outra função que desabilita a margem.

A função que habilita:

function! CriaMargem()
 set number
 highlight LineNr ctermfg=235 ctermbg=235 guifg=gray16 guibg=gray16
endfunction

Para criar a função que desabilita a margem, vamos descobrir a as cores que são definidas para LineNr por padrão. Certifique-se de que não tenha chamado a função acima e não tenha aberto um :help usando o nosso truque, senão o comando abaixo não vai mostrar as cores originais. Em todo caso, rode o comando (novamente, no modo de comando):

:hightlight Normal

E coloque as cores que aparecerem aí na função que desabilita a margem (volta as cores padrão para que possamos ver os números):

function! MargemOff()
 highlight LineNr ctermfg=180 ctermbg=242 guifg=#cdaa7d guibg=bg
endfunction

Essas funções também vão dentro do help.vim que criamos. Chame as funções assim no vim:

:call CriaMargem()

e

:call MargemOff()

Pode usar <Tab> para autocompletar.

Note que colocando essas funções no ~/.vim/after/ftplugin/help.vim, elas só estarão disponíveis quando você estiver lendo um :help no vim. Portanto, não adianta esta editando um html, C, ou perl e querer chamar essas funções. Se quiser que elas fiquem disponíveis para outros filetypes, coloque-as no ~/.vimrc.

Supondo que deixamos elas no help.vim, vamos deixar CriaMargem() habilitada por padrão. Para tal, basta chamar a função de dentro do próprio help.vim. Aqui vai o exemplo completo:

" Habilita a simulação de margem.
function! CriaMargem()
 set number
 highlight LineNr ctermfg=235 ctermbg=235 guifg=gray16 guibg=gray16
endfunction
" Mostra set mumber normalmente.
function! MargemOff()
 highlight LineNr ctermfg=180 ctermbg=242 guifg=#cdaa7d guibg=bg
endfunction

” Vamos deixar a função habilitada por padrão.

autocmd BufEnter * call CriaMargem()

Com certeza deve ter como colocar tudo em uma única função, tornando o código mais profissional, mas no momento em que escrevo, é o que deu pra fazer sem perder muito tempo.

Tagged with: , , , ,

Xdefaults VS Escape Sequences, Bash – Cores do Prompt

Posted in Bash, Dicas, Linux by Fernando Basso on 27 de dezembro de 2011

Leia todo o texto antes de tentar configurar algo. Algumas coisas que você ler mais no início do texto fará sentido quando se juntar com conceitos explicados mais adiante.

A intenção deste post não é mostrar TUDO sobre configuração do prompt do bash propriamente dito, mas sim mostrar a relação que tem as cores do terminal/prompt com as sequências de escape que usamos para configurar o prompt, pois sem essa noção, ficamos tentando configurar as cores “às cegas”. Esse tutorial funciona para o xterm, mas os conceitos são os mesmos para configurar outros emuladores de terminal.

Quando queremos configurar o prompt do Bash, usamos sequências de escape como:

    '\033[31m'
    

Faça um teste:

    echo -e "\033[31m Hello, World."

\033[ significa que estamos iniciando uma sequência de caracteres que não serão imprimidos, ou seja, inicia a sequência de escape. O próximo número (31, no exemplo) indica a cor que queremos imprimir, seguido de “m“, que termina a sequência de escape. O que vem em seguida é o texto que queremos realmente mostrar.

A parte numérica que determina a cor do texto pode indicar que queremos o texto em negrito, para isso, a sintaxe fica assim:

    echo -e '\033[31;1m Hello, World." # Note o ";1".

Ou seja, aquele 31;1, onde 31 é a cor, e 1 habilita o negrito. O número que especifica a cor e o número que habilita o negrito devem estar separados por ponto e vírgula (;). Mas agora vem a questão: 31 é qual cor? Aí é que entra o arquivo ~/.Xdefaults ou ~/.Xresourses.

No ~/.Xdefaults temos entradas como as do exemplo abaixo:


    ! Black, \033[30m
    XTerm*color0: #000000
    ! DarkGrey, \033[30;1m
    XTerm*color8: #BABDB6

    ! DarkRed, \033[31m
    XTerm*color1: #FF6565
    ! Red, \033[31;1m
    XTerm*color9: #FF8D8D

No ~/.Xdefaults usamos cores que vão de color0 até color15. As cores do color0 a color7 são cores normais, e de color8 até color15 são as cores em negrito, ou brilhosas.

Aqui temos um conceito importante. Note nos comentários (linhas iniciadas com !). Por exemplo, *color0 é a cor que será usada na sequência de escape \33[30m (cor normal), e a color8 será usada com a sequência \33[30;1m, ou seja, a cor em negrito. Continuando, color1 é usada pela sequência \33[31m (cor normal) e color9 é usada pela sequência \33[31;1m, a cor em negrito, e assim sucessivamente, até a color7 para cores normais, e color15 para os negritos.

Agora, configure as cores do xterm no ~/.Xdefaults da maneira que quiser, ou simplesmente copie as minhas (que pode modificar depois):

! ***** My Xterm Colors ***** ! {{{
! 1 to 7 are normal colors. 8 to 15 are the bright/bold ones.
XTerm*foreground: yellow
XTerm*background: #242424

! Black, \033[30m
XTerm*color0: #000000
! DarkGrey, \033[30;1m
XTerm*color8: #BABDB6

! DarkRed, \033[31m
XTerm*color1: #FF6565
! Red, \033[31;1m
XTerm*color9: #FF8D8D

! DarkGreen, \033[32m
XTerm*color2: green3
! Green, \033[32;1m
XTerm*color10: #C8E7A8

! DarkYellow, \033[33m
XTerm*color3: #EAB93D
! Yellow, \033[33;1m
XTerm*color11: #FFC123

! DarkBlue, \033[34m
XTerm*color4: #204A87
! Blue, \033[34;1m
XTerm*color12: #3465A4

! DarkMagenta, \033[35m
XTerm*color5: #CE5C00
! Magenta, \033[35;1m
XTerm*color13: #F57900

! DarkCyan, \033[36m
XTerm*color6: #89B6E2
! Cyan, \033[36;1m
XTerm*color14: #46A4FF

! LightGrey, \033[37m
XTerm*color7: #CCCCCC
! White, 0\33[37;1m
XTerm*color: #FFFFFF

! }}} Xterm ends here.

Para que as configurações entrem em vigor, execute o comando:

    xrdb ~/.Xdefaults

Feche e abra o terminal novamente. Lembre-se que isso funciona para o xterm. Não adianta usar o gnome-terminal (do gnome) ou o konsole (do kde). Agora sim estamos preparados para brincar com o prompt.

O prompt do bash é definido pela variável PS1 (tem a PS2 também, entre outras, que é usada quando continuamos um comando na próxima linha).

Vamos fazer uma configuração básica do prompt. Não precisa editar arquivo nenhum por enquanto, pois vamos fazer direto pelos comandos. Antes, porém, dê uma olhada nesta lista:

    \$ # Mostra o prompt de usuário '$', ou root '#'.
    \u # Mostra o username.
    \h # Mostra o hostname.
    \t # Mostra a hora (time).
    \d # Mostra a data (date).

Tem outros. man bash, na seção PROMPTING tem mais informações.

Digite o próximo comando, e veja como fica o prompt (não se preocupe, poi s essas alterações não são definitivas).

    PS1='\$ '

Agora tente este:

     PS1='\033[31m \$ '

Mais um:

    PS1='\033[31m\h@\u, \033[33m \s-v \033[0m\$'

Notou a diferença das cores? Vamos tentar com negrito (lembre-se, depende de como as cores foram configuradas no ~/.Xdefaults):

    PS1='\033[31;1m\h@\u, \033[33;1m \s-v, \033[0m\$ '

IMPORTANTE: Quando usamos uma cor, ela fica em vigor até sobrescrevermos ela usando outra. No final, temos que fazer a cor voltar ao modo padrão/default. Para isso usamos a sequência de escape:

    \033[0m

Aqui está uma configuração da minha variável PS1, juntamente com mais duas linhas, pois a minha PS1 depende dessas duas outras linhas:

    shopt -s checkwinsize # For hr='=='stuff to work.
    hr='============================================================================================================================================================='
    PS1='${hr::COLUMNS}\r\n\[\e[1;32m\]\s-\v, \[\e[0;32m\]\h@\u, \d \t \n\$PWD=\[\e[1;36m\]"\w" \[\e[1;37m\] \n\$ \[\e[1;37m\]'

Quem quiser tirar umas ideais, aqui estão minhas config filesno github.http://snipt.net/FernandoBasso/my-bashrc-dec-26-2011

Como eu disse no início, a intenção é mostrar a relação Xdefaults vs Escape Sequences. Tem vários tutoriais na web que tratam exclusivamente do prompt do bash. No entanto, nunca vi nenhum documento ou tutorial mencionar essa relação. Sem saber disso, ficamos configurando cores às cegas…

Descobri essa questão da relação Xdefaults/Escape Sequences perguntando no fórum do arch (em inglês), depois de levar as tradicionais broncas “vai ler no wiki”, ou “RTFM”. Ou seja, o pessoal adora assumir que os ‘aprendizes’ não gostam de ler e querem respostas prontas. PS: eu tinha lido metade da web tentando aprender mais sobre isso, e no wiki do arch também não menciona isso. :)

May the force be with you. Always.

Restaurando o Gnote no tray (bandeja) tint2

Posted in Dicas by Fernando Basso on 17 de novembro de 2011

Restaurando o Gnote no tray (bandeja) tint2

Depois de um upgrade, o tint2 parou de aparacer no
systray do meu tint2. Eu uso arch linux com openbox + titn2
e o gnome-settings-daemon pra ajudar no look and feel.
Menciono isso porque o tint2 tem configurações que são
manipuladas pelo deconf.

Pesquisando, encontrei uma solução, que é usar a linha
de comando para mexer no gsettings e “setar” a variável
use-status-icon para true.


gsettings set org.gnome.gnote use-status-icon true

Essa opção pode ser habilitada através do dconf-editor
também.

Aqui está o link do local onde achei a dica de como restaurar
or ícone do gnote no systray:

Uma coisa que eu me pergunto é: por que esse tipo de opção
não está no “preferences” do próprio aplicativo? Sem contar que
me parce mais natural as pessoas que usam um aplicativo deste tipo
queiram ele lá no systray, pois assim é fácil ler ou adicionar novas
anotações ou lembretes. Que bom que há uma maneira (escondida) de
restaruar o ícone. :)

May the force be with you. Always.

Shutdown No Openbox

Posted in Dicas by Fernando Basso on 25 de agosto de 2011

O Arch Linux é uma distribuição que gosto muito. Leve! Totalmente customizável. Nada vem ‘pronto de fábrica’. Você praticamente faz ela pra você do jeito que você quer. Não vem com gnome nem kde nem nada por padrão.

Esta distro realmente segue a filosofia KISS ao pé da letra.

Gosto do openbox não só por ser lightweight, mas por causa do look-and-feel clean que ele tem. Contudo, ter que sair do openbox e virar root ou usar o sudo pra desligar ou reiniciar o sistema é meio chato. Depois de umas tentativas falhas, encontrei um jeito de conseguir reboot e shutdown no openbox sem precisar da senha do root. Eis aqui o que fiz:

1. Primeiro, instale o sudo:

su -c 'pacman --sync sudo'

2. Configure um grupo para poder rodar o shutdown e o reboot sem precisar de senha. Aqui, vamos configurar
o gruop users:

su -c 'visudo'

Adicione isto no final do arquivo, ou abaixo dos exemplos que já (porvavelmente) existem no arquivo:

%users ALL=NOPASSWD: /sbin/reboot
%users ALL=NOPASSWD: /sbin/shutdown

Salve o arquivo e feche. Se não sabe como fazer isto, aqui tem um pequeno tutorial de como mexer no arquivo /etc/sudoers.

3. Temos também que adicionar o nosso usuário de login ao grupo users. Vou dar o exemplo usando o meu usuário, que é ‘jeditux’:

su -c 'gpasswd -a jeditux users'

Obviamente, substitua ‘jeditux’ pelo seu usuário do sistema.

4. Faça logout. Não adianta só sair do X (modo gráfico). Tem que dar um logout e fazer login novamente.

5. Abra o arquivo ~/.config/openbox/menu.xml e adicione isto perto do fim do arquivo:(procure por entradas similares com Exit e/ou Logout e coloque depois delas):

<item label="Reboot"> <action name="Execute">
    <execute>sudo /sbin/reboot</execute>
 </action> </item>
<item label="Shudown"> <action name="Execute">
    <execute>sudo /sbin/shutdown -h now</execute>
</action> </item>

Salve e feche o arquivo.

6. Finalmente, dê um reload no openbox para que a nova configuração do menu entre em vigor:

openbox --reconfigure

Agora você deve ver ‘Shutdown’ e ‘Reboot’ no menu do openbox, e ser capaz de reiniciar e desligar o sistema sem precisar ficar digitando comandos e dando a senha do root. Qualquer dúvida, é só colocar nos comentários.

Gconftool-2 – Preferências e atalhos de teclado no Gnome

Posted in Dicas, Linux by Fernando Basso on 28 de julho de 2010

Básico

Com o gconf-editor podemos configurar qualquer coisa que
seja possível de ser configurada no Gnome, desde mostrar ou não os ícones no
Desktop, até reduzir o uso da CPU desabilitando os ícones dos menus, entre
várias outras possibilidades. Em algumas distros, como Arch Linux
ou Gentoo, o gconf-editor não vem instalado com o Gnome.
Pra quem não gosta ficar instalando coisas sem necessidade, ou simplesemente
prefere usar a linha de comando, pode usar o gconftool-2.

O gconftool-2 é uma interface em linha de comando usada para
os mesmos fins que o gconf-editor.

O repositório do GConf (sim, dizemos que o gconf tem um “repositório de
preferências”) é formado por um diretório, uma chave, e um valor para esta
chave.

Visualizando as opções

Para saber as configurações e possibilidades de um diretório, fazemos:

gconftool-2 --recursive-list <diretório>

Por exemplo:

gconftool-2 --recursive-list /apps/nautilus/desktop

Ou

gconftool-2 --recursive-list /apps/nautilus/desktop | grep trash
trash_icon_name = (no value set)
trash_icon_visible = true

apps/nautilus/desktop é o diretório.
trash_icon_visible é a chave.
true é o valor da chave (neste caso, um valor booleano).

Alguns exemplos da configuração das preferências

Geralmente, configuramos valores booleanos, ou strings. Vamos aos exemplos.

Para mostrar (ou não) o ícone da lixeira no Desktop, usamos um valor booleano:

gconftool-2 set /apps/nautilus/desktop/trash_icon_visible --type boolean 'false'

Troque false para true (ou vice-versa), e observe o resultado.
Você pode habilitar ou desabilitar outros ícones no Desktop, além deste do
exemplo. Para saber as possibilidades faça:

gconftool-2 --recursive-list /apps/nautilus/desktop

Uma coisa que está muito em pauta na data deste post, é o fato de o Ubuntu
10.04 vir com os botões da barra de título no lado esquerdo. Pra mudar para o lado direito, basta fazer:

gconftool-2 --set /apps/metacity/general/button_layout \
  --type string 'menu:minimize,maximize,close'

IMPORTANTE: Esta barra invertida (\) nada mais é do que um caractere especial que permite continuar um comando muito comprido na linha seguinte. Por exemplo,
fazer:
ls –help é o mesmo que fazer:
ls \
–help

NÃO deixe nenhum espaço depois da barra invertida (backslash).

Você poderia também, por exemplo, colocar o ‘close’ no lado do ‘menu’:

gconftool-2 --set /apps/metacity/general/button_layout \
  --type string 'close,menu:minimize,maximize'

Mudar wallpaper:

gconftool-2 --set /desktop/gnome/background/picture_filname \
  --type string '/path/to/wallpaper'

Mostrar o ‘path’ em modo texto no nautilus:

gconftool-2 --set /apps/nautilus/preferences/always_use_location_entry \
  --type boolean true

Mudar wallpaper:

gconftool-2 --set /desktop/gnome/background/picture_filename \
  --type string 'Pictures/Backgrounds/my_gray_background.jpg'

Você já notou que o menu ‘Sistema’ não tem ícones (ao contráio do ‘Aplicações’ e ‘Locais’) ? Se quer ícones aí também, faça:

gconftool-2 --set /desktop/gnome/interface/menus_have_icons \
 --type boolean 'true'

Atalhos para rodar programas

Uma das coisa mais legais, é criar atalhos de teclado para abrir nosos
programas mais usados. Assim não é necessário ficar indo nos menus e sub-menus, ou dar Alt-F2 e dititar o nome do programa.
1. Primeiro, você configura uma atalho em /apps/metacity/global_keybindings.
2. Depois, configura um comando para aquele atalho.

Vamos visualizar os respectivos diretórios de chaves/valores primeiro, para
termos uma ideia. Rode os dois comandos, um de cada vez, e analize a saída.

gconftool-2 --recursive-list /apps/metacity/global_keybindings
gconftool-2 --recursive-list /apps/metacity/keybinding_commands

Vou exemplificar com os atalhos que eu mais uso. Lembrando que a tecla
windows, é entendida pelo gconf/gnome como Mod4. Então, os nossos atalhos
serão conseguidos quando seguramos a tecla windows em conjunto com outra
tecla, como Win+f, Win+g ou Win+1.

Abrir o Firefox:

gconftool-2 --set /apps/metacity/global_keybindings/run_command_1 \
  --type string '<Mod4>f'
  gconftool-2 --set /apps/metacity/keybinding_commands/command_1 \
  firefox

Abrir o Opera:

gconftool-2 --set /apps/metacity/global_keybindings/run_command_2 \
  --type string '<Mod4>o'
  gconftool-2 --set /apps/metacity/keybinding_commands/command_2 \
  opera

Abrir o xterm:

gconftool-2 --set /apps/metacity/global_keybindings/run_command_3 \
  --type string '<Mod4>x'
gconftool-2 --set /apps/metacity/keybinding_commands/command_3 \
  --type string 'xterm -name xterm-Dejavu -geometry 87x17+0-0'

Este exemplo para o xterm depende da configuração do ~/.Xdefaults.

Abrir o gnome-terminal:

gconftool-2 --set /apps/metacity/global_keybindings/run_command_4 \
  --type string '<Mod4>t'
gconftool-2 --set /apps/metacity/keybinding_commands/command_3 \
  --type string 'gnome-terminal --geometry 87x17'

Abrir o Nautilus:

gconftool-2 --set /apps/metacity/global_keybindings/run_command_5 \
  --type string '<Mod4gt;h'
gconftool-2 --set /apps/metacity/keybinding_commands/command_5 \
  --type string 'nautilus'

Abrir o gvim:

gconftool-2 --set /apps/metacity/global_keybindings/run_command_6 \
  --type string '<Mod4>g'
gconftool-2 --set /apps/metacity/keybinding_commands/command_6 \
  --type string 'gvim'

Abrir o alltray:
Aqui está minha configuração do gvim.
Agora você já é capaz de de criar seus próprios atalhos de teclado.

Atalhos para mudar de Desktop

Finalmente, uma coisa que uso muito, são dois atalhos para mudar para o
desktop virtual 1 e 2.

gconftool-2 --set /apps/metacity/global_keybindings/switch_to_workspace_1 \
  --type string '<Mod4>1'
gconftool-2 --set /apps/metacity/global_keybindings/switch_to_workspace_2 \
  --type string '<Mod4>2'

Eu não sou um expert do Gnome. Desculpem-me por quaisquer erros.
Espero que isto seja útil. May the force be with you. Always.