From: 諏訪子 <suwako@076.moe>
Date: Wed, 9 Oct 2024 04:57:36 +0000 (+0900)
Subject: パスワードコピーの期間を設定出来る様に (#27)
X-Git-Url: http://10.11.0.4:5575/?a=commitdiff_plain;h=023ad5a4598815148556f653e917848808143ab5;p=sp.git

パスワードコピーの期間を設定出来る様に (#27)
---

diff --git a/CHANGELOG.md b/CHANGELOG.md
index 1a9674a..c06054f 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -2,6 +2,7 @@
 * パスワード表示で、「OpenPGP」かどうかの確認の追加
 * 侵害されたパスワードの確認の追加
 * 複数サイトで同じパスワードを利用かどうか、パスワードの長さ、又はパスワードの強さの確認
+* パスワードコピーの期間を設定出来る様に
 
 # 1.4.0
 * Haiku対応
diff --git a/main.c b/main.c
index 1e58568..0d1dc41 100644
--- a/main.c
+++ b/main.c
@@ -105,7 +105,7 @@ int main(int argc, char *argv[]) {
       if (pass == NULL) return -1;
       printf("%s\n", pass);
     }
-    else if (strcmp(argv[1], "-y") == 0) yankpass(argv[2]);
+    else if (strcmp(argv[1], "-y") == 0) yankpass(argv[2], 45);
     else if (strcmp(argv[1], "-a") == 0) addpass(argv[2]);
     else if (strcmp(argv[1], "-d") == 0) delpass(argv[2], 0);
     else if (strcmp(argv[1], "-e") == 0) {
@@ -129,6 +129,12 @@ int main(int argc, char *argv[]) {
       usage();
       return 1;
     }
+  } else if (argc == 4) {
+    if (strcmp(argv[1], "-y") == 0) {
+      int i;
+      if (sscanf(argv[3], "%d", &i) == 0) yankpass(argv[2], 45);
+      else yankpass(argv[2], atoi(argv[3]));
+    }
   } else if (argc == 2) {
     char *basePath = getfullpath(NULL);
     if (basePath == NULL) return -1;
diff --git a/man/sp-en.1 b/man/sp-en.1
index ee57b60..30affba 100644
--- a/man/sp-en.1
+++ b/man/sp-en.1
@@ -3,7 +3,7 @@
 sp - Simple Password Manager
 .br
 .B sp
-[-bfi] [-i \fI\,gpg-id\fR] [-adeosy \fI\,password\fR] [-c \fI,all\fR|\fI,length\fR|\fI,strength\fR|\fI,duplicate\fR] [-g [\fI\,length\fR] [\fI\,secure\fR|\fI\,risk\fR]]
+[-bfi] [-i \fI\,gpg-id\fR] [-adeos \fI\,password\fR] [-c \fI,all\fR|\fI,length\fR|\fI,strength\fR|\fI,duplicate\fR] [-g [\fI\,length\fR] [\fI\,secure\fR|\fI\,risk\fR]] [-y \fI\,password\fR [\fI,seconds\fR]]
 .SH DESCRIPTION
 .PP
 Simple Password Manager
@@ -53,8 +53,10 @@ Show password
 \fB\,v\fR
 Show version
 .TP
-\fB\,y\fR \fI\,password\fR
+\fB\,y\fR \fI\,password\fR \fI,seconds\fR
 Copy password to the clipboard without showing the password (Xorg-only)
+.br
+The default is 45 seconds.
 .SH LANGUAGE
 The default language is Japanese. In order to use English,
 .br
diff --git a/man/sp-jp.1 b/man/sp-jp.1
index 79e0319..94fe122 100644
--- a/man/sp-jp.1
+++ b/man/sp-jp.1
@@ -3,7 +3,7 @@
 sp - Simple Password Manager
 .br
 .B sp
-[-bfi] [-i \fI\,gpg-id\fR] [-adeosy \fI\,password\fR] [-c \fI,all\fR|\fI,length\fR|\fI,strength\fR|\fI,duplicate\fR] [-g [\fI\,length\fR] [\fI\,secure\fR|\fI\,risk\fR]]
+[-bfi] [-i \fI\,gpg-id\fR] [-adeos \fI\,password\fR] [-c \fI,all\fR|\fI,length\fR|\fI,strength\fR|\fI,duplicate\fR] [-g [\fI\,length\fR] [\fI\,secure\fR|\fI\,risk\fR]] [-y \fI\,password\fR [\fI,seconds\fR]]
 .SH 説明
 .PP
 シンプルなパスワードマネージャー。
@@ -52,8 +52,10 @@ GPGと使ってパスワードストレージを初期設定
 \fB\,v\fR
 バージョンを表示
 .TP
-\fB\,y\fR \fI\,password\fR
+\fB\,y\fR \fI\,password\fR \fI,seconds\fR
 パスワードを表示せずクリップボードにコピーする(Xorgのみ)
+.br
+デフォルトは45秒です。
 .SH LANGUAGE
 デフォルトの言語は日本語ですが、英語で利用するには、
 .br
diff --git a/src/yankpass.c b/src/yankpass.c
index ecc30f7..4a46c74 100644
--- a/src/yankpass.c
+++ b/src/yankpass.c
@@ -5,7 +5,7 @@
 #include "yankpass.h"
 #include "showpass.h"
 
-void yankpass(char *file) {
+void yankpass(char *file, int copyTimeout) {
   char *lang = getlang();
 
   // Xセッションではない場合(例えば、SSH、TTY、Gayland等)、showpass()を実行して
@@ -116,20 +116,23 @@ void yankpass(char *file) {
 
   pclose(pipe);
 
-  // 45秒後、クリップボードから削除する
+  // 何(デフォルトは45)秒後、クリップボードから削除する
   if (strncmp(lang, "en", 2) == 0)
     printf(
-      "%s\n%s\n",
+      "%s\n%s%d%s\n",
       "Added password to the clipboard.",
-      "After 45 seconds it'll be deleted from the clipboard."
+      "After ",
+      copyTimeout,
+      " seconds it'll be deleted from the clipboard."
     );
   else
     printf(
-      "%s\n%s\n",
+      "%s\n%d%s\n",
       "パスワードをクリップボードに追加しました。",
-      "45秒後はクリップボードから取り消されます。"
+      copyTimeout,
+      "秒後はクリップボードから取り消されます。"
     );
-  sleep(45);
+  sleep(copyTimeout);
   system("echo -n | xclip -selection clipboard");
 
   // 掃除
diff --git a/src/yankpass.h b/src/yankpass.h
index e97d95c..58e447f 100644
--- a/src/yankpass.h
+++ b/src/yankpass.h
@@ -1,6 +1,6 @@
 #ifndef YANKPASS_H
 #define YANKPASS_H
 
-void yankpass(char *file);
+void yankpass(char *file, int copyTimeout);
 
 #endif