Script para abrir o terminal em um determinado diretório, em particular o espaço de trabalho, depois o VIM para um arquivo específico

1

Bônus: vsplit para outro arquivo. ;)

Eu tenho 9 espaços de trabalho e geralmente tenho vários terminais executando o VIM em arquivos diferentes. A configuração é bastante padrão para um projeto - mas eu tenho que abrir cinco terminais, movendo cada um para seu próprio espaço de trabalho, maximizando, abrindo um arquivo .hpp no VIM e exibindo seu arquivo .cpp correspondente para cada terminal .

Eu gostaria de escrever um roteiro para isso, mas não sei como! Pesquisando no Google e testando no gedit, comecei com algo como

wmctrl -s 4 ; gedit & sleep 3; wmctrl -s 0;

Mas isso só abre o gedit no espaço de trabalho no qual estou atualmente. Um problema em potencial (mas eu sou ignorante o suficiente sobre isso para não saber se é realmente um problema ou não) é que eu uso o recurso de papel de parede Compiz que permite diferentes papéis de parede em diferentes áreas de trabalho.

Idealmente, gostaria de trabalhar para um script que faça isso para mim e não um plug-in.

Alguma sugestão ou ideia?

    
por AmagicalFishy 22.08.2015 / 00:04

1 resposta

0

O script abaixo gera 6 janelas para o editor de texto gnome-terminal com vi e as move para viewports apropriados (também conhecidos como workspaces) no desktop Unity.

O script determina matematicamente qual janela pertence em qual espaço de trabalho. Depende de wmctrl para fazer a maior parte do trabalho. Para instalar wmctrl , faça sudo apt-get install wmctrl .

#!/bin/bash
# Author: Serg Kolo
# Date: Aug 22 , 2015
# Description: script that spawns 6 windows and positions
# them on individual workspaces (aka viewports) for Unity
# Written for: https://askubuntu.com/q/664309/295286
#set -x

# get number of vertical and horisontal viewports
HEIGHT=$(gsettings get org.compiz.core:/org/compiz/profiles/unity/plugins/core/ hsize)
WIDTH=$(gsettings get org.compiz.core:/org/compiz/profiles/unity/plugins/core/ vsize)
# Get size of the desktop from wmctrl -d
# ARRAY[0] is width and ARRAY[1] is height
ARRAY=($( wmctrl -d | awk -v div1=$HEIGHT -v div2=$WIDTH '{gsub(/x/," "); print $4/div1" "$5/div2}' ))
# set number of windows
COUNT=6
# while loop that does all the work
while [ $COUNT -ne 0 ]; do
# reset x and y position on each iteration
XPOS=100
YPOS=100
    # spawn terminal window with appropriate number
    # and send to viewport according to number
    gnome-terminal -e 'sh -c "vi;bash"' -t VP$COUNT &
    sleep 0.250 # delay to make sure window spawns
    # determine if it's a window 3 or 6
    if [ $( expr $COUNT % 3 ) -eq 0 ];then 
        XPOS=$( expr $XPOS + ${ARRAY[0]} + ${ARRAY[0]} )
    fi
    # determine if it's window 4 - 6
    if [ $COUNT -gt 3 ];then
        YPOS=$( expr $YPOS + ${ARRAY[1]} )
    fi
    # determine if it's window 2 or 5
    if [ $( expr $COUNT % 3 ) -eq 2 ];then 
        XPOS=$(  expr $XPOS + ${ARRAY[0]} )
    fi
    sleep 0.250
    # bring that window to focus and move it
    wmctrl -R VP$COUNT
    wmctrl -r VP$COUNT -e 0,$XPOS,$YPOS,250,250
    # decrement counter
    COUNT=$( expr $COUNT - 1 )
done

Referências e material adicional:

Script (ou software) para abrir uma janela de aplicativo em uma viewport e posição específicas

Criando e executando um script

Como faço para iniciar aplicativos automaticamente no login

Como faço para ligar arquivos .sh à combinação de teclado

    
por Sergiy Kolodyazhnyy 22.08.2015 / 08:40