Вот то, как я сделал бы это:
wmctrl
перечислять открытые окна, затем: wmctrl
находит окно с заголовком "удара", повысьте егоxterm
xbindkeys
назвать тот сценарий, когда Вы нажимаете свой ярлыксоздание оболочки установить заголовок окна, когда Вы выполняете команду
Вот упрощенная версия того, как я делаю это в ударе. Я не проверил код дважды, но он работает над моей машиной.
# set the title when we run a command
setcommandhook()
{
if $has_debug_trap
then
trap 'command=$BASH_COMMAND; eval settitle "\"${title}\""; trap - DEBUG' DEBUG
fi
}
# set the xterm title
settitle()
{
printf "\033]0;$*\007"
}
promptstring='$(hostname):$(pwd)$ '
title='$(hostname) "${command:-$0}"'
# prompt and window title
if test -n "${title}"
then
PROMPT_COMMAND='command=; eval settitle "\"${title}\""'
if $has_debug_trap
then
PROMPT_COMMAND="$PROMPT_COMMAND; setcommandhook"
fi
fi
if test -n "${promptstring}"
then
PS1='$(eval echo -n "\"${promptstring}\"")'
fi
Выполнение в нем zsh
легче, потому что это имеет preexec
рычаг.
Вы видите мои конфигурации оболочки для получения дополнительной информации, например, getcommand
функция, которая обрабатывает команды как fg
более хорошим способом.
повышение xterm, который имеет удар, запрашивает в других отношениях стартовый новый
Запишите сценарий, который использует wmctrl -l
перечислять окна, ища один с bash
в заголовке. Если Вы найдены, то выполненными wmctrl -i -a
для повышения его еще просто звоните xterm
.
Вот сценарий, который делает это:
#!/bin/bash
#
# bashprompt
#
# if there is an xterm open at a bash prompt, raise/focus that window
# if there isn't start a new xterm
#
# requires that your xterm window title has "bash" at the end
# when there is no command running and doesn't have "bash" at the end
# when a command is running
#
# see for more details
#
# Mikel Ward
# change this to whatever is unique about your window title
# (i.e. a string that appears in the title when the shell is at a prompt
# but does not appear when running a command)
prompttitle="bash$"
terminalprog="xterm"
if ! type wmctrl >/dev/null 2>&1; then
echo "wmctrl can't be found, please install it" 1>&2
exit 1
fi
if ! output="$(wmctrl -l)"; then
echo "Error running wmctrl -l" 1>&2
exit 1
fi
while IFS=$'\n' read -r line; do
if [[ $line =~ $prompttitle ]]; then
id=${line%% *}
break
fi
done <
Или загрузите его с моего репозитория сценариев.
запущение скрипта, когда Вы нажимаете Win+R
Принятие Вашего сценария называют /usr/local/bin/bashprompt
, сделайте файл ~/.xbindkeysrc
содержа:
"/usr/local/bin/bashprompt"
Mod4 + r
затем выполненный xbindkeys
. Добавьте его к Вашему .Xclients
файл или подобный, чтобы заставить его запустить автоматически.
Сказать tclsh
прочитать сценарий из другого дескриптора файла и использовать здесь документ для передачи сценария.
shuffle () {
tclsh /dev/fd/3 "$@" 3<<'EOF'
proc main {} {
…
}
main
EOF
}
Не то, что Вы просите, но рандомизация строки, уже реализовано в coreutils
.
Любое использование shuf
или sort -r
.
Попробуйте, например:
echo {1..10} | tr ' ' '\n' | shuf
Пример произвел:
8
4
2
7
5
10
6
3
1
9
shuf
может сделать качество случайное упорядочивание с --random-source=/dev/random
, в то время как sort -r
достаточно случайно в большинстве целей, но криптографически плох.
– mc0e
15.01.2015, 16:05