Возьмем первую строку:
124.115.5.11 - - [30/May/2011:23:21:37 -0500] "GET / HTTP/1.0" 200 206492 "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322;TencentTraveler)"
и решающая часть сниппета awk
:
awk '{ split($4,array,"/") ...
Вот что происходит:
awk
запускает и разбивает строку на пробелы (разделитель полей по умолчанию)4-е
поле в строке дополнительно разбивается на /
символымассив
массив[2]
) 4-го полятак $4
поле изначально содержало [30/May/2011: 23:21:37
, а после разбиения имеем
array[1]=[30
array[2]=May
array[3]=2011:23:21:37
Не существует array[4]
, потому что там 4
-е поле не содержит 4
-е "подполе" и не существует array[0]
, потому что в awk
индексы массивов начинаются с 1.
Поскольку никто ничего не придумал (и я сам ничего не могу найти), я предполагаю, что ответ на этот вопрос будет "Нет, вы не можете этого сделать". Поэтому я открыл проблему на cinnamon github с просьбой сделать это функцией.
Так как я не получил ответа и там, я ищу возможность реализовать это самостоятельно. Изучая кодовую базу cinnamon, похоже, что внутренний "движок" написан на c (сложно исправить), но многие вещи внешнего пользовательского интерфейса обрабатываются на JavaScript (проще исправить). Таким образом, есть шанс, что я смогу что-то взломать, чтобы хотя бы подлатать свою систему, если не создать настоящее исправление, которое будет включено в саму Cinnamon.
Если я найду решение, я опубликую результат здесь.
Обновление: Я сделал взлом кода. Это не официальное решение, но если вы обратитесь к ранее упомянутому тикету, то сможете найти подробности. Я воспроизвожу свою запись и здесь:
Итак, после установки тестового изображения, изучения кода и некоторых исследований, я придумал решение, как это исправить. Примечание: в настоящее время это просто обходной путь, который включает в себя ручное редактирование нескольких файлов. Чтобы представить это как "официальное" исправление, мне нужно:
Разберитесь с созданием фактической сборки .deb из пакета cinnamon (или это не обязательно для отправки исправления?).
Получить немного больше отзывов о том, является ли способ, которым я это сделал, "хорошим" способом делать это.
Пока что я собираюсь придерживаться этого обходного пути. На самом деле я очень рад, что у меня есть обходной путь, и что он состоит всего из пары строк. Это позволяет мне сразу же приступить к его использованию (и это здорово).
В любом случае, в другом комментарии я напишу подробное сообщение с некоторыми предысториями: какие файлы важны, как я это понял, и что именно нужно сделать, пока я распространяю исправление на свой рабочий образ.
Как добавить поддержку горячей клавиши для "посетить последнее рабочее пространство" в Cinnamon 17.2 (2.6.13+rafaela).
Мы перехватим функциональность редко используемой привязки клавиш по вашему выбору (я использовал 'move-to-workspace-left') с функциональностью для реализации "move-to-workspace-last". Для этого нужно добавить несколько строк в '/usr/share/cinnamon/js/ui/windowManger.js'. Нам нужно будет добавить новую переменную состояния 'global.screen.penultimate_workspace' в js-переменную 'global', а затем использовать функцию 'global.screen.get_workspace_by_index(new_index)' для активации "последнего" рабочего пространства, а затем вызвать 'activate' для перехода на него.
Хорошим примером существующего файла, который делает нечто подобное, является апплет workspace-switcher, который находится по адресу '/usr/share/cinnamon/applets/workspace-switcher@cinnamon.org/applet.js'. Вы должны добавить этот апплет на панель, чтобы увидеть файл.
К счастью, это можно сделать полностью на JavaScript в Cinnamon.
Смотрите здесь для полной копии исправленного файла Mint 17.3. Поиск по 'vt' (мои инициалы) позволяет увидеть соответствующие части кода. Это намного проще, чем небольшие фрагменты кода, которые я привожу далее.
Отредактируйте файл '/usr/share/cinnamon/js/ui/windowManger.js' следующим образом:
1) инициализируйте новую глобальную переменную 'screen.penultimate_workspace':
WindowManager.prototype = {
_init : function() {
this._cinnamonwm = global.window_manager;
...
//fix add
global.screen.penultimate_workspace = 1;
//fix end
2) обновляйте penultimate_workspace каждый раз, когда кто-то вручную переключается на рабочее пространство с помощью клавиши 'switch-to-workspace-'. Это функция _switchWorkspace в windowManager.js ;
_switchWorkspace : function(cinnamonwm, from, to, direction) {
//fix add
global.screen.penultimate_workspace = from;
//fix end
if (!this._shouldAnimate()) {
cinnamonwm.completed_switch_workspace();
return;
}
3) наложить выбранный вами обработчик привязки клавиш:
_moveWindowToWorkspaceLeft : function(display, screen, window, binding) {
//original code
//this._shiftWindowToWorkspace(window, Meta.MotionDirection.LEFT);
//end original code
//fix add
// get workspace object for 'last' workspace
let metaWorkspace = global.screen.get_workspace_by_index(global.screen.penultimate_workspace);
// save current workspace index into penultimate_workspace
global.screen.penultimate_workspace = global.screen.get_active_workspace_index();
// and switch to penultimate workspace
metaWorkspace.activate(global.get_current_time() );
//fix end
},
1) Я решил использовать "Ctrl-Alt-l" (это нижний регистр 'ell) в качестве команды 'switch-to-workspace-last'. К сожалению, она уже использовалась в качестве блокировки экрана. a) итак, зайдите в панель управления->Клавиатура->Сокращения->Система->Блокировка экрана и измените на Ctrl-Alt-Shift-l (или то, что вы хотите)
2) используя редактор dconf, измените 'move-to-workspace-left' на 'Control -Alt-l' в схеме org.cinnamon.desktop.keybindings.wm
1) введите "Ctrl-Alt-Esc", чтобы обновить оконный менеджер cinnamon. Это похоже на выход из системы и вход в систему, за исключением того, что все ваши окна и сеансы редактирования останутся в силе.
Примечание: иногда ваш терминал может зависнуть после выполнения этого действия. Если это произойдет, просто перезагрузите образ.
Вот и все. После этого нажатие "Ctrl-Alt-l" должно привести вас к последнему посещенному окну.
1) используйте Ctrl-Alt-Esc для обновления оконного менеджера, если вы изменили файл. Любые изменения, которые вы делаете, не вступят в силу, пока вы не сделаете это.
2) используйте global.log("vt: windowManger. blah");
для просмотра отладочных сообщений. Сделайте tail -f на ~/.cinnamon/glass.log, чтобы увидеть сообщения:
tail -f glass.log
Примечание: вы должны убить все предыдущие tail -...f сеансов и начинать заново каждый раз, когда вы делаете "Ctrl-Alt-Esc", чтобы обновить оконный менеджер.