В xmonad, как я могу повысить следующее окно в стеке до главного окна?

Во-первых, я согласен с комментариями выше: Не используйте sed для восстановления после взлома. Вы всегда будете удивляться, если вы что-то пропустили. Восстановить из резервной копии, и точка.

Тем не менее, буквальный вопрос, который вы задали, как удалить длинную строку везде, где она появляется, не экранируя каждый специальный символ, несколько проще обработать.

Я делаю некоторые выводы / предположения из вашего вопроса, которые вы на самом деле не указали напрямую:

  1. Удаляемая строка представляет собой одну строку.
  2. Что каждый раз одно и то же.
  3. Что его нужно удалить , а не заменять чем-то другим.

Если вышеприведенные предположения верны, выполните следующие действия:

  1. Поместите строку, которую нужно удалить (включая любые конечные пробелы), в файл отдельно, например, вызываемый hackline.txt . Поместите этот уровень выше каталога, который вы собираетесь обрабатывать.
  2. Скопируйте весь каталог в случае ошибок.

     cp -a mydir mydircopy 
     
  3. Выполните следующий цикл для вашего каталога (или копии), чтобы удалить все экземпляры hackline:

     cd mydir 
    для f в * ; сделать 
     [-f "$ f"] && [-r "$ f"] || продолжить 
    grep -vxFf ../hackline.txt "$ f"> "$ f.fixed" && 
    mv - "$ f.fixed" "$ f" 
    готово 
     

Суть в том, что вы используете hackline.txt как список фиксированных строк, которые должны соответствовать всей строке, затем вы используете grep , чтобы получить только те строки, которые не соответствуют этот список строк.

-x означает «всю строку»; -F означает «фиксированная строка, а не регулярное выражение»; -v инвертирует поиск; -f принимает список шаблонов в файле.

Если каталог вашего веб-сайта является иерархическим, а не плоским (что на самом деле весьма вероятно), вы можете использовать find вместо цикла for:

find mydir -type f ! -name \*.fixed -exec sh -c 'grep -vxFf ../hackline.txt "$1" > "$1.fixed"' sh {} \;
find mydir -type f -name \*.fixed -exec sh -c 'mv -- "$1" "${1%.fixed}"' sh {} \;

Затем используйте рекурсивный diff чтобы убедиться, что все в порядке:

diff -r mydircopy mydir
4
16.09.2015, 10:21
1 ответ

Чрезвычайно поздний ответ, но, возможно, все еще кому-то полезен:

Функции, которые вам нужны: windows $ W.swapMaster . W.focusDown, где: swapMasterи focusDownимпортированы из XMonad.StackSet:

import qualified XMonad.StackSet as W

Минимальный xmonad.hs:

import XMonad
import XMonad.Util.EZConfig
import qualified Data.Map as M
import qualified XMonad.StackSet as W

main = xmonad $ def `additionalKeysP` myKeys

myKeys = [ ("M-a", windows $ W.swapMaster . W.focusDown )]

Здесь привязка клавиш Mod-a.

2
27.01.2020, 21:00

Теги

Похожие вопросы