Saat mengedit teks dalam seleksi menggunakan Applescript di layanan Automator, apakah mungkin untuk menjaga lekukan asli sambil menambahkan spasi tab di depannya?
Alur Kerja dan Skrip Automator
on run {input, parameters}
if "/*" is in item 1 of input then
set input to replace("/*", "", input as string)
set input to replace("*/", "", input as string)
set input to extract(2, 2, input)
set input to indent(input, false)
return input
else
set input to indent(input, true)
set input to "/*" & return & (input as string) & return & "*/"
return input as text
end if
end run
on replace(searchString, editString, inputString)
set previousDelimiters to AppleScript's text item delimiters
set AppleScript's text item delimiters to searchString
set stringItems to text items of inputString
set AppleScript's text item delimiters to editString
set outputString to stringItems as string
set AppleScript's text item delimiters to previousDelimiters
return outputString
end replace
on indent(input, incrementing)
set spacing to tab
set input to input's text items
if not incrementing then
set previousDelimiters to AppleScript's text item delimiters
set AppleScript's text item delimiters to ""
set output to replace(spacing, "", input as string)
set AppleScript's text item delimiters to previousDelimiters
return output
else
set previousDelimiters to AppleScript's text item delimiters
set output to item 1 of input as text
set AppleScript's text item delimiters to linefeed & spacing
set output to spacing & (every paragraph of output) as string
set AppleScript's text item delimiters to ""
return output
end if
end indent
on extract(startOffset, endOffset, input)
set firstParagraph to (first paragraph of input)
set lastParagraph to (last paragraph of input)
set firstLine to length of firstParagraph
set lastLine to length of lastParagraph
set input to text (firstLine + startOffset) thru -(lastLine + endOffset) of input
return input
end extract
Cuplikan berikut menunjukkan hasil yang diharapkan dan output saat ini menggunakan alur kerja dan skrip yang disebutkan di atas:
Input Sampel
let c1 = CLLocation(latitude: self.latitude, longitude: self.longitude)
let c2 = CLLocation(latitude: coordinate.latitude, longitude: coordinate.longitude)
Hasil yang diharapkan
/*
let c1 = CLLocation(latitude: self.latitude, longitude: self.longitude)
let c2 = CLLocation(latitude: coordinate.latitude, longitude: coordinate.longitude)
*/
Output Saat Ini
/*
let c1 = CLLocation(latitude: self.latitude, longitude: self.longitude)
let c2 = CLLocation(latitude: coordinate.latitude, longitude: coordinate.longitude)
*/
applescript
automator
wshaheer
sumber
sumber
run
handler memilikiif
pernyataan denganelse
cabang , sehingga Anda perlu untuk menunjukkan sampel input dan output yang diharapkan sampel untuk kedua cabang , bukan hanyaelse
cabang .if
pernyataan memeriksa untuk melihat apakah teks sudah diformat, dan jika demikian maka kembali ke keadaan semula, yaitu uncommentedJawaban:
Diperbarui untuk mencerminkan pertanyaan yang diperbarui bersama dengan komentar untuk mencapai tujuan mengubah komentar di Xcode.
Contoh kode AppleScript berikut , yang diperlihatkan lebih lanjut di bawah ini, yang digunakan dalam Layanan Automator diuji dalam macOS Sierra dan Xcode 8.3.3 dan berfungsi untuk mengomentari kode yang dipilih atau menghapus komentar kode yang dipilih , dengan cara pengkodean dalam contoh kode AppleScript .
Dengan kata lain, jika kode yang dipilih terlihat seperti:
Dan Layanan Automator dijalankan pada kode yang dipilih di atas, akan terlihat seperti:
Atau jika kode yang dipilih terlihat seperti:
Dan Layanan Automator dijalankan pada kode yang dipilih di atas, akan terlihat seperti:
Contoh AppleScript kode untuk digunakan dalam Run AppleScript tindakan dalam Automator layanan .
Catatan:
Xcode (8.8.3 toh) tidak mendukung kode komentar blok bersarang , artinya jika Anda berkomentar beberapa kode dengan skrip ini dan kemudian memilih kode tambahan yang mencakup kode yang sebelumnya dikomentari oleh skrip ini, itu akan menimbulkan kesalahan saat menjalankan layanan. Anda dapat mengatasi ini dengan mengubah:
Untuk:
Namun Xcode kemudian akan menunjukkan kode komentar bersarang memiliki kesalahan. Jadi nilai sebenarnya dari skrip ini adalah menggunakannya hanya pada kode yang tidak akan dipilih lagi sebagai blok yang lebih besar setelah komentar asli oleh skrip ini.
Saat menghapus komentar kode, Anda harus selalu memastikan untuk memilih sehingga baris pilihan pertama dan terakhir berisi karakter komentar blokir,
/*
dan*/
, tanpa baris awal atau akhir baris kosong dalam seleksi.Juga, Xcode memiliki pintasan keyboard bawaan untuk mengomentari baris yang dipilih dengan pemimpin
//
dengan memilih kode dan menekan command/. Menekan pintasan keyboard yang sama menghilangkan yang memimpin//
. Ini adalah beberapa cara meniadakan kebutuhan untuk menggunakan solusi skrip ini.Ada plugin pihak ketiga untuk komentar di Xcode dan pencarian Google harus membuahkan hasil.
Salah satu contoh adalah: BlockComment untuk Xcode
Lihat edit riwayat untuk jawaban asli sebelum OP diperbarui dengan detail aktual tujuan.
Catatan: The contoh AppleScript kode hanya itu dan tidak mempekerjakan penanganan kesalahan dan dimaksudkan hanya untuk menunjukkan salah satu dari banyak cara menyelesaikan tugas. Tanggung jawab selalu ada pada Pengguna untuk menambah / menggunakan penanganan kesalahan yang sesuai sebagaimana diperlukan / diinginkan.
sumber