bannière du site

Tilix : un émulateur de terminal scindable en GTK3 pour GNOME

Rédigé par mistervolt Aucun commentaire

Aujourd'hui je vous propose de découvrir un super émulateur de terminal : Tilix.
Ce tuto a été écrit pour et testé sous openSUSE Leap 42.2 mais les instructions qui suivent doivent pouvoir s'adapter facilement à n'importe quelle distribution.

Certains d'entre vous connaissent peut-être Terminator, un émulateur de terminal dans le même genre, à savoir un émulateur ayant la capacité de se scinder en sous-terminaux.

Tilix (anciennement Terminix, le projet a dû changer de nom pour des raisons légales, ce dernier étant déposé par une entreprise de lutte contre... les termites ) est écrit en D et utilise une interface en GTK3 et est conçu pour adhérer aux directives GNOME Human Interface.

Il s'intègre donc particulièrement bien dans l'environnement de bureau Gnome et dispose d'ailleurs d'une extension pour Nautilus permettant d'ouvrir une instance de Tilix dans le répertoire courant.

Il dispose également d'une fonctionnalité très intéressante : la possible d'ouvrir une fenêtre en mode quake, c'est-à-dire une fenêtre déroulante, comme l'offre des logiciels tels que Guake ou Yakuake.

Cette fenêtre quake peut bien entendu également se scinder en deux.

À titre personnel, j'aime beaucoup Tilix car,visuellement, il s'intègre bien à Gnome. Le fait qu'il puisse se scinder dans tous les sens m'est très utile, pour afficher plusieurs programmes en même temps (un lecteur de musique et une page de man par exemple, ou encore créer un vrai petit IDE en affichant Vim, iPython et un shell dans une même fenêtre). De plus, je le préfère à Gnome-Terminal pour une raison tout bête : le support de la transparence de la couleur de fond ! C'est une fonctionnalité qui a été retirée hélas, c'est un truc tout bête, ça peut ne paraître qu'esthétique mais ça m'est très souvent utile pour utiliser, dans le terminal, des informations affichées dans un navigateur Web placé derrière par exemple.

Bien qu'il existe un paquet précompilé disponible ici : https://software.opensuse.org/package/terminix nous allons voir ici comment récupérer les sources et le compiler directement sur votre ordinateur.
Pour s'embêter à compiler localement ? Eh bien déjà parce que le paquet existant utilise l'ancien nom , ensuite parce que cela permet d'avoir une version toute fraîche, incluant les derniers correctifs et traductions (la localisation en français était par exemple quasiment inexistante et non présente dans la version du lien ci-dessus) et enfin parce que c'est l'occasion d'apprendre quelque chose de nouveau !

Tout d'abord, nous allons ajouter le dépôt contenant les outils de développement du langage D (en root) :

zypper ar -f http://download.opensuse.org/repositories/devel:/languages:/D/openSUSE_Leap_42.2 D-Lang

Puis nous allons installer les compilateurs pour D et les dépendances (en root) :

zypper in dub dmd phobos-devel-static gcc xorg-x11-devel glib2-devel gdk-pixbuf-devel po4a

Puis nous récupérons les sources (en utilisateur) :

git clone https://github.com/gnunn1/tilix.git

Nous rentrons dans le répertoire contenant les sources :

cd tilix

Et lançons la commande de compilation (en utilisateur), certains paquets nécessaires, tels que gtkd, vont être installés dans $HOME/.dub/packages :

dub build --build=release

Une fois la compilation réalisée, il va falloir procéder à l'installation. La version actuellement présente dans Leap 42.2 de gettext-tools et de gettext-runtime ne dispose pas de l'option permettant de localiser correctement la page de manuel. Pour obtenir le man en français (traduit par votre serviteur ), il faut une version supérieure à 0.19.7 telle que disponible via le lien OneClickInstall suivant :
http://software.opensuse.org/ymp/devel:tools:building/openSUSE_Leap_42.2/gettext-tools.ymp

L'installation peut maintenant se faire :

sudo ./install.sh

Et voilà, Tilix est à présent installé sur votre machine (dans /usr/bin/tilix).

Enjoy !

PS : pour les feignasses (no offense ;) ), j'ai compilé la dernière version dans l'OBS ici : https://software.opensuse.org/package/tilix

Un prompt zsh au poil

Rédigé par mistervolt Aucun commentaire

Comme beaucoup d'entre nous, j'utilise beaucoup le terminal et je suis toujours intéressé par de nouvelle astuces à ce sujet.
J'ai récemment testé puis adopté powerline (voir Article sur powerline et terminator).
Néanmoins je trouve ce dernier un peu lourd. Il dispose de plein de fonctionnalités (des segments) et est visuellement très chouette mais ralenti un peu l'utilisation et le lancement du shell (et donc l'ouverture de nouveaux émulateurs de terminal).

J'ai donc décidé de voir si je ne pouvais pas obtenir facilement la même chose simplement en configurant zsh comme il faut via mon .zshrc.
J'ai donc fait mumuse, lu de la doc et searcher le fucking web et voici ce que ça donne :

Mode normal :

Dans un dépôt Git :

Si la commande précédente a renvoyé un code d'erreur :

Lorsqu'une chanson est en cours de lecture (via mpd) :

Et voici la partie correspondante de mon .zshrc :

#---------- DEFINITION DES FONCTIONS ----------

# Récupérer la charge système :
function load () {
    read one five fifteen rest </proc/loadavg
    load="$one $five $fifteen"
    print $load
}
# Récupérer la branche git si c'est un dépôt :
function izitgit () {
    if [[ -d .git ]] ; then
        gitb="[$(git rev-parse --abbrev-ref HEAD)]"
        if [[ $?  -ne 0 ]] || [[ -z "$gitb" ]] ; then
            return
        fi
    else
        gitb=""
    fi
    print $gitb
}

# Récupérer la chanson en cours :
function mpd () {
    if [[ $(mpc current) == "" ]] ; then
        song=""
    else
        song="[$(mpc current)]"
    print $song
    fi
}

#---------- CONSTRUCTION DU PROMPT ----------

# ...principal
PROMPT="[%F{magenta}%n%f (%F{green}%m%f): %F{yellow}%~ %f]%F{magenta}> %f"
# ...à droite
RPROMPT='[%F{red}$(load)%f][%B%F{cyan}%*%f%b]$(izitgit)%F{yellow}$(mpd)%f%(?..%B%K{red}[-%?-]%b%k)'
# Indispensable pour assurer l'extension des résultats des commandes :
setopt prompt_subst
autoload -U promptinit
promptinit

J'espère que ça pourra être utile à ceux qui veulent bidouiller leur prompt.
Si vous avez des pistes d'améliorations ou des astuces pour votre bash ou votre zsh à partager, n'hésitez pas ! Postez !

Have fun and enjoy !

Compiler la dernière version de GNU Emacs (25.1) sur Debian Stretch

Rédigé par mistervolt Aucun commentaire

Dans cet article, je vous présente rapidement comment compiler GNU Emacs (en dernière version) sur Debian Testing (avec interface GTK3).
Le tout ne devrait pas vous prendre plus de 10 min.

Tout d'abord on récupère l'archive :

wget http://ftp.igh.cnrs.fr/pub/gnu/emacs/emacs-25.1.tar.xz

On DL et on importe le trousseau des clés GPG GNU :

wget https://ftp.gnu.org/gnu/gnu-keyring.gpg
gpg --import gnu-keyring.gpg

Grâce à la clé, on vérifie notre archive :

gpg --verify emacs-25.1.tar.xz.sig emacs-25.1.tar.xz

Cette commande devrait vous renvoyer le résultat suivant :

gpg: Signature faite le sam. 17 sept. 2016 19:06:16 CEST
gpg:                avec la clef RSA 0x233587A47C207910
gpg: Bonne signature de « Nicolas Petton <petton.nicolas@gmail.com> » [inconnu]
gpg:                 alias « Nicolas Petton <nicolas@petton.fr> » [inconnu]
gpg: Attention : cette clef n'est pas certifiée avec une signature de confiance.
gpg:             Rien n'indique que la signature appartient à son propriétaire.
Empreinte de clef principale : 28D3 BED8 51FD F3AB 57FE  F93C 2335 87A4 7C20 7910

Notre archive étant vérifiée, on peut l'extraire :

tar xvf emacs-25.1.tar.xz

On entre dans le dossier :

cd emacs-25.1

En root on installe les dépendances de compilation (ça peut varier, chez moi il manquait les bibliothèques suivantes) :

apt-get install libgtk-3-dev libxpm-dev libjpeg-dev libgif-dev libtiff5-dev

On repasse en $USER normal puis on lance la commande de configuration pré-compilation.
Il est évidemment possible de passer des options à cette commande pour compiler Emacs sans certaines fonctionnalités (ex: --with-x=no pour ne pas activer le support graphique ou encore --prefix=/un/chemin pour que l'installation finale se fasse ailleurs que dans /usr/local/. Je vous laisser lire le fichier INSTALL pour plus d'informations) :

./configure
make

La compilation prend plusieurs minutes, une fois finie on teste notre binaire :

src/emacs -Q

Si c'est tout bon, on peut l'installer pour tout le système si on veut (commande à lancer en tant que root donc) :

make install

Et voilà, si vous avez conservé les options par défaut, GNU Emacs 25.1 devrait être installé dans /usr/local/bin et un lanceur a du apparaître dans le menu des applications de votre environnement de bureau.

Un .vimrc remis au propre

Rédigé par mistervolt Aucun commentaire

Les utilisateurs de Vim seront possiblement intéressés, les autres pourraient avoir envie de s'y mettre.
J'ai mis au propre et à jour ma configuration de Vim (~/.vimrc), après notamment des ajouts de plugins et d'une configuration en mode "IDE pour Python", langage que je me suis mis en tête d'apprendre.
Je le partage donc sur le blog en espérant que ça puisse être utile et en guise d'archive personnelle :

" | ---------------------------------------------------------------------------
" | File    : ~/.vimrc
" | By      : sogal
" | ---------------------------------------------------------------------------

" GENERAL OPTIONS :
" -----------------------------------------------------------------------------
set nocompatible     " Ne pas assurer la compatibilité avec l'ancien Vi
set encoding=utf8    " Encodage en utf-8
set mouse=a          " Sélection à la souris
set history=50       " Nombre de commandes dans l'historique

" Montrer les tabulations, espaces insécables et de fin (eol:¶)
set list listchars=nbsp:¤,tab:··,trail:¤,extends:▶,precedes:◀

set viminfo='20,\"50 " Options du fichier ~/.viminfo
set backspace=2      " Active la touche Backspace
set wrap
" Wrappe et justifie à 79 caractères avec la touche '@'
map @ {v}! par 79j
" Autorise le passage d'une ligne à l'autre avec les flèches gauche et droite
set whichwrap=<,>,[,]
" Essaye de garder le curseur dans la même colonne quand on change de ligne
set nostartofline
" Option de la complétion automatique
set wildmode=list:full
set wildchar=<Tab>
set wildmenu         " Meilleur complétion des commandes dans la ligne de status
set tabstop=4 shiftwidth=4 expandtab " Pas de vraies tabulations
set softtabstop=4    " Backspace supprime 4 espace d'un coup
set ignorecase       " Les recherches ne sont pas 'case sensitives'...
set smartcase        " ... sauf si le pattern recherché contient des majuscules
" Le pliage se base sur l'indentation du fichier
set foldmethod=indent
set foldnestmax=3    " 3 niveaux de pliage maxi
set nofoldenable     " Ne pas plier par défaut
set incsearch        " Recherches incrémentalees
set hlsearch         " Mettre en surbrillance le mot cherché
set autoread         " Auto lecture si le fichier a été modifié depuis l'extérieur

" UI :
" -----------------------------------------------------------------------------
colorscheme molokai  " Thème de couleur
syntax enable        " Active la coloration syntaxique
" Contenu de la barre de status
set statusline=%F\ Type=%y\ %=Pos=%l,%c\ (%p%%)\ SLOC=%L\ %P
set laststatus=2     " Barre de status toujours visible
set t_Co=256         " Utiliser 256 couleurs
set textwidth=78     " Largeur maxi du texte inséré
set colorcolumn=80   " Mise en couleur colonne n°80
set showcmd          " Affiche les commandes dans la barre de status
set showmatch        " Affiche la paire de parenthèses
set number           " Afficher les numéros de ligne
set splitright
" set relativenumber   " Mode numérotation des lignes relative

" INDENT :
" -----------------------------------------------------------------------------
set smartindent
" Options d'indentation pour un fichier C
set cinoptions=(0
set shiftwidth=4     " Nombre d'espace dans l'indentation

" MAPPING :
" -----------------------------------------------------------------------------
" Remapper pour conserver la sélection
vnoremap < <gv
vnoremap > >gv
" Mapper Y pour copie jusqu'à fin de ligne
map Y y$
" U n'est pas utile, en faire un redo (Ctrl - R)
map U <C-r>
" kj est plus rapide à atteindre que <Esc>
inoremap kj <Esc>
cnoremap kj <Esc>
" L sépare une ligne à la position du curseur (inverse de J)
nnoremap L i<Enter><Esc>
" Mapper pour split navigation
nnoremap <C-J> <C-W><C-J>
nnoremap <C-K> <C-W><C-K>
nnoremap <C-L> <C-W><C-L>
nnoremap <C-H> <C-W><C-H>
" Mapper leader key
let mapleader = ","
" ,r passe en mode num ligne relatives
map <leader>r :set relativenumber<CR>
" Folding avec espace
nnoremap <space> za

" POWERLINE :
" -----------------------------------------------------------------------------
" set rtp+=/usr/share/vim/vimfiles/plugin/powerline.vim
" python from powerline.vim import setup as powerline_setup
" python powerline_setup()
" python del powerline_setup
" set laststatus=2
" set t_Co=256

" SCROLLING :
" -----------------------------------------------------------------------------
set scrolloff=8         " Conserver 8 lignes visibles en scrollant verticalement
set sidescrolloff=15    " Conserver 15 colonnes visibles en scrollant horizontalement
set sidescroll=1

" ASTUCES :
" -----------------------------------------------------------------------------
" Rouvrir le fichier là où on l'a quitté
au BufReadPost * if line("'\"") > 1 && line("'\"") <= line("$") | exe "normal! g'\"" | endif
" :set scrollbind    " Scroller syncro entre 2 fenêtres

" WRAPPING INTELLIGENT EN FONCTION DU TYPE DE FICHIERS :
" -----------------------------------------------------------------------------
" Définir wrap et textwidth en fonction du fichier ou de son emplacement
function! SetupEnvironment()
  let l:path = expand('%:p')
  if l:path =~ '/home/sogal/.*'
    setlocal textwidth=0
  elseif (&ft == 'c' || &ft == 'html' || &ft == 'sh' || &ft == 'txt2tags')
    setlocal textwidth=0
  elseif (&ft == 'mail')
  " Largeur à 72 car. pour les mails
    setlocal textwidth=72
  else
  " Le défaut est à 78 car.
    setlocal textwidth=78
  endif
endfunction
au BufReadPost,BufNewFile * call SetupEnvironment()

" txt2tags
au BufNewFile,BufRead *.t2t map 2l :w<CR>:!txt2tags -t html "%" ; unoconv -f odt "%:r.html" <CR>
au BufNewFile,BufRead *.t2t map 2h :w<CR>:!txt2tags -t html -o /tmp/txt2tags_apercu.html "%" ; firefox "file:///tmp/txt2tags_apercu.html" <CR>
au BufRead,BufNewFile *.t2t set tw=78
au BufNewFile,BufRead *.t2t set spell
au BufNewFile,BufRead *.t2t setlocal spell spelllang=fr
au BufNewFile,BufRead *.t2t set ft=txt2tags
au BufNewFile,BufRead *.t2t set noexpandtab

" PYTHON IDE :
" -----------------------------------------------------------------------------
" Exécuter le script avec '2p'
au BufNewFile,BufRead *.py map 2p :w<CR>:!python3 "%"<CR>
" Vérifier conformité du script à la PEP8 avec '2P'
au BufNewFile,BufRead *.py map 2P :w<CR>:!python3-pep8 '%'<CR>
" Paraméter le fichier pour conformité à la PEP8
au BufNewFile,BufRead *.py
    \ set tabstop=4 |
    \ set softtabstop=4 |
    \ set shiftwidth=4 |
    \ set textwidth=79 |
    \ set expandtab |
    \ set autoindent |
    \ set fileformat=unix |

let python_highlight_all=1                  " Highlight du code

" VUNDLE ET CONFIGURATION DES PLUGINS ET DE LEUR ENVIRONNEMENT :
" -----------------------------------------------------------------------------
set rtp+=~/.vim/bundle/Vundle.vim
" L'environnement Vim inclus Vundle et l'exécute au lancement
call vundle#begin()
Plugin 'gmarik/Vundle.vim'

" Ajouter les plugins ci-dessous :
" (note older versions of Vundle used Bundle instead of Plugin)
" -----------------------------------------------------------------------------
Plugin 'tmhedberg/SimpylFold'               " Meilleur folding
let g:SimpylFold_docstring_preview=1        " Voir la docstring du code foldé

" Indentation conforme PEP8
Plugin 'vim-scripts/indentpython.vim'

" Meilleur autocomplétion Python
Bundle 'Valloric/YouCompleteMe'

" Fermer la fenêtre d'autocomplétion après usage
let g:ycm_autoclose_preview_window_after_completion=1

" ,g amène vers la définition de l'élément complété
map <leader>g  :YcmCompleter GoToDefinitionElseDeclaration<CR>

" Python avec support virtualenv (pour PATH plugin YoukCompleteMe):
" -----------------------------------------------------------------------------
py << EOF
import os
import sys
if 'VIRTUAL_ENV' in os.environ:
  project_base_dir = os.environ['VIRTUAL_ENV']
  activate_this = os.path.join(project_base_dir, 'bin/activate_this.py')
  execfile(activate_this, dict(__file__=activate_this))
EOF

Plugin 'scrooloose/syntastic'               " Vérif syntaxe Python
Plugin 'nvie/vim-flake8'                    " Ajout check conformité PEP8

" Navigateur de fichiers dans une side-bar
Plugin 'scrooloose/nerdtree'
map <leader>t :NERDTreeToggle<CR>           " ,t affiche l'arborescence
let NERDTreeIgnore=['\.pyc$', '\~$']        " Ignorer fichier .pyc in NERDTree

" Barre de status (+ light que powerline)
Plugin 'vim-airline/vim-airline'
Plugin 'vim-airline/vim-airline-themes'

" *TOUS* les plugins sont à ajouter et configurer avant cette ligne !
call vundle#end()                           " Requis
filetype plugin indent on                   " Requis

" DEMARRAGE AUTO DES PLUGINS :
" -----------------------------------------------------------------------------
autocmd VimEnter * NERDTree
Fil RSS des articles de ce mot clé