Я также нахожу раздражающим, что ярлыки терминала для копирования и вставки отличаются от того, что используется в остальной части системы. Альтернативное решение для того, которое вы нашли, - это смена ярлыков терминала на ctrl + c и ctrl + v и изменение ключа прерывания, добавив следующее в ~/.bashrc:
stty intr ^b
Теперь, чтобы прервать программу, вы ', чтобы ввести ctrl + b вместо ctrl + c, но вы можете продолжить и переназначить ярлыки терминала. Как только это будет сделано, вы можете последовательно использовать ctrl + c, ctrl + v для копирования и вставки текста в систему.
Чтобы узнать, какие другие клавиши управления уже используются для отправки сигналов терминала, проверьте вывод stty -a.
Самый безопасный способ закрыть окно приложения изящно и убедиться, что вы не потеряете данные, использует wmctrl (не установленный по умолчанию):
wmctrl -ic <window_id>
Чтобы использовать его в скрипте для закрытия всех окон приложения:
установите оба xdotool и wmctrlsudo apt-get install wmctrl xdotool
Скопируйте сценарий ниже в пустой файл сохраните его как stop_active.py #!/usr/bin/env python3
import subprocess
def get(cmd):
return subprocess.check_output(cmd).decode("utf-8").strip()
pid = get(["xdotool", "getactivewindow", "getwindowpid"])
for w in get(["wmctrl", "-lp"]).splitlines():
if pid in w and not "Desktop" in w:
subprocess.call(["wmctrl", "-ic", w.split()[0]])
Добавьте следующую команду к клавише быстрого доступа: python3 /path/to/stop_active.py
Выберите: «Системные настройки»> «Клавиатура»> «Ярлыки»> «Пользовательские ярлыки». Нажмите «+» и добавьте команду: python3 /path/to/stop_active.py
N.B. не используйте ~ или $HOME в комбинации клавиш, но вместо этого используйте абсолютные пути. Теперь ярлык можно использовать для изящного закрытия всех окон самого последнего окна.
Я попробовал различные опции kill (kill -2 , kill -HUP, kill -s TERM <pid> и т. д.), которые упоминаются в нескольких сообщениях, чтобы закрыть приложение изящно.
wmctrl изящно спросить, что делать, однако, как и в случае с gedit с несохраненными изменениями, все они закрыли окно, однако, Ctrl + Q.
Затем скрипт сначала обнаруживает pid самого фронтального окна с командой:
xdotool getactivewindow getwindowpid
, затем список открытых окон открывается с помощью команды:
wmctrl -lp
Из этого списка соответствующие окна выбираются и закрываются командой:
wmctrl -ic <window_id>
Если вы закрываете все nautilus, в строке
if pid in w and not "Desktop" in w:
"Desktop" обращается к окну рабочего стола, который обычно должен всегда оставаться. Если вы не используете английскую версию Ubuntu, замените "Desktop" на локализованное имя рабочего стола на вашем языке.
Сценарий ниже убивает все активные окна текущего активного окна, в котором пользователь работает. Это означает, что он связан с ярлыком.
В сценарии появится всплывающее окно с запросом пользователя для подтверждения, прежде чем убить все окна.
Скрипт использует все собственные (предварительно установленные) инструменты, такие как qdbus, zenity и bash.
Вы можете скопировать исходный код скрипта или получить его из моего репозитория git, используя инструкции ниже
] sudo apt-get install git cd /opt ; sudo git clone https://github.com/SergKolo/sergrep.git Файл будет расположен в /opt/sergrep/kill_windows_set.sh; Убедитесь, что файл выполним с помощью sudo chmod +x kill_windows_set.shСоответствующую информацию можно найти здесь:
Как мне привязать файлы .sh
#!/usr/bin/env bash
#
###########################################################
# Author: Serg Kolo , contact: 1047481448@qq.com
# Date: April 2nd , 2016
# Purpose: Close all windows of the active application
# Written for: https://askubuntu.com/q/753033/295286
# Tested on: Ubuntu 14.04 LTS
###########################################################
# Copyright: Serg Kolo , 2016
#
# Permission to use, copy, modify, and distribute this software is hereby granted
# without fee, provided that the copyright notice above and this permission statement
# appear in all copies.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
# DEALINGS IN THE SOFTWARE.
ARGV0="$0"
ARGC=$#
get_running_apps()
{
qdbus org.ayatana.bamf /org/ayatana/bamf/matcher org.ayatana.bamf.matcher.RunningApplications
}
list_children()
{
qdbus org.ayatana.bamf "$1" org.ayatana.bamf.view.Children
}
get_pid()
{
qdbus org.ayatana.bamf "$1" org.ayatana.bamf.window.GetPid
}
main()
{
local ACTIVE
local apps_list
apps_list=( $( get_running_apps | tr '\n' ' ' ) )
for app in ${apps_list[@]} ; do
ACTIVE=$(qdbus org.ayatana.bamf $app org.ayatana.bamf.view.IsActive)
if [ "x$ACTIVE" = "xtrue" ] ; then
windows=( $( list_children $app | tr '\n' ' ' ) )
fi
done
for window in ${windows[@]} ; do
PIDS+=( $(get_pid $window) )
done
if zenity --question \
--text="Do you really want to kill ${#PIDS[@]} windows ?" ;
then
kill ${PIDS[@]}
fi
}
main
Вы можете создать ярлык для xkill.
настройки & lt; клавиатура & lt; ярлыки & lt; пользовательские ярлыки
Добавьте пользовательский ярлык, а затем просто напишите «xkill» в меню команд и установите собственный ярлык, нажав нужные клавиши.
Как вы сказали, это не дает вам сообщение «сохраненные несохраненные файлы».