The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]




Версия для распечатки Пред. тема | След. тема
Новые ответы [ Отслеживать ]
Назначение 'горячих клавиш' для программ консоли , !*! Айнанимм, 10-Янв-20, 10:10  [смотреть все]
Здравствуйте!
Имеется Debian 9-й, без графики (консоль). Хотелось бы задать клавиши для запуска разных программ, причём не просто будучи в bash`е, а в любой консольной программе. Например перенести переключение консолей на Win+1,2 и т.п. задав для Win+1 "chvt 1", для Win+Ctrl+m "mc" и тому подобное.
  • Назначение 'горячих клавиш' для программ консоли , !*! bagas, 10:32 , 10-Янв-20 (1)
    > Здравствуйте!
    > Имеется Debian 9-й, без графики (консоль). Хотелось бы задать клавиши для запуска
    > разных программ, причём не просто будучи в bash`е, а в любой
    > консольной программе. Например перенести переключение консолей на Win+1,2 и т.п. задав
    > для Win+1 "chvt 1", для Win+Ctrl+m "mc" и тому подобное.

    Нельзя такое сделать.
    Подобное только можно сделать имею гуй.
    В консоли можно только назначить алиасы команд!
    Насчет переключения консолей не понял, это как вы планируете сделать?! )
    Возможно вам подойдет вариант переключения консолей ctrl+alt+f1(2.3.4.5.7.8.9.10).

    • Назначение 'горячих клавиш' для программ консоли , !*! Айнанимм, 11:08 , 10-Янв-20 (3)
      > Нельзя такое сделать.

      Неужели нет программ, которые бы перехватывали клавиатуру (наверно читали из /dev/input?) и запускали бы чего нибудь (system(), exec(), etc)

      > Подобное только можно сделать имею гуй.

      Про xbindkeys знаю, но нужно без гуя...

      > В консоли можно только назначить алиасы команд!

      А для алиасов горячие клавиши не назначаются?

      > Насчет переключения консолей не понял, это как вы планируете сделать?! )
      > Возможно вам подойдет вариант переключения консолей ctrl+alt+f1(2.3.4.5.7.8.9.10).

      Там есть ctrl+alt+Fx и alt+Fx, а я хочу как у меня на i3 - Win+1(2,3,4,5...)

  • Назначение 'горячих клавиш' для программ консоли , !*! ACCA, 10:36 , 10-Янв-20 (2)
    > Имеется Debian 9-й, без графики (консоль). Хотелось бы задать клавиши для запуска
    > разных программ, причём не просто будучи в bash`е, а в любой
    > консольной программе. Например перенести переключение консолей на Win+1,2 и т.п. задав
    > для Win+1 "chvt 1", для Win+Ctrl+m "mc" и тому подобное.

    В общем случае - никак. bash пользуется readline, а кто-то пользуется только termios.

    Кроме того, о юный падаван, открой для себя screens, tmux, muck, dvtm и ещё кучу подобных.

    Это если не упоминать терминалы в X11/Gnome/KDE/Xfce/... и SSH.

    bash в десяточке - это левая шняга.

    • Назначение 'горячих клавиш' для программ консоли , !*! Айнанимм, 11:17 , 10-Янв-20 (4)
      >bash пользуется readline...

      А этот readline позволяет запускать программы? Вроде бы как-то через bind можно для readline задавать хоткеи.

      > Кроме того, о юный падаван, открой для себя screens, tmux, muck, dvtm
      > и ещё кучу подобных.

      А там можно менять клавиатурные сокращения? Хочу хоть как-то унифицировать горячие клавиши. На настольном ПК i3wm, ноутбук слабенький, там гуй не поворотный, консоли для работы хватает.

      > Это если не упоминать терминалы в X11/Gnome/KDE/Xfce/... и SSH.

      В Х11 можно назначать клавиши на любое приложение (xbindkeys).
      Про SSH - а там можно назначит клавиши для удалённой консоли?

      > bash в десяточке - это левая шняга.

      На ноуте 9-й дебиан.


      • Назначение 'горячих клавиш' для программ консоли , !*! ACCA, 02:47 , 12-Янв-20 (10)
        > А этот readline позволяет запускать программы? Вроде бы как-то через bind можно

        Разумеется, нет. Это не его работа. Запускает bash.


        > для readline задавать хоткеи.

        Не всякие, там куча осмысленных ограничений. man termcap.


        >> Кроме того, о юный падаван, открой для себя screens, tmux, muck, dvtm
        >> и ещё кучу подобных.
        > А там можно менять клавиатурные сокращения? Хочу хоть как-то унифицировать горячие клавиши.

        Можно, но не нужно. Ты убьёшь кучу времени, настроишь какие-то бесполезные Win+1. Потом тебе попадётся клава без Win - например Apple Aluminium. Кнопка яблока там есть, но работает она по-другому. Хотя с виду почти такая же.


        > В Х11 можно назначать клавиши на любое приложение (xbindkeys).
        > Про SSH - а там можно назначит клавиши для удалённой консоли?

        Разумеется, нет. Ты не знаешь, кто у тебя консоль на той стороне SSH. Там может оказаться Cisco IOS или вообще z/OS с termios под IBM-овскую клаву. 20 функциональных клавиш и ни одной Win, прикинь?


        Начни читать начиная с

           man termcap

        Пока ты не понимаешь, что ты делаешь. Консоль Unix - это совсем не клава с монитором. Твой Debian 9 обязан работать с кучей консолей, причём одновременно. Среди этих консолей есть даже телетайп.

        Подстраивать его под конкретную клаву можно, но сложно и не нужно. Сильно быстрее выучить дефолтные настройки и не делать себе мозг.

        • Назначение 'горячих клавиш' для программ консоли , !*! Айнанимм, 10:21 , 12-Янв-20 (13)
          >man termcap

          Поизучаю. Спасибо. Ещё бы русских манов бы в систему...

          > Можно, но не нужно.
          > Потом тебе попадётся клава без Win - например Apple Aluminium. Кнопка
          > яблока там есть, но работает она по-другому.

          Это попытка унифицировать работу на старом ноутбуке (консоль, редко софтина в X) и настольном ПК (i3wm с двумя мониторами). Всё равно работа за чужим ПК это всегда неудобство.

          >>SSH
          >Ты не знаешь, кто у тебя консоль на той стороне

          Это да, просто SSH был упомянут Вами, вот и спросил.


          > Начни читать начиная с man termcap

          Уже. Спасибо.

          > Пока ты не понимаешь, что ты делаешь.

          Что - понимаю. Частичную идентичность в работе на двух разных машинах. А вот как я этого могу добиться - тут да, не понимаю. "Иду на ощупь ног"

          > Подстраивать его под конкретную клаву можно, но сложно и не нужно.

          Зато порой интересно :)

          >Сильно быстрее выучить дефолтные настройки и не делать себе мозг.

          К сожалению "дефолтные настройки" у каждого свои. Даже для переключения раскладки...


  • Назначение 'горячих клавиш' для программ консоли, !*! anonymous, 18:31 , 10-Янв-20 (7) +1
    > Здравствуйте!
    > Имеется Debian 9-й, без графики (консоль). Хотелось бы задать клавиши для запуска
    > разных программ, причём не просто будучи в bash`е, а в любой
    > консольной программе. Например перенести переключение консолей на Win+1,2 и т.п. задав
    > для Win+1 "chvt 1", для Win+Ctrl+m "mc" и тому подобное.

    Костыляйте в screen, он позволяет назначать хоткеи (уверен tmux тоже подойдёт, но я не пользовался). А вообще как-то упорото звучит, когда есть автодополнение.

  • Назначение 'горячих клавиш' для программ консоли , !*! Айнанимм, 10:01 , 12-Янв-20 (11)
    Выдалось время - "накостылил":
    <code>
    #include <stdlib.h>
    #include <stdio.h>
    #include <unistd.h>
    #include <fcntl.h>
    #include <linux/input.h>
    int main(int argc, char *argv[]){
        FILE *fp;
        char keyPress [255];
        int i, debug;
        for (i = 0; i < 255 ; i++)
            keyPress [255] = 0;
      
      struct input_event ev[64];
      int fd, rd, value, size = sizeof (struct input_event);  
      if ((fd = open ("/dev/input/event1", O_RDONLY)) == -1)
        printf ("/dev/input/event1 is not a vaild device.\n" );
      while (1){
        if ((rd = read (fd, ev, size * 64)) < size)
            printf ("Error read()");    
        value = ev[0].value;
        if (value != ' ' && ev[1].value == 0 && ev[1].type == 1){
            keyPress[ev[1].code] = 0;
            if (debug) printf ("Отпустил клавишу с кодом %d \n", (ev[1].code));
        }
        if (value != ' ' && ev[1].value == 1 && ev[1].type == 1){
            keyPress[ev[1].code] = 1;
            if (debug) printf ("Нажал клавишу с кодом %d\n", (ev[1].code));
        }
        
        // 125 -code key "Win", 2 - code key "1", 3 -code key "2" ...
        if (keyPress[125] == 1 && keyPress[2] == 1) system("chvt 1");
        if (keyPress[125] == 1 && keyPress[3] == 1) system("chvt 2");
        if (keyPress[125] == 1 && keyPress[4] == 1) system("chvt 3");
        if (keyPress[125] == 1 && keyPress[5] == 1) system("chvt 4");
        if (keyPress[125] == 1 && keyPress[6] == 1) system("chvt 5");
        if (keyPress[125] == 1 && keyPress[7] == 1) system("chvt 6");
        if (keyPress[125] == 1 && keyPress[8] == 1) system("chvt 7");
        if (keyPress[125] == 1 && keyPress[9] == 1) system("chvt 8");
        if (keyPress[125] == 1 && keyPress[10] == 1) system("chvt 9");
        if (keyPress[125] == 1 && keyPress[11] == 1) system("chvt 10");
      }
      fclose(fp);
      return 0;
    }
    </code>
    Вылез косяк - при нажатии на клавиши печатается в терминале ^[1 ^[2 и т.п. Как победить? printf("%c%c", 8, 8); как ожидалось не помогает





Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру