QL.túra

Kulturális smörgåsbord Esterházytól Wass Albertig, a gumicsizmától az iPad-ig, a Teletabiktól Sexpírig, a makrofágtól a mikrokontrollerig, miazmás...

Címkék

2000 (20) 2001 (6) 2002 (16) 2003 (164) 2004 (61) 2005 (40) 2006 (31) 2007 (28) 2008 (33) 2009 (175) 2010 (188) 2011 (201) 2012 (86) 2013 (40) 2014 (36) 2015 (26) 2016 (10) adáshiba (91) android (1) animáció (93) cygwin (3) film (410) gezarol (13) hájtek (159) hangoskönyv (32) ipad (17) klip (12) könyv (191) linux (29) színház (169) vers (17) windows (37) zene (111) Címkefelhő

+jegyzések

Most ...

... múlok .osan

bmi_tiny.png


... hallgatom
Szabó Magda: Régimódi történet
https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcSqTmZEqlCRFgojyt52Q2n_qiMTyVlt-zJu-DpbNKVY6OQbBh4u


... olvasom
Alexander Steele (szerk.): Kezdő írók kézikönyve


... (Kik ezek? Kik ezek az embek? Kik ezek?)
profile for TrueY on Stack Exchange, a network of free, community-driven Q&A sites
free counters

[Hájtek] Urxvt bekonfigurálása (cygwin)

2014.09.23. 11:00 | TrueY | Szólj hozzá!

Címkék: windows 2014 hájtek cygwin

https://skinwalker.files.wordpress.com/2011/09/urxvt-technicolori.pngA legújabb gépemre feltettem a legújabb 64 bites cygwin-t. Megpróbáltam kedvenc terminál emulátor csomagomat is feltenni, amely az "rxvt" névre hallgat. De legnagyobb megrökönyödésemre a 64 bites csomagok között nem találtam. Eljött hát az ideje, hogy a fejlettebb urxvt (rxvt-unicode) csomagot tegyem fel. Ez sok olyan dolgot is tud, amit már régóta szerettem volna. Ez már pl. tud tab-okat használni. Plusz perl-ben programozható, ami szintén egy jó pont, mert saját igényünkre szabhatjuk, ha van egy kis programozói vénánk. Eddig azért halogattam, mert X szerver kell hozzá indítani és ezt ki tudja mely okból, szerettem volna elkerülni.

Nézzük, hogy milyen extra cygwin csomagokat kell feltenni. Ezek az rxvt-unicode, perl (mert nemcsak, hogy lehet hozzá szkripteket írni, de kell is a működéséhez), Xorg-server, no és a vim, gvim. A cygwin gyökér könyvtárában létrehoztam egy kis cmd szkriptet.

c:\cygwin\Xwin.bat

SETLOCAL
REM Ha a home könyvtár máshová van linkelve, mint
REM c:\cygwin\bin\..\home\<username> akkor meg kell adnunk, hogy hol
REM található a .XWinrc
REM SET HOME=X:\myhome\%USERNAME%
c:\cygwin\bin\run.exe XWin.exe –multiwindow
ENDLOCAL

A -multiwindow argumentumot azért szeretem, mert így nem fedi el a teljes képernyőt egy X-es tök fekete háttér. Lényegében teljesen olyan, mintha sima Windows-os ablakok nyílnának. A szkript symlink-jét pedig hozzáadtam a Start menühöz: Start | All programs | StartUp. Így bejelentkezéskor el fog indulni az X szerver. De indulás előtt még egy kicsit személyre szabtam az X konfig file-ját (~/.Xwinrc). Én ezt a tartalmat használom (Mondjuk a FAQ-t és a User's Guide-ot ki lehetne hagyni, de így mennyivel szofisztikáltabb):

MENU root {
  Urxvt EXEC "LANG=hu_HU.UTF-8 /bin/urxvt -pe tabbed -bg '#000020' -fg '#a0a000' -sl 50000 -geometry 80x43"
  Gvim EXEC "LANG=hu_HU.UTF-8 /bin/gvim"
  Emacs EXEC "/bin/emacs"
  Notepad   EXEC notepad

  SEPARATOR
  FAQ            EXEC "/bin/cygstart http://x.cygwin.com/docs/faq/cygwin-x-faq.html"
  "User's Guide" EXEC "/bin/cygstart http://x.cygwin.com/docs/ug/cygwin-x-ug.html"
  SEPARATOR
  "View logfile" EXEC "/bin/gview +\$ $XWINLOGFILE"
  "View .XWinrc" EXEC "/bin/gvim ~/.XWinrc"
  "Reload .XWinrc"     RELOAD
  SEPARATOR
}

ROOTMENU root

SILENTEXIT

Ezzel a beállítással a system tray-ben megjelenő X ikonra jobb klikkelve egyből megnézhető, hogy ha valami nem akar indulni, akkor mit ír log file-ba: Valamint az .XWinrc-t is a saját menüjéből lehet szerkeszteni és rögtön újra is lehet olvastatni vele.  A SILENTEXIT azért kell, hogy ne kelljen az X leállításakor mindig még egy gombot nyomni. Ezt beállítva csak akkor kérdez, ha legalább egy X-es program még fut. De még tovább is lehet csinosítani a konfig file-t. Pl. minden X-es alkalmazás system menüjébe felvehetünk extra menüpontokat, így bármely X által indított ablak bal felső sarkába kattintva elindíthatjuk kedvenc programjainkat. Persze ugyanezt applikáció specifikusan is be lehet állítani és még sok egyéb trükköt is el lehet követni. Bővebb info a man xwin oldalon...

MENU aot {
  SEPARATOR
  Urxvt EXEC "LANG=hu_HU.UTF-8 /bin/urxvt -pe tabbed -bg '#000030' -fg '#a0a000' -sl 5000 -geometry 80x43 -e /bin/bash -l -i"
  "Always on Top" ALWAYSONTOP
}

DEFAULTSYSMENU aot ATEND

Ezzel rendbe tettük az X beállításokat. Most pediglen koncentráljunk az urxvt beállításokra. Ezeket az ~/.Xdefaults-ban tudjuk bekrampácsolni. Nekem a ~/.Xresources file szerkesztése semmi változást sem okozott, pedig szerinte annak is kellene működnie.

# http://www.askapache.com/linux/rxvt-xresources.html
# or use urxvt --help

# set TERM variable to this string
URxvt.termName: rxvt

#Igazából nem login shell, csak interactive shell
# Tehát .bash_profile nem fut, de a .bashrc fut
URxvt.loginShell: true
# Az ablakot felgörgetjük és gépelünk, akkor a promptra ugrik
Urxvt.scrollTtyKeypress:  true
# Az ablakot felgörgetjük és frissül a kimenet,
# akkor nem a ugrik az új tartalomra
Urxvt.scrollTtyOutput:  false

# Randa szürke háttér, de úgyis át fogom definiálni
URxvt.background: #808080

# Kiegészítések
URxvt.perl-ext-common: tabbed,default,matcher
URxvt.perl-lib: /usr/lib/urxvt/perl/
# Nekem a tabbedex bugosnak tűnik
#URxvt.perl-ext-common: tabbedex
#URxvt.tabbed.new-button: true
#URxvt.tabbed.autohide: true

# Ha URL jelenik meg a képernyőn, akkor klikkelhető
URxvt.url-launcher: /usr/bin/cygstart
URxvt.matcher.button: 1

# More extensions:
# https://wiki.archlinux.org/index.php/rxvt-unicode

Ez engedélyezi, hogy egy terminál emulátorban több ablakot is nyithassunk. Ehhez kell a "tabbed" csomag. A "matcher" pedig azt teszi lehetővé, hogy ha kiírunk egy URL-t , akkor ez a képernyőn aláhúzva jelenik meg és ráklikkelve el is indítja a default browser-rel. Ha nem állítjuk be a "termName" tulajdonságot, akkor az elindított bash-ben a TERM valami olyasmire lesz beállítva, hogy "urxvt-unicode-256color", amit nem sok minden fog felismerni. Az "rxvt" jobb választásnak tűnik. Új fület a shift+le nyomásával nyithatunk. Navigálni pedig a shift bal/jobb gombbal lehet. A füleket mozgatni a ctrl+bal/jobb gombokkal lehet.

Imádom, hogy az Alt + S-sel bele lehet keresni a képernyőn megjelenő szövegbe. Az Alt+S-re megjelenik alul egy prompt, ahová egy regexp-et süthetünk el, amire a fel és le nyilakkal kereshetünk továbbá. Nagyon sokat segít!

Meg kellene hívni az urxvt-t, de szeretnénk ha magyar karaktereket is mutatná. Viszont azt nem, hogy magyarul jelenjenek meg a szövegek. A halálom, amikor egy program help-je magyarul jelenik meg, vagy amikor az "ls -l" úgy kezdi, hogy "összesen". Bocs, de a szokás nagy úr!

Jöjjön hát az urxvt-t elindító batch file-ocska. Ugyanezt fogom használni a Total Commander-be való integrálásra is, ezért első blikkre egy kicsit túlspilázottnak fog tűnni. De előtte még két probléma, amibe belefutottam. Az első az, hogy ha az rxvt-t batch-ből "start" paranccsal indítottam, akkor elindult egy cmd, ami elindította az rxvt-t, majd a cmd szépen bezárult. No ez nem működött urxvt-vel. Egy csomó felesleges cmd-vel lett tele a taskbar-om. Hosszas keresgélés után véletlenül találtam rá a cygwin-ben levő run.exe-re, ami pont erre a problémára ad megoldást (bár nem tökéletes, mert a fókuszt néha nem teszi az éppen elindított konzolra). A másik probléma az volt, hogy az urxvt-t elindító batch file-nak szerettem volna Total Commander-ből átadni a forrás könyvtárat, forrás file-t, cél könyvtárat és cél file-t. Erre szolgálnak a Total Commander %P, %N, %T, %M speciális paraméterei. Sajnos a %N teljesen eltérően működik a többitől! Ha a forrás file nevében szóköz van, akkor magától macskakörmök közé zárja a nevet, míg a többi nem. De ha üres nevet ad át (pl. a [..] van kijelölve a forrás ablakban), akkor ezt nem teszi, azaz valójában semmit nem fog átadni. A többieknél ez megoldható, hogy mi tesszük macskakörmök közé és akkor minden körülmények között jól fog működni. De ez %N-re nem jó, mert ha szóköz van a forrás file nevében, akkor a "%N"-ből ""akarmi barmi.txt"" lesz. Az egymás mellett álló két macskaköröm pedig egy üres szöveget fog adni és az indított batch file két argumentumot fog kapni. A megoldás, hogy dupla macska köröm közé kell zárni a %N-et, de akkor meg a batch file-ban kell trükközni egy picit, hogy a felesleges macskaköröm duplikátumokat leszedjük. Ezt jeleztem a TC fejlesztőknek (>itt<), de úgy látom, hogy ez csak nekem fáj. Ezért marad a maszatolás.

A végeredmény a c:\cygwin\Urxvt.bat file lett:

set TC_SRCDIR=%~1
set TC_SRCFILE=%~2
set TC_DSTDIR=%~3
set TC_DSTFILE=%~4

set LANG=hu_HU.UTF-8
REM Hungarian special letters cannot be used!
REM set LANG=en_EN.UTF-8

REM Total Commander's %N behaves strange, so call as ""%N""
REM But then extra " has to be removed.
REM Works properly as Dos file cannot contain "
REM If %2 was not defined then TC_SRCFILE would be set to "=
if NOT "%TC_SRCFILE%" == "" set TC_SRCFILE=%TC_SRCFILE:"=%

C:\cygwin\bin\run.exe urxvt.exe -pe tabbed -bg #000040 -fg #a0a000 -sl 50000 -geometry 83x4

Ha meghívjuk, akkor elindítja az urxvt-t és a cmd is eltűnik a színről! Sajnos a run nem mindig adja át a fókuszt az elindított programnak. Érdemes az első indását után a taskbar-ban az urxvt ikonjára jobbklikkelni és pin-elni. Így windows gomb+szám lenyomásával klattyolgatás nélkül indíthatjuk az urxvt-t. További urxvt-ket pedig a windows+shift+szám lenyomásával. Az urxvt terminálok között a windows+ctrl+szám kombinációval váltogathatunk. Nagyon kényelmes Windows-os megoldás!

Ha előfordulhat, hogy leállítjuk az XWin-t, vagy nem szeretnénk feleslegesen elindítani, akkor a fenti batch programot kiegészíthetjük az alábbi pár sorral, amit az utolsó sor elé kell illesztenünk. Ez leellenőrzi, hogy fut-e már az XWin.exe és ha nem, akkor elindítja (lehet, hogy bizonyos esetekben a timeout 2 mp-es értékét célszerű növelni, de az is lehet, hogy elhagyható).

SETLOCAL EnableExtensions
set PTH=%~dp0
set EXE=XWin.exe
FOR /F %%x IN ('tasklist /NH /FI "IMAGENAME eq %EXE%"') DO IF %%x == %EXE% goto FOUND
call %PTH%XWin.bat
timeout /T 2
:FOUND

Egy szépséghibája van. Ha minden urxvt-t lelőttünk, akkor nem fog magától kilépni az XWin. De hát ezzel most együtt kell tudnunk élni!

Ha Total Commander-ben egy új ikon gombot hozunk létre és az alábbiakat állítjuk be, akkor pedig a bash fel fogja tudni használni a TC_SRCDIR-t, hogy belépjen a TC-ben levő könyvtárba. Nagyon hasznos lehetőség! A TC gomb beállítása egyszerű:

Command: C:\cygwin\Urxvt.bat
Paramters: "%P" ""%N"" "%T" "%M"
(dupla macskaköröm %N körül!!)
Icon file: C:\cygwin\Cygwin-Terminal.ico

Már csak a ~/.bashrc-t kell meghákolni. Hogy elkerüljük a LANG által beállított magyar üzeneteket használjuk a

export LC_MESSAGES=en_US.UTF-8

 Hogy a Total Commander-es trükk is működjön még ez kell bele:

if [ -n "$TC_DSTDIR" ]; then
    if [[ "$TC_DSTDIR" == \\* ]]; then
        echo "Destination is a network share. Please map it before use!"
    elif [[ "$TC_DSTDIR" == [0-9]:* ]]; then
        echo "Destination is on an ftp server."
    else
        TC_DSTDIR=$(cygpath -u "${TC_DSTDIR}")
    fi
fi
if [ -n "$TC_SRCDIR" ]; then
    if [[ "$TC_SRCDIR" == \\* ]]; then
        echo "Source is a network share. Please map it before use!"
    elif [[ "$TC_SRCDIR" == [0-9]:* ]]; then
        echo "Source is on an ftp server. Can not change directory!"
    else
        TC_SRCDIR=$(cygpath -u "${TC_SRCDIR}")
        cd "$TC_SRCDIR"
    fi
fi

Ez a DOS-os path-okból Unix-osat csinál és ha a TC_SRCDIR definiálva van, akkor oda lép. Még azt is ellenőrzi, hogy a könyvtárak nem ftp, vagy smb link formátumúak-e, mert oda nem tudunk ilyen egyszerűen belépni. Persze, ha nem használunk ilyeneket, akkor kb. 3 sorra redukálható a fenti részlet...

Termináljunk minden nap!

A bejegyzés trackback címe:

https://qltura.blog.hu/api/trackback/id/tr1006569365

Kommentek:

A hozzászólások a vonatkozó jogszabályok  értelmében felhasználói tartalomnak minősülnek, értük a szolgáltatás technikai  üzemeltetője semmilyen felelősséget nem vállal, azokat nem ellenőrzi. Kifogás esetén forduljon a blog szerkesztőjéhez. Részletek a  Felhasználási feltételekben és az adatvédelmi tájékoztatóban.

Nincsenek hozzászólások.
süti beállítások módosítása