Да, этого можно добиться, привязав ярлык к:
env GDK_BACKEND=x11 tilix --quake
Ссылки:
Из версии 1.7.7:
...the other major change is that support for quake mode in Wayland has been dropped. It's turned out to be have far too many issues to support due to the limitations of Wayland around window positioning. Users who want to use quake mode in Wayland can do so by forcing the usage of the X11 backend with tilix via the environment variable GDK_BACKEND=x11.
И из gnunn1/tilix #1314:
I've had a look at resolving these issues and frankly I just don't think it's possible to have a perfect experience under Wayland without getting into writing Wayland extensions or something else equally exotic
Вернулся и прочитал, какие могут быть различия между нашими версиями sed и re -и написал его с нуля. Надеюсь, это сработает:
:r
$!N
y:+:,:
/\n,/{
s:^\([^,]\{1,\},[^,]\{1,\}\)\([^\n]\{1,\}\)\n,\([^ \n]\{1,\}\).*$:\1 \3\2:
br
}
$!P
$!D
Выход:
TYPE,DESCRIPTION,PRIORITY,DATE
1,text1 text2,HIGH,Aug 15
2,text,LOW,Aug 11
3,text,LOW,Aug 11
4,text1 text2 text3,HIGH,Aug 15
awk '
BEGIN{OFS=FS="+"}
{sub(/[[:blank:]]+$/,"")} #Removes trailing blanks
NF==4{print line;line=$0}
NF==2{x=$2;$0=line;$2=$2" "x;line=$0}
END{print line}
' file | column -ts "+"
Основная идея заключается в том, что если NF==2
, то поместите второе поле $2
во второе поле предыдущей строки. Итак, что происходит
1+text1+HIGH+Aug 15 #Puts this in "line" variable
+text2 #Transfer 2nd field to "line" second field
# Resulting in...
1+text1 text2+High+Aug 15
column
удаляет +
из вывода, чтобы создать этот окончательный вывод:
TYPE DESCRIPTION PRIORITY DATE
1 text1 text2 HIGH Aug 15
2 text LOW Aug 11
3 text LOW Aug 11
4 text1 text2 text3 HIGH Aug 15
perl -0pe 'while(s/(.*?)\+(.*?)\+(.*)\n\+(.*)/$1+$2 $4+$3/g){}' file
perl -0
-хлебать весь ввод s/(.*?)\+(.*?)\+(.*)\n\+(.*)/$1+$2 $4+$3/g
преобразует A+B+...C\n+D
в A+B D+...C
, пока это возможно. Создание «независимого от поля»awk
tac file | awk 'BEGIN{FS="+"}
{flds=(NF>flds)?NF:flds;for (i=1; i<=NF; i++) {f=(length($i)>0)?gensub(/ +$/,"","g",$i)" ":"";fld[i]=f fld[i]}}
$1>0{for (i=1; i<=flds; i++) printf fld[i]"+"; printf "\n"; delete fld}' |
tac | column -ts "+"
TYPE DESCRIPTION PRIORITY DATE
1 text1 text2 HIGH Aug 15
2 text LOW Aug 11
3 text LOW Aug 11
4 text1 text2 text3 HIGH Aug 15
Прохождение
Переверните файл, чтобы знать, что пора печатать, когда $1 не пуст, и установитеFS
tac file | awk 'BEGIN{FS="+"}
Ведите подсчет максимального количества flds
, циклически перебирайте поля, обрезая их и проверяя наличие пробелов, загружайте их в массив по полю для их объединения
{flds=(NF>flds)?NF:flds;for (i=1; i<=NF; i++) {f=(length($i)>0)?gensub(/ +$/,"","g",$i)" ":"";fld[i]=f fld[i]}}
Если $1
не является -пустым, выведите строку и сбросьте массив
$1>0{for (i=1; i<=flds; i++) printf fld[i]"+"; printf "\n"; delete fld}' |
Пропустите через tac
, чтобы перевернуть его, и используйте column
, чтобы приукрасить его
tac | column -ts "+"
Редактировать
На самом деле не понравился второй цикл, останавливающийся на gensub
каждом поле, когда вы можете ударить по нему sed
молотком, так как он конвейерный, и что тесты могут быть упрощены. Чувствовал себя неэлегантно.
Итак, вот версия для гольфа , которая мне кажется лучше:
tac file | awk 'BEGIN{FS="+"}
{flds=(NF>flds)?NF:flds;
for (i=1; i<=NF; i++) {fld[i]=$i" "fld[i];
if ($1) printf fld[i]"+"}}
$1{ printf "\n"; delete fld}' |
sed -E "s/ +/ /g" | tac | column -ts "+"