diff --git a/src/browser.c b/src/browser.c
index 4fcc3d47893e0c8bdb2fadeaf34e7e1b749da13b..e9345916f3354c6d35bbc0c3b46a9601f918824e 100644
--- a/src/browser.c
+++ b/src/browser.c
@@ -370,7 +370,7 @@ int browse_key(int ch) {
       info_show = 0;
       break;
     case 'd':
-      if(sel == NULL || sel == dirlist_parent)
+      if(read_only || sel == NULL || sel == dirlist_parent)
         break;
       info_show = 0;
       if((t = dirlist_get(1)) == sel)
diff --git a/src/global.h b/src/global.h
index ceb1a2b59ba8eced5568a2ac6794dbdf9b06a42c..71151b5ccc5c4d0320275e83e78846a463d76a27 100644
--- a/src/global.h
+++ b/src/global.h
@@ -71,6 +71,8 @@ struct dir {
 
 /* program state */
 extern int pstate;
+/* read-only flag */
+extern int read_only;
 /* minimum screen update interval when calculating, in ms */
 extern long update_delay;
 
diff --git a/src/main.c b/src/main.c
index 35aaae929e6bba6e0f105ce66a03b69b457e8e59..ed1ce6695804cfc1fb311460e772c9756890d708 100644
--- a/src/main.c
+++ b/src/main.c
@@ -37,6 +37,7 @@ int pstate;
 
 int min_rows = 17,
     min_cols = 60;
+int read_only = 0;
 long update_delay = 100,
      lastupdate = 999;
 
@@ -118,6 +119,7 @@ char *argv_parse(int argc, char **argv) {
       for(j=1; j<len; j++)
         switch(argv[i][j]) {
           case 'x': calc_smfs = 1; break;
+          case 'r': read_only = 1; break;
           case 'q': update_delay = 2000;     break;
           case '?':
           case 'h':
@@ -126,6 +128,7 @@ char *argv_parse(int argc, char **argv) {
             printf("  -q                         Quiet mode, refresh interval 2 seconds\n");
             printf("  -v                         Print version\n");
             printf("  -x                         Same filesystem\n");
+            printf("  -r                         Read only\n");
             printf("  --exclude PATTERN          Exclude files that match PATTERN\n");
             printf("  -X, --exclude-from FILE    Exclude files that match any pattern in FILE\n");
             exit(0);