Это могло бы получить Вас там...
Включите пользовательское заполнение клавишей Tab в своем .bashrc
shopt -s progcomp
Создайте compgen, функционируют и добавляют его к .bashrc после Ваших функций примечаний.
_notes() {
local cur
cur=${COMP_WORDS[COMP_CWORD]}
COMPREPLY=( $(compgen -f $HOME/n/$cur | cut -d"/" -f5 ) )
}
complete -o filenames -F _notes n
Это работает на меня - на базовом уровне. Я все еще не решил его для вложенных каталогов...
Ссылки:
большая часть из него отсюда: http://sixohthree.com/867/bash-completion
Завершение встроенные детали здесь: http://www.gnu.org/software/bash/manual/html_node/Programmable-Completion-Builtins.html
tmux и экранные программы непосредственно не проходят через escape-последовательности. Они представляют один вид терминала к приложению (экранируйте терминальный тип), и самостоятельно ncurses приложение к другому терминалу. В действительности это - что-то как терминальный переводчик. Так да это использует (или отбрасывания) последовательности для "экранного" типа терминала и поднимает буфер, который Вы видите. Затем это берет те буферные события изменения и использует любой вид терминала, который Вы в настоящее время используете для отображения текущего буфера. Таким образом, исходное приложение и терминал просмотра отделяются.
Если бы вы поставили что-то вроде ...
export "PTTY=$(tty)"
... В вашем / etc / roft
Тогда для каждого нового -L
Огин Shell вы бы вызваны (который обычно происходит, когда вы открываете новое окно терминала) , что переменная среды будет доступна для всех его дочерних процессов, которые должны включать TMUX
и все его дети.
Это должно позволить вам сделать ...
printf '\033]9;foobar\007' >"$PTTY"
... и тем самым пропустить прямо через любые pty
слоев, которые могут существовать между вашей текущей оболочкой и эмулятором терминала, который вы используете.
Если проблема в том, что выход из вашего бэш-скрипта теряется, то вы можете выиграть битву с переадресацией:
echo "\ePtmux;\e\e]9;foobar\007\e\". > /dev/tty
Однако, я подозреваю, что реальная проблема заключается в том, что вы должны использовать echo -e
для того, чтобы bash обрабатывал экранирующие последовательности в вашей строке.
Причина, по которой сценарий события не может отправить сообщение "Growler", заключается в том, что mcabber
закрывает стандартный ввод, вывод и потоки ошибок при запуске команды события. Вы можете увидеть это в hooks.c
:
if ((pid=fork()) == -1) {
scr_LogPrint(LPRINT_LOGNORM, "Fork error, cannot launch external command.");
g_free(datafname);
return;
}
if (pid == 0) { // child
// Close standard file descriptors
close(STDIN_FILENO);
close(STDOUT_FILENO);
close(STDERR_FILENO);
if (execl(extcmd, extcmd, arg_type, arg_info, bjid, arg_data,
(char *)NULL) == -1) {
// scr_LogPrint(LPRINT_LOGNORM, "Cannot execute external command.");
exit(1);
}
}
g_free(datafname);
Это заставляет сценарий событий запускаться без вмешательства в потоки, используемые mcabber
.
Нет специального режима ncurses для перехвата сообщения (в конце концов, tmux
уже запущен как приложение terminfo). Вероятно, вы можете обойти проблему, перенаправив свой echo
(предпочтительно printf
) на / dev / tty
, например,
#!/bin/sh
printf '\033Ptmux;\033\033]9;foobar\007\033\\' >/dev/tty