Portál AbcLinuxu, 16. dubna 2024 11:10


Dotaz: Schránka v aplikaci využívající pouze primary selection

10.5.2010 15:09 dustin | skóre: 63 | blog: dustin
Schránka v aplikaci využívající pouze primary selection
Přečteno: 183×
Odpovědět | Admin
Zdravím,

mějme SW napsaný v kylixu, jehož toolkit podporuje pouze primary selection (tj. výběr myší), a to i přes Ctrl+C/V. Práce s jeho schránkou je pro běžného uživatele boj, protože samozřejmě nelze použít standardní postup "vyberu v jiné aplikaci (prohlížeči), Ctrl+C, označím v softu starý text a Ctrl+V nahradím za nový". Jak zajistit, aby to označení starého textu myší nepřepsalo primary selection?

Kdybych uměl v Xkách odchytnout Ctrl+C/V, zkopírovat obsah primary selection do clipboardu a naopak a poslat tuto klávesovou zkratku zase dál do Xek, tak by se mi automaticky přepisovala PS obsahem z clipboardu před vložením a vše by bylo OK. Takže by se vlastně obě schránky synchronizovaly při použití Ctrl+C/V a clipboard by byl "master"

Nemá prosím někdo nápad, jak by to šlo udělat, případně nějaké praktické zkušenosti s vyřešením tohoto problému? Je mi jasné, že správné řešení by bylo Kylix vyhodit, ale tento luxus bohužel nemám. Předem díky za rady.
Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

10.5.2010 15:10 dustin | skóre: 63 | blog: dustin
Rozbalit Rozbalit vše Re: Schránka v aplikaci využívající pouze primary selection
Odpovědět | | Sbalit | Link | Blokovat | Admin
Samozřejmě to kopírování mezi schránkami je triviální, jde mi tedy vlastně o odchycení Ctrl+C/V, provedení akce a opětovné poslání kláves dál.
10.5.2010 16:04 dustin | skóre: 63 | blog: dustin
Rozbalit Rozbalit vše Re: Schránka v aplikaci využívající pouze primary selection
Teoreticky by to šlo udělat klasickým nastavením klávesové zkratky v DE a spouštěním skriptu, na jehož konci by se volal xdotool, jenomže to samozřejmě vyrobí nekonečnou smyčku :) Chtělo by to nějaký tool, který klávesu pošle do nižších vrstev, aby to znovu neodchytnul DE.
10.5.2010 21:55 dustin | skóre: 63 | blog: dustin
Rozbalit Rozbalit vše Re: Schránka v aplikaci využívající pouze primary selection
Odpovědět | | Sbalit | Link | Blokovat | Admin
Budu tedy pokračovat v monologu :)

Spíchnul jsem syrové řešení, které ale zdá se funguje. V "klávesových zkratkách" gnome odchytávám Ctrl+C/V a spouštím následující skript s parametry Ctrl+v/Ctrl+c:
#! /bin/bash

KEY=$1

XDOTOOL=/usr/local/bin/xdotool
# id of the currently active window, the original recipient of Ctrl+C/V
WINID=$($XDOTOOL getactivewindow)
# works for a specific application only (WM_CLASS substring)
WORKS_FOR="my_application"

# checking if the recipient window is the correct one
if xprop -id $WINID  WM_CLASS | grep -q $WORKS_FOR ; then 
	if [ "$KEY" == "Ctrl+c" ]; then
		# copying from primary to clipboard
		xsel -p -o | xsel -b -i
	elif [ "$KEY" == "Ctrl+v" ]; then
		# copying from clipboard to primary 
		xsel -b -o | xsel -p -i
	fi
fi

# forwarding the Ctrl+c/v keys to the active window
$XDOTOOL key --window $WINID $KEY
Skriptík vyžaduje aktuálnější verzi xdotool, než je např. v Ubuntu 10.4 (musí již umět parametr --window).

Je to kupa ošklivých hacků, prošíření zkratky má znatelné zpoždění, ale snad to bude stačit.
11.5.2010 09:40 dustin | skóre: 63 | blog: dustin
Rozbalit Rozbalit vše Re: Schránka v aplikaci využívající pouze primary selection
Je to sice lepenice, ale na druhou stranu umožňuje změnu kódové sady při kopírování z primary do clipboardu. To je potřeba, neboť legacy aplikace běží pod latin2, zatímco systém je samozřejmě v UTF-8. Takže stačí jednoduché
# copying from primary to clipboard
xsel -p -o | iconv -f LATIN2 -t UTF-8 | xsel -b -i
Nazpátek to překvapivě není potřeba. Proč netuším, neřeším :)

Na rychlém PC nemá takto komplikované Ctrl+C/V skoro žádné zpoždění. Mám radost, další problém vyřešen :)
12.5.2010 10:49 dustin | skóre: 63 | blog: dustin
Rozbalit Rozbalit vše Re: Schránka v aplikaci využívající pouze primary selection
Tak bohužel, radost se nakonec nekoná. Firefox a thunderbird mají okno složené z více oken a xdotool getactivewindow detekuje jiné, než do kterého by se mělo Ctrl+C/V posílat. Takže v těchto aplikacích přestane tato klávesová zkratka fungovat, což je dost podstatný problem.
11.5.2010 06:24 pozortucnak | skóre: 21 | blog: vecny_windowsar
Rozbalit Rozbalit vše Re: Schránka v aplikaci využívající pouze primary selection
Odpovědět | | Sbalit | Link | Blokovat | Admin
Taková rejpavá poznámka...

Nebylo by jednodušší tu aplikaci přepsat do Lazarus?

Přeci jenom kylix je už nějakou dobu mrtví a to jeho gui je celkem ošklivé...
Jsem mimořádně obtížný případ
11.5.2010 07:20 dustin | skóre: 63 | blog: dustin
Rozbalit Rozbalit vše Re: Schránka v aplikaci využívající pouze primary selection
To je dobrá poznámka. Tajně doufám, že na tom dodavatel softu pracuje :)

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.