@@ -1244,6 +1244,62 @@ of the term to replace."
1244
1244
(find-file (car files )))
1245
1245
(t (find-file (completing-read " Package file: " files nil t ))))))
1246
1246
1247
+ (defun idris-start-idris2-project (&optional no-visit )
1248
+ " Interactively create a new Idris2 project with ipkg file and source directory.
1249
+
1250
+ When NO-VISIT is t does not open the generated ipkg file in other window."
1251
+ (interactive )
1252
+ (cl-flet ((project-name ()
1253
+ (let ((project-name (string-trim (read-string " Project name: " ))))
1254
+ (when (string-match-p " [^a-zA-Z0-9_ ]" project-name)
1255
+ (user-error " Project name should consist only of letters, numbers, spaces and underscores" ))
1256
+ (when (string= " " project-name)
1257
+ (user-error " Project name can not be empty" ))
1258
+ project-name))
1259
+ (project-directory (default-filename)
1260
+ (let ((dir (read-directory-name " Create in: " nil default-filename nil default-filename)))
1261
+ (when (string= " " dir)
1262
+ (user-error " Project directory can not be empty" ))
1263
+ (when (file-exists-p dir)
1264
+ (user-error " %s already exists" dir))
1265
+ dir)))
1266
+ (let* ((project-name (project-name))
1267
+ (default-filename (downcase (replace-regexp-in-string " [^a-zA-Z0-9_]" " _" project-name)))
1268
+ (package-name (replace-regexp-in-string " [^a-zA-Z0-9_]" " " project-name))
1269
+ (create-in (project-directory default-filename))
1270
+ (src-dir (string-trim (read-string " Source directory (src): " nil nil " src" )))
1271
+ (authors (string-trim (read-string (format " Authors (%s ): " (user-full-name )) nil nil (user-full-name ))))
1272
+ (options (string-trim (read-string " Options: " )))
1273
+ (ipkg-file (file-truename (concat (file-name-as-directory create-in)
1274
+ (concat default-filename " .ipkg" ))))
1275
+ (output-buffer (generate-new-buffer " *Idris Script Output*" ))
1276
+ (input-buffer (generate-new-buffer " *Idris Script Input*" )))
1277
+ (make-directory (concat (file-name-as-directory create-in) src-dir) t )
1278
+ (with-current-buffer input-buffer
1279
+ (insert package-name " \n " )
1280
+ (insert authors " \n " )
1281
+ (insert options " \n " )
1282
+ (insert src-dir " \n " )
1283
+ (call-process-region (point-min ) (point-max )
1284
+ idris-interpreter-path
1285
+ nil
1286
+ output-buffer
1287
+ nil
1288
+ " --init"
1289
+ ipkg-file))
1290
+ (let ((output (with-current-buffer output-buffer
1291
+ (buffer-string ))))
1292
+ (when (string-match-p " error" output)
1293
+ (message " Idris: %s " output)))
1294
+
1295
+ (kill-buffer output-buffer)
1296
+ (kill-buffer input-buffer)
1297
+ (when (file-exists-p ipkg-file)
1298
+ (with-current-buffer (find-file-noselect ipkg-file)
1299
+ (insert " -- " project-name " \n " ))
1300
+
1301
+ (when (null no-visit) (find-file-other-window ipkg-file))))))
1302
+
1247
1303
(defun idris-start-project ()
1248
1304
" Interactively create a new Idris project, complete with ipkg file."
1249
1305
(interactive )
0 commit comments