Múltiplas janelas GUI em um (multiplexador / wrapper de janelas de aplicações gráficas)

2

Eu estava vagando se existem alguns programas ou métodos, onde eu posso fazer algo semelhante como Multiplexador de terminais - Wikipedia, a enciclopédia livre - exceto onde cada região do aplicativo "multiplexador" é uma janela GUI de um aplicativo próprio.

Aqui está um exemplo imaginário - eu, basicamente, gostaria de escrever no terminal algo assim (pseudocódigo):

$ gui-multiplexer-application --width 600 --height 600 \
  --command "scite" --heightratio 60
  --command "gnome-terminal -e 'PS1=\"$\"'" --heightratio rest

... que, por sua vez, iniciaria algo assim (aquela imagem que eu montava manualmente no Gimp):

Eunãoprecisodenenhummétodoparaconectarespecificamenteessesaplicativos(seumcomandopuderseriniciadocomargumentos,entãoeupoderiausarisso)-oqueeugostariaéqueambasasjanelassejammovidasemsincroniaquandovocêarrastaomaster(barradetítulodajanela"gui-multiplexer-application"); e esperançosamente, que a linha separadora horizontal seja arrastável, de modo que se possa reajustar a altura que as janelas internas ocupam respectivamente (reajustando a largura através dos limites do mestre é óbvio).

Algo assim por aí? (Eu estou no Ubuntu 11.04 com o Gnome2; no entanto, imagino que esse tipo de aplicação funcionaria em um nível X11, portanto, sendo esperançosamente portátil entre diferentes DE / WM.)

EDIT: Isto é um pouco como um gerenciador de janelas lado a lado - no entanto, um gerenciador de janelas lado a lado apropriado substitui a área de trabalho inteira; Eu gostaria de um gerenciador de janelas lado a lado dentro de uma janela com uma barra de título (que pode aparecer em qualquer outro WM que eu possa estar usando). Na verdade, é possível usar scripts como awesome_test em Usando o Xephyr - incrível , mas eles iniciam uma nova sessão X, Portanto, há problemas de interação, como pegar entradas de teclado e não conseguir encontrar o estilo de ambiente de área de trabalho "regular". É por isso que estou procurando por uma funcionalidade semelhante, mas que funciona em uma única janela de aplicativo. ( Também possivelmente relacionado: colando stickies às janelas - Unix e Linux Stack Exchange )

(Backround: Eu gosto de escrever Latex no Scite; e enquanto o Scite tem uma janela de terminal, na minha versão não é interativa - então se latex acabar com um erro, eu não posso emitir Ctrl-C ou X ou nada ter o processo terminado, então eu tenho que usar um terminal adequado de qualquer forma.Agora, há geany que realmente tem um terminal adequado, mas eu não quero mudar editores de texto para esta aplicação (escrita Latex). Tenho certeza de que poderia haver outras situações em que essa "multiplexação da janela da GUI" seria útil.

    
por sdaau 19.02.2014 / 15:05

2 respostas

1

Bem, aqui está algo, mas dificilmente ideal:

Acabei de encontrar o link ; e como eu tinha os dois Xephyr e awesome-wm instalados, eu poderia colocar um script Python que inicia o seguinte com relativa facilidade:

Obviamente,meuestilodeambientededesktopusual(comonafotoOP)estáfaltando-evocênãopodedimensionarajanela(altereotamanhodajanela:larguraealtura,arrastando).Então,tambémnãoháumguidãointerativode"redimensionamento de painéis" para alterar as alturas relativas dos aplicativos. E o mais importante - copiar / colar texto entre aplicativos dentro e fora do Xephyr não funciona!

Além disso, o script é iniciado awesome-wm na esperança de que ele unisse meus aplicativos automaticamente - mas, por algum motivo, isso não acontece, por isso preciso dimensionar os aplicativos manualmente usando wmctrl . Mas as janelas internas não têm barras de título, o que eu acho que está fazendo awesome-wm ; então provavelmente será possível configurar com ladrilhos, eventualmente.

Aqui está o script - vamos chamá-lo de tilewm-app-tester.py :

from easyprocess import EasyProcess
from pyvirtualdisplay import Display
#~ from pyvirtualdisplay.smartdisplay import SmartDisplay # needs pyscreenshot
import logging
logging.basicConfig(level=logging.DEBUG)
import time

_W = 600
_H = 500
# height percents
hp1 = 0.6
hp2 = 1-hp1 # the rest


Display(visible=1, size=(_W , _H)).start()

# EasyProcess.start() # spawns process in background
# EasyProcess.check() # loops process in foreground


try:
  EasyProcess('awesome -c rc.lua').start() 
except Exception, detail:
  print  detail

time.sleep(2)

try:
  EasyProcess('bash -c "cd $HOME && scite"').start() 
except Exception, detail:
  print  detail

time.sleep(2)

try:
  # 0,x,y,w,h
  EasyProcess(['wmctrl', '-r', 'SciTE', '-e', '0,0,0,'+str(_W)+','+str(int(_H*hp1))]).start() 
except Exception, detail:
  print  detail

# gnome-terminal -e 'bash -c "bash --rcfile <(echo source $HOME/.bashrc ; echo PS1=\\"\$ \\") -i"'
# first 'bash' needed, otherwise cannot do process substitution as file

try:
  EasyProcess(['gnome-terminal', '-e', 'bash -c "bash --rcfile <(echo source $HOME/.bashrc ; echo PS1=\\"\$\ \\") -i"']).start() # --maximize is Gnome, nowork
except Exception, detail:
  print  detail

time.sleep(0.5)

try:
  # 0,x,y,w,h
  EasyProcess(['wmctrl', '-r', 'Terminal', '-e', '0,0,'+str(int(_H*hp1))+','+str(_W)+','+str(int(_H*hp2))]).start() 
except Exception, detail:
  print  detail
    
por 19.02.2014 / 17:07
1

Na verdade, este é o propósito dos chamados "Gerentes de Janelas em Ladrilho", ou seja, Awesome, como colocado no clássico "Gerentes de Janela Flutuante", ou seja, o Gnome2.

Então, sim, eu acho que para fazer o que você quer fazer você vai precisar atualizar do gnome para algo um pouco mais hardcore. Mas acredite, você não vai querer voltar depois de ter experimentado o que esses outros gerentes de janelas podem oferecer. Certifique-se de se familiarizar com as teclas de atalho ...

Gerentespopularesdejanelasladoaladoestãolistadosaqui:

link

    
por 16.01.2016 / 21:18