Встроенный графический редактор ASCII только для OS X


1

Я пытаюсь программно вызвать редактор OS X из сценария, который:

  • не добавляет умные кавычки или символы, не относящиеся к ascii, при редактировании
  • будет работать "из коробки" на любой стандартной системе Mac
  • позволяет пользователю щелкнуть мышью, чтобы поместить курсор

К сожалению, Nano и друзья не позволяют позиционировать курсор, и Apple сошла с ума с обновлениями TextEdit и действительно уничтожила этот редактор!

Я надеюсь, что есть какой-то программный способ настроить TextEdit для работы в качестве редактора ASCII. В качестве альтернативы, есть ли сторонний редактор, чья лицензия позволяет мне включать его в мой сценарий для удовлетворения этой потребности?

===== ИСПОЛЬЗОВАНИЕ КОНТЕКСТА  У меня есть сценарий Python, который запускается «из коробки» на любом Mac. Теперь я хочу, чтобы этот скрипт вызывал редактор для файла ASCII, который мне нужен, чтобы оставаться в виде файла ASCII.
Я не хочу требовать от пользователя ручной настройки, я хочу, чтобы скрипт сам инициализировался. В идеале это не изменило бы никаких глобальных настроек среды, но я могу отказаться от этого второго требования, если у меня нет выбора.


2
Намереваетесь ли вы распространять сценарий и редактор на коммерческой или публичной основе? Вы бы приняли GNU GPL лицензированный редактор? Вам удобно изучать разработку приложений для Objective-C или Mac?
Graham Miln

1
emacs? Он имеет простой режим мыши: stackoverflow.com/questions/5710334/...
Ian C.

Разве вы не можете просто принять форматированный текст и преобразовать его в обычный ascii в фоновом режиме?
CousinCocaine

3
нано имеет позиционирование мыши, просто ⌥ ALT + Нажмите, чтобы разместить курсор.
Mateusz Szlosek

@GrahamMiln GPL настолько драконовский, что я ненавижу делать это с моим проектом ... на самом деле не ожидаю рекламы, но я ненавижу липкость этого контракта.
Dan Oblinger

Ответы:


5

Любой текстедитор textutil

Все еще заинтригованный вашей проблемой, я нашел следующее решение. Существует приложение терминала под названием textutil и это позволяет конвертировать форматированный текст в обычный текст.

  • Отредактируйте и сохраните ваш «Rich» текст, как вы хотите (как в TextEdit)
  • Используйте командную строку textutil преобразовать ваш форматированный текст в обычный текст

    textutil richtext.rtf -convert txt
    
  • Вы также можете передать textutil вывод через sed заменить smartquotes и делать с ней все, что вы хотите

    textutil richtext.rtf -convert txt -stdout | sed s/[”“]/'"'/g
    

    rich text

становится:

Hello, this is rich Text with "smart" quotes


Спасибо! это, пожалуй, лучший из паршивых вариантов, и Apple оставила меня в покое. (именно поэтому я чувствую, что они сошли с ума. ОС на базе UNIX, без текстового редактора, который выходит из коробки, просто глупость!) Что я могу сделать, это запустить процесс, который занят циклами, ожидающими файл для обновляться, когда он обновляется, тогда я могу запустить textutil для преобразования файла, затем мне нужно принудительно завершить процесс редактирования, чтобы пользователь не редактировал файл снова после того, как я его преобразовал. Все это просто грубо, но я думаю, что вы нашли лучшее решение ненужной проблемы, созданной Apple.
Dan Oblinger

3

TextEdit

Вы упоминаете, что Apple сошла с ума с TextEdit. Как конкретно? В любом случае, я бы предложил TextEdit:

  • Может открыть любой .txt файл в виде простого текста
  • Работает из коробки
  • Это позволяет пользователям использовать мышь

Вы можете перечислить свои текущие настройки программно, как:

defaults read com.apple.TextEdit

Вы всегда можете установить предпочтения программно следующим образом:

defaults write com.apple.TextEdit RichText 0

TextEdit preferences

Помните, что ваши системные настройки для цитат могут иногда мешать настройкам умных цитат в TextEdit. Чтобы отключить смарт-цитаты в масштабе всей системы:

  • Перейдите в Системные настройки - & gt; клавиатура
  • Перейти на вкладку «Текст»
  • Снимите флажок «Использовать умные кавычки и тире»

Disable Smart Quotes


Я попробовал ваше решение, но оно не сработало. Я был в состоянии установить значение по умолчанию, и я мог видеть, что значение по умолчанию было установлено. но даже после перезагрузки, если я коснусь 'file.txt' и затем открою 'open file.txt', TextEdit откроется, но затем я набрал кавычки, это были умные кавычки, а не кавычки ASCII. (Я могу отредактировать ваш ответ, чтобы показать точные команды и ответы, если это имеет значение)
Dan Oblinger

Как это не сработало?
CousinCocaine

Умные цитаты являются частью ваших предпочтительных настроек системы. У вас есть умные цитаты по умолчанию. Я обновлю ответ.
CousinCocaine

Как я уже сказал, я пытаюсь «программно вызвать редактор OS X из скрипта», поэтому ваш ответ на использование «$ defaults write ...» был на правильном пути. Я собираюсь уточнить вариант использования в моем вопросе выше. У меня есть скрипт, который запускается «из коробки» на любом Mac. Теперь я хочу, чтобы этот скрипт вызывал редактор для файла, который мне нужен, чтобы оставаться в виде файла ASCII. Я не хочу, чтобы пользователь настраивал интерфейс во время установки. Лучше всего, если я не смогу помешать настройкам пользователя их приложений, но я могу отказаться от этого второго запроса, если должен.
Dan Oblinger

Я понимаю. Удачи
CousinCocaine

1

HTML / Javascript

Способ простого редактирования текста независимо от системы - использовать комбинацию HTML и Javascript. Это Ascii так просто, как только может.

Код ниже бесстыдно украден из thiscouldbebetter.wordpress.com , и даст вам некоторое руководство о том, как реализовать это.

<html>
<body>

<table>
  <tr><td>Text to Save:</td></tr>
  <tr>
    <td colspan="3">
      <textarea id="inputTextToSave" style="width:512px;height:256px"></textarea>
    </td>
  </tr>
  <tr>
    <td>Filename to Save As:</td>
    <td><input id="inputFileNameToSaveAs"></input></td>
    <td><button onclick="saveTextAsFile()">Save Text to File</button></td>
  </tr>
  <tr>
    <td>Select a File to Load:</td>
    <td><input type="file" id="fileToLoad"></td>
    <td><button onclick="loadFileAsText()">Load Selected File</button><td>
  </tr>
</table>

<script type='text/javascript'>

function saveTextAsFile()
{
  var textToWrite = document.getElementById("inputTextToSave").value;
  var textFileAsBlob = new Blob([textToWrite], {type:'text/plain'});
  var fileNameToSaveAs = document.getElementById("inputFileNameToSaveAs").value;

  var downloadLink = document.createElement("a");
  downloadLink.download = fileNameToSaveAs;
  downloadLink.innerHTML = "Download File";
  if (window.webkitURL != null)
  {
    // Chrome allows the link to be clicked
    // without actually adding it to the DOM.
    downloadLink.href = window.webkitURL.createObjectURL(textFileAsBlob);
  }
  else
  {
    // Firefox requires the link to be added to the DOM
    // before it can be clicked.
    downloadLink.href = window.URL.createObjectURL(textFileAsBlob);
    downloadLink.onclick = destroyClickedElement;
    downloadLink.style.display = "none";
    document.body.appendChild(downloadLink);
  }

  downloadLink.click();
}

function destroyClickedElement(event)
{
  document.body.removeChild(event.target);
}

function loadFileAsText()
{
  var fileToLoad = document.getElementById("fileToLoad").files[0];

  var fileReader = new FileReader();
  fileReader.onload = function(fileLoadedEvent) 
  {
    var textFromFileLoaded = fileLoadedEvent.target.result;
    document.getElementById("inputTextToSave").value = textFromFileLoaded;
  };
  fileReader.readAsText(fileToLoad, "UTF-8");
}

</script>

</body>
</html>

Ха, вы ответили дважды, с очень разными подходами. этот, безусловно, из коробки! Возможно, я смогу это адаптировать. Моя проблема заключается в том, что мне нужно вызвать его из скрипта и указать, какой файл он редактирует, и тогда пользователю будет легко сохранить этот файл. Не уверен, возможно ли связываться с приложением JS извне ... Я не думаю, что оно имеет доступ к ARGV при вызове браузера или операторе osx "open".
Dan Oblinger

возможно, в / tmp может быть файл исправления, содержащий имя файла для редактирования? становится довольно хакерским, но, возможно, это может сработать - у вас есть другие мысли о такой адаптации. (просто чтобы было ясно, что я хочу, чтобы я мог сделать эквивалент в своем коде: os.system ("open -a myfile.txt"), и это дает пользователю редактор с этим файлом
Dan Oblinger

Это должно быть возможно: open -a Safari file.html Hardecode путь TXT и встраивать JavaScript в HTML
CousinCocaine

1

Nano позволяет позиционировать курсор. Конечно, это потому, что Сам терминал предоставляет эту возможность , Просто Option + Нажмите, где вам нужно, чтобы пойти. Ранее это была опция, которую вы должны были включить в настройках терминала, но для последних нескольких версий OS X она включена по умолчанию (или жестко задана). Он будет работать в большинстве программ командной строки, включая другие редакторы, такие как vim или emacs.

Другой вариант, который по умолчанию включен Scroll Alternative Screen, Это позволяет интерактивные экраны, такие как man или же nano прокручивать вместо прокрутки экрана терминала. Это работает с прокруткой с сенсорной панели, колесом прокрутки или волшебным колесом мыши.


Не просто nano, но pico, emacs а также vim (все встроенные) также позволяют позиционирование курсора с помощью мыши с опцией + клик.
drfrogsplat

@drfrogsplat Я пытался сказать это, но формулировка была бла. Обновлено. Кроме того, пико просто символически связано с nano начиная с 10.3 (iirc), так же как и vi для vim
cde

спасибо, моя цель состояла в том, чтобы позволить не программистам редактировать текстовый файл. Я беспокоюсь о том, что каждый из этих редакторов немного неудобен для сохранения файла и выхода. это действительно грустно, что эта емкость была снята с Mac. (textedit был бы идеальным редактором, но мне нужно программно навсегда изменить конфигурацию целевой машины - чтобы отключить умные цитаты. не так круто.
Dan Oblinger
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.