From e2b016a2c13dd9d74fefd2765ee5ecf90d0ba2df Mon Sep 17 00:00:00 2001 From: DariusIII Date: Wed, 5 Sep 2018 11:16:22 +0200 Subject: [PATCH] Update tmux start/stop commands, add script to clone, compile and install latest tmux from source --- app/Console/Commands/TmuxUIStart.php | 37 ++-- app/Console/Commands/TmuxUIStop.php | 39 +--- install_tmux.sh | 31 +++ misc/update/tmux/start.php | 32 --- misc/update/tmux/stop.php | 7 - misc/update/tmux/tmux.conf.local | 294 --------------------------- misc/update/tmux/tmux_ge_2.3.conf | 36 ---- misc/update/tmux/tmux_le_2.0.conf | 21 -- 8 files changed, 56 insertions(+), 441 deletions(-) create mode 100644 install_tmux.sh delete mode 100644 misc/update/tmux/start.php delete mode 100644 misc/update/tmux/stop.php delete mode 100644 misc/update/tmux/tmux.conf.local delete mode 100644 misc/update/tmux/tmux_ge_2.3.conf delete mode 100644 misc/update/tmux/tmux_le_2.0.conf diff --git a/app/Console/Commands/TmuxUIStart.php b/app/Console/Commands/TmuxUIStart.php index db31ae34b..4fb51b098 100644 --- a/app/Console/Commands/TmuxUIStart.php +++ b/app/Console/Commands/TmuxUIStart.php @@ -3,8 +3,9 @@ namespace App\Console\Commands; use App\Models\Settings; +use Blacklight\ColorCLI; +use Blacklight\Tmux; use Illuminate\Console\Command; -use Symfony\Component\Process\Process; class TmuxUIStart extends Command { @@ -20,31 +21,29 @@ class TmuxUIStart extends Command * * @var string */ - protected $description = 'Start the processing of tmux scripts. This is functionally equivalent to setting the -\'tmux running\' setting in admin.'; - - /** - * Create a new command instance. - * - * @return void - */ - public function __construct() - { - parent::__construct(); - } + protected $description = 'Start the processing of tmux scripts.'; /** * Execute the console command. */ public function handle() { + $tmux = new Tmux(); $tmux_session = Settings::settingValue('site.tmux.tmux_session') ?? 0; - $process = new Process('php misc/update/tmux/start.php'); - $process->setPty(Process::isPtySupported()); - $process->run(); - if ($process->isSuccessful()) { - $process->setCommandLine('tmux attach-session -t '.$tmux_session); - $process->run(); + + // Set running value to on. + $tmux->startRunning(); + + // Create a placeholder session so tmux commands do not throw server not found errors. + exec('tmux new-session -ds placeholder 2>/dev/null'); + + //check if session exists + $session = shell_exec("tmux list-session | grep $tmux_session"); + // Kill the placeholder + exec('tmux kill-session -t placeholder'); + if ($session === null) { + ColorCLI::doEcho(ColorCLI::info('Starting the tmux server and monitor script.'), true); + passthru('php '.app()->path().'/../misc/update/tmux/run.php'); } } } diff --git a/app/Console/Commands/TmuxUIStop.php b/app/Console/Commands/TmuxUIStop.php index fb87a8b16..9d5c9c540 100644 --- a/app/Console/Commands/TmuxUIStop.php +++ b/app/Console/Commands/TmuxUIStop.php @@ -3,6 +3,7 @@ namespace App\Console\Commands; use App\Models\Settings; +use Blacklight\Tmux; use Illuminate\Console\Command; use Symfony\Component\Process\Process; @@ -20,18 +21,7 @@ class TmuxUIStop extends Command * * @var string */ - protected $description = 'Stop the processing of tmux scripts. This is functionally equivalent to unsetting the -\'tmux running\' setting in admin. Usage: tmux-ui:stop false (does not kill tmux session), while using true will kill current tmux session'; - - /** - * Create a new command instance. - * - * @return void - */ - public function __construct() - { - parent::__construct(); - } + protected $description = 'Stop the processing of tmux scripts.'; /** * @throws \Exception @@ -39,31 +29,16 @@ class TmuxUIStop extends Command public function handle() { if ($this->argument('type') !== null) { - $process = new Process('php misc/update/tmux/stop.php'); - $process->setTimeout(600); - $process->run( - function ($type, $buffer) { - if (Process::ERR === $type) { - echo 'ERR > '.$buffer; - } else { - echo $buffer; - } - } - ); + (new Tmux())->stopIfRunning(); if ($this->argument('type') === 'true') { $sessionName = Settings::settingValue('site.tmux.tmux_session'); $tmuxSession = new Process('tmux kill-session -t '.$sessionName); $this->info('Killing active tmux session: '.$sessionName); - $tmuxSession->run( - function ($type, $buffer) { - if (Process::ERR === $type) { - echo 'ERR > '.$buffer; - } else { - echo $buffer; - } - } - ); + $tmuxSession->run(); + if ($tmuxSession->isSuccessful()) { + $this->info('Tmux session killed successfully'); + } } } else { $this->error($this->description); diff --git a/install_tmux.sh b/install_tmux.sh new file mode 100644 index 000000000..19504b734 --- /dev/null +++ b/install_tmux.sh @@ -0,0 +1,31 @@ +#!/usr/bin/env bash + +## This script will install latest tmux from source +## script is used from https://bogdanvlviv.com/posts/tmux/how-to-install-the-latest-tmux-on-ubuntu-16_04.html with small additions + +sudo apt update + +sudo apt install -y git + +sudo apt install -y automake +sudo apt install -y build-essential +sudo apt install -y pkg-config +sudo apt install -y libevent-dev +sudo apt install -y libncurses5-dev +sudo apt install -y fonts-powerline + +rm -fr /tmp/tmux + +git clone https://github.com/tmux/tmux.git /tmp/tmux + +cd /tmp/tmux + +sh autogen.sh + +./configure && make + +sudo make install + +cd - + +rm -fr /tmp/tmux diff --git a/misc/update/tmux/start.php b/misc/update/tmux/start.php deleted file mode 100644 index 5e78523b6..000000000 --- a/misc/update/tmux/start.php +++ /dev/null @@ -1,32 +0,0 @@ -startRunning(); - -// Create a placeholder session so tmux commands do not throw server not found errors. -exec('tmux new-session -ds placeholder 2>/dev/null'); - -//check if session exists -$session = shell_exec("tmux list-session | grep $tmux_session"); -// Kill the placeholder -exec('tmux kill-session -t placeholder'); -if ($session === null) { - echo ColorCLI::info("Starting the tmux server and monitor script.\n"); - passthru("php $path/run.php"); -} diff --git a/misc/update/tmux/stop.php b/misc/update/tmux/stop.php deleted file mode 100644 index 9c64dae5a..000000000 --- a/misc/update/tmux/stop.php +++ /dev/null @@ -1,7 +0,0 @@ -stopIfRunning(); diff --git a/misc/update/tmux/tmux.conf.local b/misc/update/tmux/tmux.conf.local deleted file mode 100644 index a7f237674..000000000 --- a/misc/update/tmux/tmux.conf.local +++ /dev/null @@ -1,294 +0,0 @@ -# https://github.com/gpakosz/.tmux -# (‑●‑●)> dual licensed under the WTFPL v2 license and the MIT license, -# without any warranty. -# Copyright 2012— Gregory Pakosz (@gpakosz). - - -# -- navigation ---------------------------------------------------------------- - -# if you're running tmux within iTerm2 -# - and tmux is 1.9 or 1.9a -# - and iTerm2 is configured to let option key act as +Esc -# - and iTerm2 is configured to send [1;9A -> [1;9D for option + arrow keys -# then uncomment the following line to make Meta + arrow keys mapping work -#set -ga terminal-overrides "*:kUP3=\e[1;9A,*:kDN3=\e[1;9B,*:kRIT3=\e[1;9C,*:kLFT3=\e[1;9D" - - -# -- windows & pane creation --------------------------------------------------- - -# new window retains current path, possible values are: -# - true -# - false (default) -tmux_conf_new_window_retain_current_path=false - -# new pane retains current path, possible values are: -# - true (default) -# - false -tmux_conf_new_pane_retain_current_path=true - -# new pane tries to reconnect ssh sessions (experimental), possible values are: -# - true -# - false (default) -tmux_conf_new_pane_reconnect_ssh=false - -# prompt for session name when creating a new session, possible values are: -# - true -# - false (default) -tmux_conf_new_session_prompt=false - - -# -- display ------------------------------------------------------------------- - -# RGB 24-bit colour support (tmux >= 2.2), possible values are: -# - true -# - false (default) -tmux_conf_theme_24b_colour=false - -# window style -tmux_conf_theme_window_fg='default' -tmux_conf_theme_window_bg='default' - -# highlight focused pane (tmux >= 2.1), possible values are: -# - true -# - false (default) -tmux_conf_theme_highlight_focused_pane=false - -# focused pane colours: -tmux_conf_theme_focused_pane_fg='default' -tmux_conf_theme_focused_pane_bg='#0087d7' # light blue - -# pane border style, possible values are: -# - thin (default) -# - fat -tmux_conf_theme_pane_border_style=thin - -# pane borders colours: -tmux_conf_theme_pane_border='#444444' # gray -tmux_conf_theme_pane_active_border='#00afff' # light blue - -# pane indicator colours -tmux_conf_theme_pane_indicator='#00afff' # light blue -tmux_conf_theme_pane_active_indicator='#00afff' # light blue - -# status line style -tmux_conf_theme_message_fg='#000000' # black -tmux_conf_theme_message_bg='#ffff00' # yellow -tmux_conf_theme_message_attr='bold' - -# status line command style ( : Escape) -tmux_conf_theme_message_command_fg='#ffff00' # yellow -tmux_conf_theme_message_command_bg='#000000' # black -tmux_conf_theme_message_command_attr='bold' - -# window modes style -tmux_conf_theme_mode_fg='#000000' # black -tmux_conf_theme_mode_bg='#ffff00' # yellow -tmux_conf_theme_mode_attr='bold' - -# status line style -tmux_conf_theme_status_fg='#8a8a8a' # light gray -tmux_conf_theme_status_bg='#080808' # dark gray -tmux_conf_theme_status_attr='none' - -# terminal title -# - built-in variables are: -# - #{circled_window_index} -# - #{circled_session_name} -# - #{hostname} -# - #{hostname_ssh} -# - #{username} -# - #{username_ssh} -tmux_conf_theme_terminal_title='#h ❐ #S ● #I #W' - -# window status style -# - built-in variables are: -# - #{circled_window_index} -# - #{circled_session_name} -# - #{hostname} -# - #{hostname_ssh} -# - #{username} -# - #{username_ssh} -tmux_conf_theme_window_status_fg='#8a8a8a' # light gray -tmux_conf_theme_window_status_bg='#080808' # dark gray -tmux_conf_theme_window_status_attr='none' -tmux_conf_theme_window_status_format='#I #W' -#tmux_conf_theme_window_status_format='#{circled_window_index} #W' -#tmux_conf_theme_window_status_format='#I #W#{?window_bell_flag,🔔,}#{?window_zoomed_flag,🔍,}' - -# window current status style -# - built-in variables are: -# - #{circled_window_index} -# - #{circled_session_name} -# - #{hostname} -# - #{hostname_ssh} -# - #{username} -# - #{username_ssh} -tmux_conf_theme_window_status_current_fg='#000000' # black -tmux_conf_theme_window_status_current_bg='#00afff' # light blue -tmux_conf_theme_window_status_current_attr='bold' -tmux_conf_theme_window_status_current_format='#I #W' -#tmux_conf_theme_window_status_current_format='#{circled_window_index} #W' -#tmux_conf_theme_window_status_current_format='#I #W#{?window_zoomed_flag,🔍,}' - -# window activity status style -tmux_conf_theme_window_status_activity_fg='default' -tmux_conf_theme_window_status_activity_bg='default' -tmux_conf_theme_window_status_activity_attr='underscore' - -# window bell status style -tmux_conf_theme_window_status_bell_fg='#ffff00' # yellow -tmux_conf_theme_window_status_bell_bg='default' -tmux_conf_theme_window_status_bell_attr='blink,bold' - -# window last status style -tmux_conf_theme_window_status_last_fg='#00afff' # light blue -tmux_conf_theme_window_status_last_bg='default' -tmux_conf_theme_window_status_last_attr='none' - -# status left/right sections separators -tmux_conf_theme_left_separator_main='' -tmux_conf_theme_left_separator_sub='|' -tmux_conf_theme_right_separator_main='' -tmux_conf_theme_right_separator_sub='|' -#tmux_conf_theme_left_separator_main='' # /!\ you don't need to install Powerline -#tmux_conf_theme_left_separator_sub='' # you only need fonts patched with -#tmux_conf_theme_right_separator_main='' # Powerline symbols or the standalone -#tmux_conf_theme_right_separator_sub='' # PowerlineSymbols.otf font - -# status left/right content: -# - separate main sections with '|' -# - separate subsections with ',' -# - built-in variables are: -# - #{battery_bar} -# - #{battery_hbar} -# - #{battery_percentage} -# - #{battery_status} -# - #{battery_vbar} -# - #{circled_session_name} -# - #{hostname_ssh} -# - #{hostname} -# - #{loadavg} -# - #{pairing} -# - #{prefix} -# - #{root} -# - #{synchronized} -# - #{uptime_d} -# - #{uptime_h} -# - #{uptime_m} -# - #{uptime_s} -# - #{username} -# - #{username_ssh} -tmux_conf_theme_status_left=' ❐ #S | ↑#{?uptime_d, #{uptime_d}d,}#{?uptime_h, #{uptime_h}h,}#{?uptime_m, #{uptime_m}m,} ' -tmux_conf_theme_status_right='#{prefix}#{pairing}#{synchronized} #{?battery_status, #{battery_status},}#{?battery_bar, #{battery_bar},}#{?battery_percentage, #{battery_percentage},} , %R , %d %b | #{username}#{root} | #{hostname} ' - -# status left style -tmux_conf_theme_status_left_fg='#000000,#e4e4e4,#e4e4e4' # black, white , white -tmux_conf_theme_status_left_bg='#ffff00,#ff00af,#00afff' # yellow, pink, white blue -tmux_conf_theme_status_left_attr='bold,none,none' - -# status right style -tmux_conf_theme_status_right_fg='#8a8a8a,#e4e4e4,#000000' # light gray, white, black -tmux_conf_theme_status_right_bg='#080808,#d70000,#e4e4e4' # dark gray, red, white -tmux_conf_theme_status_right_attr='none,none,bold' - -# pairing indicator -tmux_conf_theme_pairing='👓 ' # U+1F453 -tmux_conf_theme_pairing_fg='none' -tmux_conf_theme_pairing_bg='none' -tmux_conf_theme_pairing_attr='none' - -# prefix indicator -tmux_conf_theme_prefix='⌨ ' # U+2328 -tmux_conf_theme_prefix_fg='none' -tmux_conf_theme_prefix_bg='none' -tmux_conf_theme_prefix_attr='none' - -# root indicator -tmux_conf_theme_root='!' -tmux_conf_theme_root_fg='none' -tmux_conf_theme_root_bg='none' -tmux_conf_theme_root_attr='bold,blink' - -# synchronized indicator -tmux_conf_theme_synchronized='🔒' # U+1F512 -tmux_conf_theme_synchronized_fg='none' -tmux_conf_theme_synchronized_bg='none' -tmux_conf_theme_synchronized_attr='none' - -# battery bar symbols -tmux_conf_battery_bar_symbol_full='◼' -tmux_conf_battery_bar_symbol_empty='◻' -#tmux_conf_battery_bar_symbol_full='♥' -#tmux_conf_battery_bar_symbol_empty='·' - -# battery bar length (in number of symbols), possible values are: -# - auto -# - a number, e.g. 5 -tmux_conf_battery_bar_length='auto' - -# battery bar palette, possible values are: -# - gradient (default) -# - heat -# - 'colour_full_fg,colour_empty_fg,colour_bg' -tmux_conf_battery_bar_palette='gradient' -#tmux_conf_battery_bar_palette='#d70000,#e4e4e4,#000000' # red, white, black - -# battery hbar palette, possible values are: -# - gradient (default) -# - heat -# - 'colour_low,colour_half,colour_full' -tmux_conf_battery_hbar_palette='gradient' -#tmux_conf_battery_hbar_palette='#d70000,#ff5f00,#5fff00' # red, orange, green - -# battery vbar palette, possible values are: -# - gradient (default) -# - heat -# - 'colour_low,colour_half,colour_full' -tmux_conf_battery_vbar_palette='gradient' -#tmux_conf_battery_vbar_palette='#d70000,#ff5f00,#5fff00' # red, orange, green - -# symbols used to indicate whether battery is charging or discharging -tmux_conf_battery_status_charging='↑' # U+2191 -tmux_conf_battery_status_discharging='↓' # U+2193 -#tmux_conf_battery_status_charging='⚡ ' # U+26A1 -#tmux_conf_battery_status_charging='🔌 ' # U+1F50C -#tmux_conf_battery_status_discharging='🔋 ' # U+1F50B - -# clock style -tmux_conf_theme_clock_colour='#00afff' # light blue -tmux_conf_theme_clock_style='24' - - -# -- clipboard ----------------------------------------------------------------- - -# in copy mode, copying selection also copies to the OS clipboard -# - true -# - false (default) -# on macOS, this requires installing reattach-to-user-namespace, see README.md -# on Linux, this requires xsel or xclip -tmux_conf_copy_to_os_clipboard=false - - -# -- user customizations ------------------------------------------------------- -# this is the place to override or undo settings - -# increase history size -#set -g history-limit 10000 - -# start with mouse mode enabled -set -g mouse on - -# force Vi mode -# really you should export VISUAL or EDITOR environment variable, see manual -#set -g status-keys vi -#set -g mode-keys vi - -# replace C-b by C-a instead of using both prefixes -# set -gu prefix2 -# unbind C-a -# unbind C-b -# set -g prefix C-a -# bind C-a send-prefix - -# move status line to top -#set -g status-position top diff --git a/misc/update/tmux/tmux_ge_2.3.conf b/misc/update/tmux/tmux_ge_2.3.conf deleted file mode 100644 index 9972c610d..000000000 --- a/misc/update/tmux/tmux_ge_2.3.conf +++ /dev/null @@ -1,36 +0,0 @@ -# nZEDb tmux config for v2.3+ - -# mouse - allows select pane and resize with mouse -set -g mouse on - -bind m \ - set -g mouse on \;\ - display 'Mouse: ON' - -bind M \ - set -g mouse off \;\ - display 'Mouse: OFF' - -# Credit https://github.com/kaushalmodi/dotfiles/blob/master/dot_tmux.conf -# ** Drag pane border to resize -bind -T root MouseDrag1Border resize-pane -M # default - -bind -T root MouseDrag1Pane if -Ft= '#{mouse_any_flag}' 'if -Ft= "#{pane_in_mode}" "copy-mode -M" "send-keys -M"' 'copy-mode -M' # default - -# Left click on a pane selects it -# bind -T root MouseDown1Pane select-pane -t=\; send-keys -M # default -bind -T root MouseDown1Pane select-pane -t= - -# Credit for section below -# https://www.reddit.com/r/tmux/comments/3paqoi/tmux_21_has_been_released/cw552qd - -# This allows you to press page up in normal mode and have it scroll back into the history... -bind-key -T root PPage if-shell -F "#{alternate_on}" "send-keys PPage" "copy-mode -e; send-keys PPage" -bind-key -t vi-copy PPage page-up -bind-key -t vi-copy NPage page-down - -# Very similar to page up, except for the mouse wheel. -bind-key -T root WheelUpPane if-shell -F -t = "#{alternate_on}" "send-keys -M" "select-pane -t =; copy-mode -e; send-keys -M" -bind-key -T root WheelDownPane if-shell -F -t = "#{alternate_on}" "send-keys -M" "select-pane -t =; send-keys -M" -bind-key -t vi-copy WheelUpPane scroll-up # For faster wheel scrolling replace scroll-up with halfpage-up -bind-key -t vi-copy WheelDownPane scroll-down # For faster wheel scrolling replace scroll-up with halfpage-down diff --git a/misc/update/tmux/tmux_le_2.0.conf b/misc/update/tmux/tmux_le_2.0.conf deleted file mode 100644 index a45843c65..000000000 --- a/misc/update/tmux/tmux_le_2.0.conf +++ /dev/null @@ -1,21 +0,0 @@ -# nZEDb tmux config for version <= v2.0 - -#mouse - allows select pane and resize with mouse -set -g mode-mouse on -set -g mouse-resize-pane on -set -g mouse-select-pane on -set -g mouse-select-window on - -bind m \ - set -g mode-mouse on \;\ - set -g mouse-resize-pane on \;\ - set -g mouse-select-pane on \;\ - set -g mouse-select-window on \;\ - display 'Mouse: ON' - -bind M \ - set -g mode-mouse off \;\ - set -g mouse-resize-pane off \;\ - set -g mouse-select-pane off \;\ - set -g mouse-select-window off \;\ - display 'Mouse: OFF'