blami tec

Alguns apunts de tecnologia

Assignació de tecles després de suspensió en Debian

leave a comment »

En cas que tinguis mapejades algunes tecles en Debian (al menys fins a Jessie), és probable que t’hagis trobat que, en tornar de la suspensió (pm-suspend) la teva redefinició s’ha perdut.

Una manera que m’ha funcionat és afegir un guió a /etc/pm/sleep.d/ que serà executat quan el teu equip torni de la suspensió.

En el meu cas, el guió l’he anomenat 20_xmodmap i conté el següent:

case "${1}" in
   resume|thaw)
      su -c "sleep 3; /usr/bin/xmodmap /root/.Xmodmap" &
      ;;
esac

Cal que facis executable el guió, per exemple amb:

$ sudo chmod +x /etc/pm/sleep.d/20_xmodmap

També caldrà que copiïs a /root el teu fitxer .Xmodmap, per exemple, amb la comanda:

$ sudo cp -i ~/.Xmodmap /root/

I, si tot ha anat bé, ja pots fer sudo pm-suspend. En tornar, les teves tecles quedaran definides com indiqui .Xmodmap.

Fixa’t que el guió que hem creat inclou una crida a sleep. Això és un requeriment donat que altrament podria haver estat executat abans de carregar la definició original del teclat. L’inconvenient és que, de vegades pots haver començat a teclejar i encara no s’ha produït el canvi.

Encara tinc coses per millorar en aquesta solució:

  • Voldria que la redefinició fos respecte a com estava mapejat la vegada anterior. Probablement puc fer un script similar que, abans d’anar a suspensió guardi la configuració del teclat.
  • Voldria que això depengués de l’usuari. Ara remapeja per a tots els usuaris del sistema.
  • Voldria que també fos automàtic el mapeig en arrencar el sistema. Em cal trobar algun servei que es carregui en l’arrencada on col·locar un script similar.
  • Voldria que també funcionés quan el sistema queda suspès per tancar la tapa del portàtil. Sembla que no és el mateix tipus de suspensió.

De moment, però, és la millor solució que he trobat per no haver d’estar remapejant constantment.

Written by blami

7 Abril 2017 at 10:19

Arxivat a General

Tagged with ,

Millora la navegabilitat de la línia de comandes

leave a comment »

Per alguna raó, la línia de comandes al gnome-terminal m’ha deixat de funcionar com era habitual.

El més incòmode per mi és la pèrdua de les combinacions ctrl-esquerra i ctrl-dreta, amb les que podia saltar per paraules. Em resulten tan còmodes, que fins i tot tinc el behave mswin al meu .vimrc per poder fer-les servir al vim.

Les alternatives alt-b i alt-f, em presenten un problema ja que la darrera activa el menú.

He aconseguit solucionar-ho afegint una línia a ~/.inputrc (amb el $ inclòs)

$include /etc/inputrc

En cas que la variable INPUTRC no estigui definida, caldrà afegir la següent línia a ~/.bashrc:

export INPUTRC=~/.inputrc

Written by blami

18 Mai 2016 at 12:07

Arxivat a General

Posar entre cometes totes les paraules d’una línia amb Vim

leave a comment »

Imagina que tens una llista de paraules (potser obtingudes d’un full de càlcul) que et cal posar en forma de llista separada per comes i entre cometes.

Per exemple:
un
dos
tres

i el que vols és tenir:
"un", "dos", "tres"

Per poder-ho fer amb Vim simplement,

  1. col·loca el cursor en la primera paraula i en mode normal selecciona (amb comanda V) fins la darrera
  2. ajunta les línies (comanda J)
  3. escriu la substitució: s/\>/,/g
  4. opcionalment, elimina la darrera coma ($x)
  5. escriu la substitució :s/\<.\{-\}\>/”&”/g

Ja està!

Written by blami

18 Setembre 2014 at 17:13

Arxivat a vim

Tagged with

Convertir en escapament una altra tecla

leave a comment »

Trobo que l’ús que em requereix l’editor Vim de la tecla d’escapament (<Esc>) és excessiu tenint en compte la distància a la que es troba aquest tecla a la majoria dels teclats que faig servir.

No sóc l’únic. He trobat des de qui canvia la tecla de bloqueig de majúscules per la d’escapament fins a qui es programa un pedal per fer Esc amb el peu!

Bé, jo sí faig servir la tecla de bloqueig de majúscules i no em veig (de moment) amb cor de posar un pedal. Així que m’he decidit per trobar una altra tecla que faci servir poquet.

La meva elecció ha estat la d’ordre (º) que faig servir tan poc que fins i tot no em molestaria gaire haver d’introduir el seu codi a ma.

Seguint aquesta entrada d’askubuntu, he trobat aquesta solució:

~ $ xmodmap -pke > .Xmodmap
~ $ cp .Xmodmap .Xmodmap.original
~ $ echo 'xmodmap .Xmodmap' >> .xinitrc

De fet, la segona línia no és imprescindible. Ho faig per guardar-me la configuració original i poder consultar-la si faig alguna destrossa. En el pitjor dels casos, però, simplement haig d’eliminar la línia afegida a la tercera comanda per deixar les coses tal i com estaven.

Ara edito la línia que m’interessa. En aquest cas la de la tecla amb codi 49, que originalment conté:

keycode  49 = masculine ordfeminine masculine ordfeminine backslash backslash backslash

La passo a que contingui:

keycode  49 = Escape ordfeminine masculine ordfeminine backslash masculine backslash

La propera vegada que inicii el sistema em funcionarà la meva nova tecla d’escapament. Si no vull reiniciar encara, simplement haig d’executar a la shell la comanda que he posat a .xinitrc, per exemple amb (atenció al primer punt!):

 ~ $ . .xinitrc

D’aquesta manera, en el cas remot que necessiti escriure º, simplement hauré de fer <altgr>+<shift>+º. Més que suficientment accessible.

Written by blami

19 Mai 2013 at 01:10

Arxivat a General

Desactivar el touchpad a l’Awesome WM mentre teclejes

leave a comment »

Si fas servir Awesome WM al teu portàtil, és possible que estiguis patint el mateix problema que jo: estàs escrivint una línia i de sobte te n’adones que el cursor ha passat a una altra part del document o, fins i tot, a una altra finestra.

Una possibilitat està en fer servir el programa syndaemon. La comanda és simplement

$ syndaemon -i 0.8 -k -R -d

Aquesta comanda fa que s’esperi 0,8 segons després del darrer cop que premis una tecla (no de funció com el ctrl) i s’executa en background.

Si vols que s’executi a l’inici, una manera senzilla és afegir el següent al teu rc.lua (per exemple, al final)

function run_once(prg, opt)
    awful.util.spawn_with_shell("pgrep -u $USER -x " .. prg .. " || (" .. prg .. " " .. opt .. ")")
end

run_once("syndaemon", "-i 0.8 -k -R -d")

La funció run_once() assegura que només s’executi un cop.

Si no fas servir Awesome WM (cosa que et recomano) potser podràs trobar més informació a:

Written by blami

31 gener 2013 at 20:50

Arxivat a General

Indentació de codi des de línia de comandes

leave a comment »

A la gent que comença a programar (no en Python), sol resultar-li complicat codificar mantenint una indentació adequada. El resultat és un codi difícil de llegir i, per tant, d’entendre, depurar, modificar…

Si fas servir l’editor Vim, el problema no existeix. Simplement teclejes en mode normal gg=G i et queda indentat.

Si no t’has animat encara a fer servir Vim, però el tens instal·lat, pots fer-lo servir des de línia de comandes:

$ vim -c 'normal gg=G' -c 'x' elmeucodi.c

Et pots definir un àlies amb:

$ alias indenta="vim -c 'normal gg=G' -c 'x'"

I ja pots fer simplement:

$ indenta elmeucodi.c

Si poses l’àlies al teu ~/.bashrc o a ~/.bash_aliases, tindràs la nova comanda disponible al teu terminal.

Et funcionarà per tots els llenguatges que el teu Vim tingui configurats.

Written by blami

17 gener 2013 at 17:50

Arxivat a General, vim

Equips sincronitzats amb un pendrive i amb git

leave a comment »

Per la meva feina faig servir bàsicament dos ordinadors, el de casa i el de la feina.

En tots dos vull tenir la mateixa informació i, de fet, vull disposar en tot moment de tot l’històric de canvis per si haig de rescatar alguna versió anterior d’algun fitxer realitzada a qualsevol de les màquines. A banda, em cal no dependre de la disponibilitat de xarxa (dropbox i similars descartats). A més a més, alguns dels continguts amb que treballo no han d’arribar a algunes persones i per tant la versió gratuïta de GitHub i similars doblement descartada.

Fins ara me n’anava sortint passant la informació amb un pendrive, fent servir alguns scripts casolans que no acabaven de resoldre bé tots els casos: pex. quan esborrava un fitxer a casa, però l’havia modificat a la feina.

Finalment m’he decidit a donar el pas i ho he intentat muntar amb git [1].

El mecanisme final m’ha resultat raonablement fàcil: cal crear tres repositoris, un a cada màquina i l’altre al pen.

Com que vull poder accedir als fitxers també des del pen i de vegades ho haig de fer a diferents màquines que no sempre disposen de git, no em serveix crear un repo –bare, i mira que seria més còmode! En breu, com que el repositori del pen no és bare, no puc fer fàcilment git push des de les màquines contra el pen. En canvi, haig de fer git pull des de cada repositori. Si això no et diu res, simplement ignora-ho: has tingut sort de no trobar-t’ho.

Primer de tot, cal definir clarament els noms que donarem als repositoris remots.

Per exemple, considera els noms del següent esquema

Esquema de l’estructura del sistema

Un cop tenim clar com està, comencem la configuració

1. connecta el pen a la màquina de casa i, des d’un terminal, escriu:

$ cd PATH_CONTINGUTS_CASA
$ git init         # només si encara no és un repositori git
$ git remote add pen PATH_CONTINGUTS_PEN
$ git config remote.pen.mirror true

2. Ara anem pel pendrive

$ cd PATH_CONTINGUTS_PEN
$ git init         # només si encara no és un repositori git
$ git remote add casa PATH_CONTINGUTS_CASA
$ git config remote.casa.mirror true
$ git remote add feina PATH_CONTINGUTS_FEINA
$ git config remote.feina.mirror true

3. Quan puguis faràs quelcom semblant a la màquina de la feina

$ cd PATH_CONTINGUTS_FEINA
$ git init         # només si encara no és un repositori git
$ git remote add pen PATH_CONTINGUTS_PEN
$ git config remote.pen.mirror true

4. ja està!

Per sincronitzar des de casa, per exemple, pots fer

$ cd PATH_CONTINGUTS_CASA
$ git add -A .                  # o el que vulguis afegir
$ git commit -am "missatge"
$ git pull pen master

i el mateix pel pendrive

$ cd PATH_CONTINGUTS_PEN
$ git add -A .                  # o el que vulguis afegir
$ git commit -am "missatge"
$ git pull casa master

Amb això, hauries de trobar-te el mateix a la branca master dels dos repositoris. Si treus el pen, te l’emportes a la feina i fas el mateix (bé, des del pen has de fer $ git pull feina master en comptes de casa), ja tens els continguts de la feina sincronitzats amb els de casa.

Si un cop finalitzes a la feina, tornes a fer la sincronització amb el pen i t’ho emportes a casa, tindràs els darrers canvis a casa.

El problema sembla resolt, però… és una mica pal, oi?

M’he fet un script que m’ho automatitza:

#! /bin/bash
LOCAL="/cami/als/continguts/de/casa"   # cal canviar pel camí a la
PEN="/cami/als/continguts/del/pen"
#
LOCAL_NAME=casa                        # posarem feina a la feina
PEN_NAME=pen
#
commit () {
    # afegeix tots els possibles canvis al stage del repositori que es troba a $1
    # i fa el commit.
    if [ -d $1 ];
    then
        echo "··· Commit on $1"
        cd $1
        find . -type d | grep -v "\.\w" | sed "s/\(.*\)/\"\1\"/g" | xargs git add -A
        git commit -am "`date`"
    fi
}
#
if [ -d $LOCAL ];
then
    commit $LOCAL
    if [ -d $PEN ];
    then
        commit $PEN
        cd $LOCAL
        echo "··· Pulling from $PEN"
        git pull $PEN_NAME master
        cd $PEN
        echo "··· Pulling from $LOCAL"
        git pull $LOCAL_NAME master
    fi
fi

Si el vols fer servir, simplement copia el contingut anterior, crea un fitxer, enganxa-li el contingut, i guarda’l en algun lloc que recordis.

Per exemple, jo el tinc guardat a ~/bin/Skz.sh perquè em permet cridar-lo des de qualsevol directori.

Algunes consideracions a tenir en compte si vols fer-ho anar:

1. és possible que el primer cop que l’executis et surti un fatal error. Sembla que si no hi ha res als repositoris, el git es queixa. Penso que pots ignorar el missatge amb tranquil·litat si, quan tinguis continguts, deixa de mostrar el missatge.

2. afegeix TOTS els canvis a cada commit. Si vols filtrar, hauràs de modificar la funció commit() o bé configurar git perquè ignori el que vulguis. Per exemple, a mi m’emprenya que conservi els *~ que em genera el vim. Simplement he afegit *~ al fitxer ~/.gitignore_global com indiquen a aquest article.

3. la sortida pot ser una mica dura de llegir. Potser més endavant miri com processar-la de manera que el script em generi quelcom més “humà”. Si ho fas tu, i ho vols compartir, des de ja et dono les gràcies!


[1] Moltes gràcies Alejandro per la teva insistència i per aquella decisiva introducció al git!

Written by blami

20 Juny 2012 at 20:30

Arxivat a General