abclinuxu.cz AbcLinuxu.cz itbiz.cz ITBiz.cz HDmag.cz HDmag.cz abcprace.cz AbcPráce.cz
AbcLinuxu hledá autory!
Inzerujte na AbcPráce.cz od 950 Kč
Rozšířené hledání
×
    včera 22:33 | Nová verze

    Byl vydán Debian 13.5, tj. pátá opravná verze Debianu 13 s kódovým názvem Trixie a Debian 12.14, tj. čtrnáctá opravná verze Debianu 12 s kódovým názvem Bookworm. Řešeny jsou především bezpečnostní problémy, ale také několik vážných chyb. Instalační média Debianu 13 a Debianu 12 lze samozřejmě nadále k instalaci používat. Po instalaci stačí systém aktualizovat.

    Ladislav Hagara | Komentářů: 0
    15.5. 12:55 | Nová verze

    CiviCRM (Wikipedie) bylo vydáno v nové verzi 6.14.0. Podrobnosti o nových funkcích a opravách najdete na release stránce. CiviCRM je robustní open-source CRM systém navržený speciálně pro neziskové organizace, spolky a občanské iniciativy. Projekt je napsán v jazyce PHP a licencován pod GNU Affero General Public License (AGPLv3). Český překlad má nyní 45 % přeložených řetězců a přibližuje se milníku 50 %. Potřebujeme vaši pomoc, abychom se dostali dál. Pokud máte chuť přispět překladem nebo korekturou, přidejte se na platformu Transifex.

    jardaIT | Komentářů: 2
    15.5. 12:22 | Bezpečnostní upozornění

    Další lokální zranitelností Linuxu je ssh-keysign-pwn. Uživatel si může přečíst obsah souborů, ke kterým má právo ke čtení pouze root, například soubory s SSH klíči nebo /etc/shadow. V upstreamu již opraveno [oss-security mailing list].

    Ladislav Hagara | Komentářů: 1
    14.5. 17:22 | Komunita

    Singularity (YouTube) je nejnovější otevřený film od Blender Studia. Jedná se o jejich první 4K HDR film.

    Ladislav Hagara | Komentářů: 5
    14.5. 16:55 | Zajímavý software

    Vyšla hra Život Není Krásný: Poslední Exekuce (Steam, ProtonDB). Kreslená point & click adventura ze staré školy plná černého humoru a nekorektního násilí. Vžijte se do role zpustlého exekutora Vladimíra Brehowského a projděte s ním jeho poslední pracovní den. Hra volně navazuje na sérii Život Není Krásný.

    Ladislav Hagara | Komentářů: 27
    14.5. 14:00 | Zajímavý projekt

    Společnost Red Hat představila Fedora Hummingbird, tj. linuxovou distribuci s nativním kontejnerovým designem určenou pro vývojáře využívající AI agenty.

    Pinhead | Komentářů: 6
    14.5. 02:22 | Zajímavý software

    Hru The Legend of Zelda: Twilight Princess od společnosti Nintendo si lze nově díky projektu Dusklight (původně Dusk) a reverznímu inženýrství zahrát i na počítačích a mobilních zařízeních. Vyžadována je kopie původní hry (textury, modely, hudba, zvukové efekty, …). Ukázka na YouTube. Projekt byl zahájen v srpnu 2020.

    Ladislav Hagara | Komentářů: 0
    14.5. 01:11 | Nová verze

    Byla vydána nová major verze 29.0 programovacího jazyka Erlang (Wikipedie) a související platformy OTP (Open Telecom Platform, Wikipedie). Detailní přehled novinek na GitHubu.

    Ladislav Hagara | Komentářů: 0
    13.5. 21:22 | Bezpečnostní upozornění

    Po zranitelnostech Copy Fail a Dirty Frag přichází zranitelnost Fragnesia. Další lokální eskalace práv na Linuxu. Zatím v upstreamu neopravena. Přiřazeno ji bylo CVE-2026-46300.

    Ladislav Hagara | Komentářů: 1
    13.5. 14:00 | Komunita

    Sovereign Tech Agency (Wikipedie) prostřednictvím svého fondu Sovereign Tech Fund podpoří KDE částkou 1 285 200 eur.

    Ladislav Hagara | Komentářů: 13
    Které desktopové prostředí na Linuxu používáte?
     (13%)
     (8%)
     (2%)
     (14%)
     (31%)
     (4%)
     (6%)
     (3%)
     (16%)
     (26%)
    Celkem 1643 hlasů
     Komentářů: 30, poslední 3.4. 20:20
    Rozcestník

    Dotaz: Krokování v menu

    26.11.2022 21:23 Jan
    Krokování v menu
    Přečteno: 1183×
    Ahoj, chci vytvořit menu s takovým posunem, poradil by někdo jak napsat ten cyklus? Stačí k tomu jen tyto proměnné nebo je potřeba ještě nějaké další? Děkuji za pomoc.
    mám proměnné
    pole=array['0položka','1položka','2položka','3položka','4položka','5položka','6položka','7položka','8položka','9položka'] 
    $aktualni_ID=0
    $max_polozek_na_stranku=3
    $celkem_polozek=10
    
    for(i=$aktualni_ID;i=$max_polozek_na_stranku; i++ )
      if($aktualni_ID==i) 
        echo pole[i].'<<<'
      else
        echo pole[i]
    
    
    
    
    Kroky směrem dolů
    
    0položka<<<
    1položka
    2položka
    
    0položka
    1položka<<<
    2položka
    
    0položka
    1položka
    2položka<<<
    
    1položka
    2položka
    3položka<<<
    
    2položka
    3položka
    4položka<<<
    
    3položka
    4položka
    5položka<<<
    
    4položka
    5položka
    6položka<<<
    
    5položka
    6položka
    7položka<<<
    
    6položka
    7položka
    8položka<<<
    
    7položka
    8položka
    9položka<<<
    
    Kroky zpět (směrem nahoru)
    
    7položka
    8položka
    9položka<<<
    
    7položka
    8položka<<<
    9položka
    
    7položka<<<
    8položka
    9položka
    
    6položka<<<
    7položka
    8položka
    
    5položka<<<
    6položka
    7položka
    
    4položka<<<
    5položka
    6položka
    
    3položka<<<
    4položka
    5položka
    
    2položka<<<
    3položka
    4položka
    
    1položka<<<
    2položka
    3položka
    
    0položka<<<
    1položka
    2položka
    
    

    Odpovědi

    27.11.2022 09:07 X
    Rozbalit Rozbalit vše Re: Krokování v menu
    Jazyk?
    27.11.2022 12:18 Jan
    Rozbalit Rozbalit vše Re: Krokování v menu
    Ukázka je v PHP ale bude to v Pythonu, ten je pro terminál asi lepší.
    27.11.2022 13:34 X
    Rozbalit Rozbalit vše Re: Krokování v menu
    Pokud je to ciste pro terminal tak by mohl stacit whiptail + bash skript.
    27.11.2022 14:12 Jan
    Rozbalit Rozbalit vše Re: Krokování v menu
    Díky za tip, ale znám, i dialog ale oba mají omezení. Dělám vlastní menu.
    27.11.2022 15:17 z_sk | skóre: 34 | blog: analyzy
    Rozbalit Rozbalit vše Re: Krokování v menu
    Zbaviť sa cyklu a isť stavovým automatom, t. j.:
    <?php
    // (C) 2022, Dušan Kreheľ
    // Licence: MIT
    
    class MenuBox
    {
    	private $items=array();
    	private $items_count=array();
    	private $max_items=10;
    	private $position=0;  /* index */
    	private $box_first=0; /* index */
    	
    	function __construct($items, $draw_max_items)
    	{
    		$this->items=$items;
    		$this->max_items=$draw_max_items;
    		
    		$this->items_count=count($items);
    	}
    	
    	function down()
    	{
    		if($this->position == ($this->items_count-1))
    			return;
    		
    		$this->position++;
    		
    		if(abs($this->position-$this->box_first) == $this->max_items)
    			$this->box_first++;
    	}
    	
    	function up()
    	{
    		if($this->position == 0)
    			return;
    		
    		if($this->position == $this->box_first)
    			$this->box_first--;
    		
    		$this->position--;
    	}
    	
    	function draw()
    	{
    		$count_steps=$this->max_items + $this->box_first;
    		for($i=$this->box_first;$i<$count_steps;$i++)
    			if($i == $this->position)
    				echo " \033[35m".$this->items[$i]."\033[0m\n";
    			else
    				echo " ".$this->items[$i]."\n";
    		echo "\n";
    	}
    }
    
    $items=array("A","B","C","D","E","F","G");
    
    $box= new MenuBox($items, 4);
    $box->draw();
    
    $box->down();
    $box->draw();
    
    $box->down();
    $box->draw();
    
    $box->down();
    $box->draw();
    
    $box->down();
    $box->draw();
    
    $box->down();
    $box->draw();
    
    $box->down();
    $box->draw();
    
    echo "hore dalej\n";
    
    $box->up();
    $box->draw();
    
    $box->up();
    $box->draw();
    
    $box->up();
    $box->draw();
    
    $box->up();
    $box->draw();
    
    $box->up();
    $box->draw();
    
    $box->up();
    $box->draw();
    
    debian.plus@protonmail.com
    27.11.2022 18:51 Jan
    Rozbalit Rozbalit vše Re: Krokování v menu
    Děkuji, za kód, ale opravdu potřebuji jenom nějaký ten algoritmus pro nastavení proměnných OD DO pro samotný cyklus.
    27.11.2022 20:13 z_sk | skóre: 34 | blog: analyzy
    Rozbalit Rozbalit vše Re: Krokování v menu
    Máš tam výpočet starých/nových premien, ktoré potom len v cykle porovnávaš a nejak vypisuješ.
    debian.plus@protonmail.com
    27.11.2022 20:50 Jan
    Rozbalit Rozbalit vše Re: Krokování v menu
    A když znáš jenom hodnotu proměnné $position, jak dopočítáš hodnotu proměnné $box_first? Díky
    27.11.2022 21:11 z_sk | skóre: 34 | blog: analyzy
    Rozbalit Rozbalit vše Re: Krokování v menu
    Tato hodnota je stavová. To znamená, že ju musíš pred zmenou poznať. U mňa je inicializovaná na 0 a potom sa prispôsobuje podľa posunov. Ta premenná je vlastne index, kde začína box zobrazovať tie riadky na výstupe. A v prvých posunoch dole (na začiatku vykonávania menu) sa nemení.
    debian.plus@protonmail.com
    27.11.2022 21:21 Jan
    Rozbalit Rozbalit vše Re: Krokování v menu
    Nevím zda jsem se zeptal dobře. Chci po spuštění toho mít označenou položku třeba $position=6. V mém kódu to nejde, ve tvém to taky nejde?
    27.11.2022 22:13 z_sk | skóre: 34 | blog: analyzy
    Rozbalit Rozbalit vše Re: Krokování v menu
    Nešlo, ale stačilo len dopísať procedúru set_position() a už to ide:
    <?php
    // (C) 2022, Dušan Kreheľ
    // Licence: MIT
    
    class MenuBox
    {
    	private $items=array();
    	private $items_count=-1;
    	private $max_items=10;
    	private $position=0;
    	private $box_first=0;
    	
    	function __construct($items, $draw_max_items)
    	{
    		$this->items=$items;
    		$this->max_items=$draw_max_items;
    		
    		$this->items_count=count($items);
    	}
    	
    	function down()
    	{
    		if($this->position == ($this->items_count-1))
    			return;
    		
    		$this->position++;
    		
    		if(abs($this->position-$this->box_first) == $this->max_items)
    			$this->box_first++;
    	}
    	
    	function up()
    	{
    		if($this->position == 0)
    			return;
    		
    		if($this->position == $this->box_first)
    			$this->box_first--;
    		
    		$this->position--;
    	}
    	
    	function draw()
    	{
    		$count_steps=$this->max_items + $this->box_first;
    		for($i=$this->box_first;$i<$count_steps;$i++)
    			if($i == $this->position)
    				echo " \033[35m".$this->items[$i]."\033[0m\n";
    			else
    				echo " ".$this->items[$i]."\n";
    		echo "\n";
    	}
    	
    	function set_position($index_position, $index_box_first_line)
    	{
    		$this->position=$index_position;
    		$this->box_first=$index_box_first_line;
    	}
    }
    
    $items=array("A","B","C","D","E","F","G");
    
    $box= new MenuBox($items, 4);
    $box->set_position(2, 1);
    $box->draw();
    
    $box->down();
    $box->draw();
    
    
    debian.plus@protonmail.com
    27.11.2022 22:31 Jan
    Rozbalit Rozbalit vše Re: Krokování v menu
    Ano, ale při volání metody
    $box->set_position(2, 1);
    tak tu hodnotu 1 musíš vypočítat ručně, ne? Myslel jsem spíš volat jen s jednou hodnotou a tu druhou by si vypočítal sám.
    $box->set_position(2);
    Omlouvám se, ale nevím jestli se vyjadřuji k pochopení.
    28.11.2022 09:59 Ja
    Rozbalit Rozbalit vše Re: Krokování v menu
    Obávám se, že vždy potřebuješ dvě hodnoty - index vybrané položky a index první zobrazované položky. Pro první zobrazení může stačit index vybrané položky a index první zobrazované položky dopočítat podle ní, tak aby to vypadalo hezky, ale jakmile se tím začne uživatel pohybovat nahoru a dolů, tak musíš sledovat obě hodnoty. Výchozí první zobrazovanou položku můžeš vypočítávat třeba takhle:
    first = count - lines
    if sel < first:
        first = sel - (lines // 2)
    if first < 0:
        first = 0
    
    kde first je index první položky menu, count je počet položek menu, lines je počet řádek menu
    #!/usr/bin/env python3
    
    def draw(sel, lines):
        menu = ('a', 'b', 'c', 'd', 'e', 'f')
        count = len(menu)
        first = count - lines
        if sel < first:
            first = sel - (lines // 2)
        if first < 0:
            first = 0
        print('-------------')
        for line in range(lines):
            item = line + first
            print(menu[item], '<<<' if item == sel else '')
    
    for sel in range(7):
        draw(sel, 3)
    
    
    výstup je:
    $ python3 menu.py
    -------------
    a <<<
    b 
    c 
    -------------
    a 
    b <<<
    c 
    -------------
    b 
    c <<<
    d 
    -------------
    d <<<
    e 
    f 
    -------------
    d 
    e <<<
    f 
    -------------
    d 
    e 
    f <<<
    -------------
    d 
    e 
    f 
    
    29.11.2022 12:33 Jan
    Rozbalit Rozbalit vše Re: Krokování v menu
    Taky díky, vyřešeno jinak.
    28.11.2022 12:24 z_sk | skóre: 34 | blog: analyzy
    Rozbalit Rozbalit vše Re: Krokování v menu
    No, ak sa chce, dá sa. To si v zadaní nešpecifikoval. Dá sa nastaviť, že ak je položka v 1/2 zoznamu, tak automatický v tom boxe bude na vrchu (alebo v strede, ak máš nepárny počet položiek v boxe) ako prvá, ináč v boxe posledná. Ale to si vieš aj sam upraviť, nie? ;)
    debian.plus@protonmail.com
    29.11.2022 12:32 Jan
    Rozbalit Rozbalit vše Re: Krokování v menu
    Díky za informaci. Napsal jsem to celý úplně znova a do seznamu ukládám vždy obě hodnoty. Výsledkem je vždy naprosto stejný výpis, jako když se krokuje od pozice 0.

    Založit nové vláknoNahoru

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

    ISSN 1214-1267   www.czech-server.cz
    © 1999-2015 Nitemedia s. r. o. Všechna práva vyhrazena.