First, I also find it annoying that these warnings show up on an out-of-the-box Ubuntu, with no "proper" method to disable them which I could find (it seems that the most common "solution" is either to install gir1.2-gtksource-3.0
which doesn't seem to work since it's already installed, or to ignore them - but I want to suppress them completely since they just make my terminal noisy).
I came up with the following code which so far seems to behave exactly how I'd expect it to, and is based on the answer by TuKsn, but enhances it a bit to:
- Work by default (
gedit ...
) without needing to use F12 or some other shortcut (to invoke unfiltered use /usr/bin/gedit ...
).
- Displays the entered command name when it terminates as a background task.
Can still be generalized a bit, but for now, if you need the same treatment for other commands, duplicate the gedit()
function for each other command name which needs the same filter.
# solution adapted from: http://askubuntu.com/questions/505594
# TODO: use a list of warnings instead of cramming all of them to a single grep.
# TODO: generalize gedit() to allow the same treatment for several commands
# without duplicating the function with only a different name
# output filter. takes: name_for_history some_command [arguments]
# the first argument is required both for history, but also when invoking to bg
# such that it shows Done <name> ... instead of e.g. Done /usr/bin/gedit ...
suppress-gnome-warnings() {
# $1 is the name which should appear on history but is otherwise unused.
historyName=$1
shift
if [ -n "$*" ]; then
# write the real command to history without the prefix
# syntax adapted from http://stackoverflow.com/questions/4827690
history -s "$historyName ${@:2}"
# catch the command output
errorMsg=$( $* 2>&1 )
# check if the command output contains not a (one of two) GTK-Warnings
if ! $(echo $errorMsg | grep -q 'Gtk-WARNING\|connect to accessibility bus'); then
echo $errorMsg
fi
fi
}
gedit() {
suppress-gnome-warnings $FUNCNAME $(which $FUNCNAME) $@
}
And a better version (way smaller, fully generic, no need to rewrite history since invoked as is, and better for filtering per line rather than the whole output):
# generates a function named $1 which:
# - executes $(which $1) [with args]
# - suppresses output lines which match $2
# e.g. adding: _supress echo "hello\|world"
# will generate this function:
# echo() { $(which echo) "$@" 2>&1 | tr -d '\r' | grep -v "hello\|world"; }
# and from now on, using echo will work normally except that lines with
# hello or world will not show at the output
# to see the generated functions, replace eval with echo below
# the 'tr' filter makes sure no spurious empty lines pass from some commands
_supress() {
eval "$1() { \$(which $1) \"\$@\" 2>&1 | tr -d '\r' | grep -v \"$2\"; }"
}
_supress gedit "Gtk-WARNING\|connect to accessibility bus"
_supress gnome-terminal "accessibility bus\|stop working with a future version"
_supress firefox "g_slice_set_config"
Best Answer
To solve
use
gksudo
orgksu
instead of sudo to open the file,or
More on gksudo
The next error
can be solved by updating
gir1.2-gtksource-3.0