Как geany открывает дополнительные файлы?
Модератор: Bizdelnick
Как geany открывает дополнительные файлы?
Вопрос не в том, с помощью каких функций он открывает файл. Вопрос в другом.
Если я в консоли выдам команду geany prog.c, то он запустится и откроет этот файл. При этом консоль окажется занятой.
Но если geany уже запущен, то этот файл откроется в новой вкладке уже запущенной программы. Консоль при этом останется свободной. Как это делается?
То есть как geany определяет, что он уже запущен и как передаёт запущенному экземпляру имя файла, который надо открыть?
Если я в консоли выдам команду geany prog.c, то он запустится и откроет этот файл. При этом консоль окажется занятой.
Но если geany уже запущен, то этот файл откроется в новой вкладке уже запущенной программы. Консоль при этом останется свободной. Как это делается?
То есть как geany определяет, что он уже запущен и как передаёт запущенному экземпляру имя файла, который надо открыть?
Re: Как geany открывает дополнительные файлы?
Что-то наподобие ps -A -f | grep `which geany` на уровне системных вызовов?
Re: Как geany открывает дополнительные файлы?
geany file1 2>/dev/null &
file1 открыт в geany, консоль доступна для ввода команд.
geany file9 2>/dev/null &
file9 - откроется в новой вкладке geany.
Вообще исходники имеет смысл глянуть.
file1 открыт в geany, консоль доступна для ввода команд.
geany file9 2>/dev/null &
file9 - откроется в новой вкладке geany.
Вообще исходники имеет смысл глянуть.
Memento mori ... сделай бэкап.
Re: Как geany открывает дополнительные файлы?
Это делается с помощью механизмов IPC (например, создаётся named pipe, и новая копия туда засылает имя файла, который нужно открыть, и после получения подтверждающего ответа от старой копии завершается).
- Bizdelnick
- Модератор
- Сообщения: 20794
- Статус: nulla salus bello
- ОС: Debian GNU/Linux
Re: Как geany открывает дополнительные файлы?
Скорее сокет. Через пайп ответ не получишь, он однонаправленный.
Пишите правильно:
в консоли вку́пе (с чем-либо) в общем вообще | в течение (часа) новичок нюанс по умолчанию | приемлемо проблема пробовать трафик |
Re: Как geany открывает дополнительные файлы?
Это понятно. Я по такой аналогии сделал ряд скриптов в ~/bin. В частности для firefox и libreoffice. Чтобы не "бегать" по меню, а просто ввести команду из пары букв. Только добавил ещё >/dev/null чтобы не только syderr, но и stdout не появлялся в окне.
Вот ради этого у меня и возник вопрос.
Причём, можно просто выдать команду geany file9. Результат будет тот же
Я уже не способен детально анализировать тексты такого объёма.
Но попробую проанализировать вывод с помощью strace
Именно такое не проходит.
Shell
$ which geany
/usr/bin/geany
У меня сейчас geany запущен, Но
Shell
$ ps -A -f | grep geany
mik13 4242 2189 0 12:45 tty2 00:00:05 geany
mik13 11579 3941 0 15:02 pts/6 00:00:00 grep --color=auto geany
Re: Как geany открывает дополнительные файлы?
Открытие файлов средствами gtk.
Memento mori ... сделай бэкап.
- Bizdelnick
- Модератор
- Сообщения: 20794
- Статус: nulla salus bello
- ОС: Debian GNU/Linux
Re: Как geany открывает дополнительные файлы?
Так объём выдачи strace будет многократно больше. Тем более что Вы, похоже, и не представляете, что в нём искать.
https://github.com/geany/geany/blob/b524a58e12e85c94a32f64fb72615978b2628af1/src/socket.c#L24-L25
Пишите правильно:
в консоли вку́пе (с чем-либо) в общем вообще | в течение (часа) новичок нюанс по умолчанию | приемлемо проблема пробовать трафик |
Re: Как geany открывает дополнительные файлы?
Есть команда xdg-open, может вам в эту сторону посмотреть?
Код: Выделить всё
xdg-open - opens a file or URL in the user's preferred application
"Однажды один очень мудрый человек… ничего не сказал. Времена были опасные, да и собеседники ненадёжные"
- Bizdelnick
- Модератор
- Сообщения: 20794
- Статус: nulla salus bello
- ОС: Debian GNU/Linux
Re: Как geany открывает дополнительные файлы?
MiK13, а в чём суть вопроса? Вас теоретически интересует, как это работает, или Вы на практике хотите что-то сделать (что именно?)? А то такое ощущение, что каждый отвечающий понимает по-своему, и даёт соответствующие его пониманию советы.
Пишите правильно:
в консоли вку́пе (с чем-либо) в общем вообще | в течение (часа) новичок нюанс по умолчанию | приемлемо проблема пробовать трафик |
- Bizdelnick
- Модератор
- Сообщения: 20794
- Статус: nulla salus bello
- ОС: Debian GNU/Linux
Re: Как geany открывает дополнительные файлы?
man nohup
Пишите правильно:
в консоли вку́пе (с чем-либо) в общем вообще | в течение (часа) новичок нюанс по умолчанию | приемлемо проблема пробовать трафик |
Re: Как geany открывает дополнительные файлы?
В системах, которые мы делаем, есть ряд программ, работающих в фоновом режиме (демонов). И иногда возникает задача изменить режим работы некоторых программ без их перезапуска. Чтобы не потерялись данные, с которыми эта программа работает.Bizdelnick писал: ↑12.05.2022 21:47MiK13, а в чём суть вопроса? Вас теоретически интересует, как это работает, или Вы на практике хотите что-то сделать (что именно?)?
Точнее, так. При запуске программы она должна проверить, не была ли она запущена раньше. И если нет, то запустить её в обычном режиме.
А если была, то передать ей аргументы и завершить работу.
Re: Как geany открывает дополнительные файлы?
А смысл в nohup? Только ради того, чтобы не было вывода на терминал?
Скрипт (ради быстрого вызова) пишется один раз. Поэтому разницы нет. Вводить команду из консоли смысла нет -- "многа букаф печатать"
Кстати, в man nohup увидел интересную запись:
Но which nohup выдаёт /usr/bin/nohup. То есть это программа, не команда bash.NOTE: your shell may have its own version of nohup, which usually supersedes the version described here. Please refer to your shell’s documentation for details about the options it supports.
Или есть шелы, где это встроенная команда?
- Bizdelnick
- Модератор
- Сообщения: 20794
- Статус: nulla salus bello
- ОС: Debian GNU/Linux
Re: Как geany открывает дополнительные файлы?
Ну тут два варианта ходовых.
Вариант попроще: создаётся PID-файл, на него устанавливается эксклюзивная блокировка. При запуске, если файл залочен, отправляется сигнал записанному в нём процессу, после чего тот делает, что от него требуется; если же файл не залочен или отсутствует — запуск в «обычном режиме».
Вариант посложнее: программа слушает некий сокет. При запуске пытается подключиться к этому сокету и передать команду, в случае неудачи (сокета нет или его никто не слушает) — запуск «в обычном режиме». Тут нужно продумать протокол взаимодействия, зато его можно сделать сколь угодно навороченным, в зависимости от потребностей. Именно так сделано в geany, насколько я вижу.
Пишите правильно:
в консоли вку́пе (с чем-либо) в общем вообще | в течение (часа) новичок нюанс по умолчанию | приемлемо проблема пробовать трафик |
Re: Как geany открывает дополнительные файлы?
Спасибо. Скорее всего так и буду делать.Bizdelnick писал: ↑15.05.2022 00:49Вариант посложнее: программа слушает некий сокет. При запуске пытается подключиться к этому сокету и передать команду, в случае неудачи (сокета нет или его никто не слушает) — запуск «в обычном режиме».
Только надо поподробнее с сокетами разобраться. Я с ними пока работал только для передачи по TCP или UDP.