about summary refs log tree commit diff stats
diff options
context:
space:
mode:
-rw-r--r--doc/cd-after-exit.txt24
1 files changed, 20 insertions, 4 deletions
diff --git a/doc/cd-after-exit.txt b/doc/cd-after-exit.txt
index b13a8449..4b24c088 100644
--- a/doc/cd-after-exit.txt
+++ b/doc/cd-after-exit.txt
@@ -5,6 +5,8 @@ The "cd-after-exit" Feature
 This document explains the troublesome implementation of the "cd-after-exit"
 feature.
 
+This is written for developers who wonder how it's working.
+
 
 == Specification
 
@@ -118,6 +120,24 @@ A convenient way of using this feature is adding this line to your bashrc:
     alias rn='source ranger ranger'
 
 
+== Keyboard interrupt handling
+
+Another thing: If Ctrl+C is pressed anywhere in the program, the execution
+of the sourced shell script is stopped and the feature stops working.
+
+To handle that, I use: trap "" INT
+This ignores all interrupt signals. However, since ranger needs to know
+about ^C presses, I use this approach:
+
+    ranger_exec="$1"
+    shift
+    trap "" INT
+    exec 3< <($ranger_exec --cd-after-exit $@ 3>&1 1>&2 2>&3 3>&-)
+    while read ranger_output; do false; done <&3
+    cd "$ranger_output"
+    #...and some clean ups
+
+
 == Open issues
 
 Unfortunately there is some redundancy: you have to type the path to ranger
@@ -134,8 +154,4 @@ Example:
 If you find a way to make this print out 'sourced.sh', let me know. :)
 
 
-Another thing: If Ctrl+C is pressed anywhere in the program, the execution
-of the sourced shell script is stopped and the feature stops working.
-
-
 Dec 25, 2009