mirror of
https://github.com/tmux-plugins/tmux-resurrect.git
synced 2024-11-22 04:18:48 +00:00
parent
2edd3ff98d
commit
cbf58ac613
@ -1,6 +1,7 @@
|
|||||||
# Changelog
|
# Changelog
|
||||||
|
|
||||||
### master
|
### master
|
||||||
|
- restore pane processes
|
||||||
|
|
||||||
### v0.0.4, 2014-08-26
|
### v0.0.4, 2014-08-26
|
||||||
- restore pane layout for each window
|
- restore pane layout for each window
|
||||||
|
@ -2,6 +2,10 @@
|
|||||||
|
|
||||||
Enables saving and restoring of tmux sessions.
|
Enables saving and restoring of tmux sessions.
|
||||||
|
|
||||||
|
Requirements / dependencies:
|
||||||
|
- `tmux 1.9` or higher
|
||||||
|
- `pgrep`
|
||||||
|
|
||||||
### Key bindings
|
### Key bindings
|
||||||
|
|
||||||
- `prefix + M-s` - save
|
- `prefix + M-s` - save
|
||||||
|
@ -75,8 +75,9 @@ new_pane() {
|
|||||||
restore_pane() {
|
restore_pane() {
|
||||||
local pane="$1"
|
local pane="$1"
|
||||||
echo "$pane" |
|
echo "$pane" |
|
||||||
while IFS=$'\t' read line_type session_name window_number window_name window_active window_flags pane_index dir pane_active; do
|
while IFS=$'\t' read line_type session_name window_number window_name window_active window_flags pane_index dir pane_active pane_command pane_full_command; do
|
||||||
window_name="$(remove_first_char $window_name)"
|
window_name="$(remove_first_char "$window_name")"
|
||||||
|
pane_full_command="$(remove_first_char "$pane_full_command")"
|
||||||
if window_exists "$session_name" "$window_number"; then
|
if window_exists "$session_name" "$window_number"; then
|
||||||
new_pane "$session_name" "$window_number" "$window_name" "$dir"
|
new_pane "$session_name" "$window_number" "$window_name" "$dir"
|
||||||
elif session_exists "$session_name"; then
|
elif session_exists "$session_name"; then
|
||||||
@ -104,6 +105,16 @@ restore_all_sessions() {
|
|||||||
done < $(last_session_path)
|
done < $(last_session_path)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
restore_all_pane_processes() {
|
||||||
|
local pane_full_command
|
||||||
|
awk 'BEGIN { FS="\t"; OFS="\t" } /^pane/ && $11 !~ "^:$" { print $2, $3, $7, $11; }' $(last_session_path) |
|
||||||
|
while IFS=$'\t' read session_name window_number pane_index pane_full_command; do
|
||||||
|
pane_full_command="$(remove_first_char "$pane_full_command")"
|
||||||
|
tmux switch-client -t "${session_name}:${window_number}"
|
||||||
|
tmux send-keys -t "$pane_index" "$pane_full_command" "C-m"
|
||||||
|
done
|
||||||
|
}
|
||||||
|
|
||||||
restore_pane_layout_for_each_window() {
|
restore_pane_layout_for_each_window() {
|
||||||
\grep '^window' $(last_session_path) |
|
\grep '^window' $(last_session_path) |
|
||||||
while IFS=$'\t' read line_type session_name window_number window_active window_flags window_layout; do
|
while IFS=$'\t' read line_type session_name window_number window_active window_flags window_layout; do
|
||||||
@ -139,7 +150,9 @@ main() {
|
|||||||
if supported_tmux_version_ok; then
|
if supported_tmux_version_ok; then
|
||||||
check_saved_session_exists
|
check_saved_session_exists
|
||||||
restore_all_sessions
|
restore_all_sessions
|
||||||
restore_pane_layout_for_each_window
|
restore_all_pane_processes
|
||||||
|
restore_pane_layout_for_each_window >/dev/null 2>&1
|
||||||
|
# below functions restore exact cursor positions
|
||||||
restore_active_pane_for_each_window
|
restore_active_pane_for_each_window
|
||||||
restore_active_and_alternate_windows
|
restore_active_and_alternate_windows
|
||||||
restore_active_and_alternate_sessions
|
restore_active_and_alternate_sessions
|
||||||
|
@ -24,6 +24,10 @@ pane_format() {
|
|||||||
format+="#{pane_current_path}"
|
format+="#{pane_current_path}"
|
||||||
format+="${delimiter}"
|
format+="${delimiter}"
|
||||||
format+="#{pane_active}"
|
format+="#{pane_active}"
|
||||||
|
format+="${delimiter}"
|
||||||
|
format+="#{pane_current_command}"
|
||||||
|
format+="${delimiter}"
|
||||||
|
format+="#{pane_pid}"
|
||||||
echo "$format"
|
echo "$format"
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -55,10 +59,27 @@ state_format() {
|
|||||||
echo "$format"
|
echo "$format"
|
||||||
}
|
}
|
||||||
|
|
||||||
dump_panes() {
|
dump_panes_raw() {
|
||||||
tmux list-panes -a -F "$(pane_format)"
|
tmux list-panes -a -F "$(pane_format)"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pane_full_command() {
|
||||||
|
pane_pid="$1"
|
||||||
|
\pgrep -lf -P "$pane_pid" |
|
||||||
|
cut -d' ' -f2-
|
||||||
|
}
|
||||||
|
|
||||||
|
# translates pane pid to process command running inside a pane
|
||||||
|
dump_panes() {
|
||||||
|
local full_command
|
||||||
|
local d=$'\t' # delimiter
|
||||||
|
dump_panes_raw |
|
||||||
|
while IFS=$'\t' read line_type session_name window_number window_name window_active window_flags pane_index dir pane_active pane_command pane_pid; do
|
||||||
|
full_command="$(pane_full_command $pane_pid)"
|
||||||
|
echo "${line_type}${d}${session_name}${d}${window_number}${d}${window_name}${d}${window_active}${d}${window_flags}${d}${pane_index}${d}${dir}${d}${pane_active}${d}${pane_command}${d}:${full_command}"
|
||||||
|
done
|
||||||
|
}
|
||||||
|
|
||||||
dump_windows() {
|
dump_windows() {
|
||||||
tmux list-windows -a -F "$(window_format)"
|
tmux list-windows -a -F "$(window_format)"
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user